最適化

勝手に呼ぶ関数を変えるのは最適化と言えるのだろうか。某Power5の共有メモリマルチプロセッサマシンで、

int main(){
  printf("hello,world\n");
}

というソースをコンパイルした結果は

.main:
        mflr 0
        stw 31,-4(1)
        stw 0,8(1)
        stwu 1,-64(1)
        mr 31,1
        lwz 3,LC..1(2)
        bl .printf
        nop
        lwz 1,0(1)
        lwz 0,8(1)
        mtlr 0
        lwz 31,-4(1)
        blr

だが、-Oでコンパイルすると、

.main:
        mflr 0
        lwz 3,LC..1(2)
        stw 0,8(1)
        stwu 1,-56(1)
        bl .puts
        nop
        addi 1,1,56
        lwz 0,8(1)
        mtlr 0
        blr

ちなみに、PS3に入れたFedora7のgccではデフォルトでこの最適化がonになるようだった。そのgccのバージョンは知らないが。