-Xintermodule


大域最適化を行います。

[指定形式]

-Xintermodule

 

-

省略時解釈

大域最適化を行いません。

[詳細説明]

-

大域最適化を行います。

-

主な最適化内容を以下に示します。

-

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

出力コード例を以下に示します。

[Cソース]
extern int x[2];
static int func1(int *a, int *b) {
    *a=0;
    *b=1;
    return *a;
}
int func2() {
    return func1(&x[0], &x[1]);
}
 
[出力アセンブラ・ソース]
_func1.1:
    .stack  _func1.1 = 0
    mov     #_x, r2
    st.w    r0, 0x00000000[r2]
    mov     0x00000001, r5
    st.w    r5, 0x00000004[r2]
    mov     0x00000000, r10     ; aとbの指す先が違うため0を直接代入
    jmp     [r31]
_func2:
    .stack  _func2 = 0
    mov     #_x, r6
    addi    0x00000004, r6, r7
    br9     _func1.1

 

-

パラメータ,戻り値の定数伝播

出力コード例を以下に示します。

[Cソース]
static int func(int x, int y, int z) {
    return x-y+z;
}
int func2() {
    return func(3,4,5);
}
 
[出力アセンブラ・ソース]
_func.1:
    .stack  _func.1 = 0
    mov     0x00000004, r10     ; 4(=3-4+5)を直接代入
    jmp     [r31]
_func2:
    .stack  _func2 = 0
    mov     0x00000005, r8
    mov     0x00000004, r7
    mov     0x00000003, r6
    br9     _func.1

[使用例]

-

ソース・ファイルmain.c,sub.cの大域最適化を行います。

>ccrh -Xintermodule -Osize -Xcommon=rh850 main.c sub.c