Everything

 

-ip_optimize


コンパイル・オプション / 最適化オプション

[指定形式]

-ip_optimize

[詳細説明]

-

大域最適化を実施します。

-

手続き間別名解析を利用した最適化

-

引数・戻り値の定数伝播 など

[例]

例 1.

-

<Cソース>

static int func1(int *a, int *b) {
    *a=0;
    *b=1;
    return *a;
}
int x[2];
int func2() {
    return func1(x, x+1);
}

-

<ip_optimizeの指定がない場合のアセンブリ出力>

; -optimize=2 -size
__$func1:
  MOV.L #00000000H, [R1]
  MOV.L #00000001H, [R2]
  MOV.L [R1], R1
  RTS
 
_func2:
  MOV.L #_x, R1
  ADD #04H, R1, R2
  BRA __$func1

-

<ip_optimize指定時のアセンブリ出力>

; -optimize=2 -size
 
__$func1:
  MOV.L #00000000H, [R1]
  MOV.L #00000001H, [R2]
  MOV.L #00000000H, R1
  RTS
 
_func2:
  MOV.L #_x, R1
  ADD #04H, R1, R2
  BRA __$func1

例 2.

-

<Cソース>

static int func(int x, int y, int z) {
    return x-y+z;
}
int func2() {
    return func(3,4,5);
}

-

<ip_optimizeの指定がない場合のアセンブリ出力>

; -optimize=2 -size
 
__$func:
  ADD R3, R1
  SUB R2, R1
  RTS
_func2:
  MOV.L #00000005H, R3
  MOV.L #00000004H, R2
  MOV.L #00000003H, R1
  BRA __$func

-

<ip_optimize指定時のアセンブリ出力>

; -optimize=2 -size
 
__$func:
  MOV.L #00000004H, R1
  RTS
_func2:
  MOV.L #00000005H, R3
  MOV.L #00000004H, R2
  MOV.L #00000003H, R1
  BRA __$func

[備考]

-

merge_filesオプションと同時に指定することにより、ファイル間の最適化も行うことができます。