第21回 GCC2.95から追加変更のあったオプションの補足と検証(その9)

岸 哲夫

 今回も引き続きGCC2.95から追加変更のあった最適化オプションについての補足と検証を行います.(筆者)

space

-foptimize-register-move,-fregmove

 GCC2.95では-foptimize-register-movesという名称で,2オペランド命令の機種で役立つものでした.インテル・アーキテクチャのマシンではあまり意味をもたなかったのです.

 これはTRON仕様やRISC系マイクロプロセッサをもつマシンに指定してレジスタの割り当てを最適化することにも役立つものでした.

 今は語尾の“s”がなくなり,用途が少し変わりました.

 このオプションを指定すると,move命令内で,およびその他の単純な命令におけるオペランドにおいて,レジスタとの結合量を最大化するために,レジスタ番号の再割り当てを試みます.もちろん,2オペランド命令の機種において特に役立つことに変わりはありません.

-foptimize-sibling-calls

 このオプションを付けることで,最適化によって末尾再帰の除去を行います.末尾再帰でスタックを食い尽くさないようになります.

-fprefetch-loop-arrays

 ターゲット・マシンがサポートしているならば,大量のデータ読み込みの際に先読みを行います.このとき,オプション-fstrength-reduceを付加しないと効果がありません.

-frename-registers

 この最適化は,多くのレジスタを備えたプロセッサに役立つでしょう.レジスタの使用を割り付けの後にすることにより,スケジューリングされたコード中の誤りを回避することを試みます.

-freorder-blocks,-freorder-functions

 このオプションは,AthlonやPentiumVで機能します.それほど重要な最適化ではありません.

-fsignaling-nans

 このオプションを指定すると,浮動小数点式のオペレーション中にユーザ可視のトラップを生成します.

 オプションの指定の方法は次のとおりです.

  • 指定なし

  •   gcc test233.c -S -ffast-math
            -fomit-frame -pointer -O3
  • 指定あり

  •   gcc test233.c -S -fsignaling-nans
            -fomit -frame-pointer -O3

 ソースと生成されたコードをリスト1リスト3に示します.

-fsingle-precision-constant

 このオプションを指定すると,浮動小数の定数をすべてfloatとして単精度で扱います.

 ソースと生成されたコードをリスト4リスト6に示します.

 実行結果は次のとおりです.

 単精度で扱うと範囲外になる値も倍精度で扱うと正しい結果になります.

  $ gcc test234.c -fsingle-precision -constant
                   -o test234
  $ ./test234
  INF
  6.543217E+00
  NAN
  $ gcc test234.c  -o test234
  $ ./test234
  1.797690E+308
  6.543217E+00
  1.000000E+08
  $ 

-fstrict-aliasing

 このオプションを指定すると,簡単にいえばdoubleで確保した領域をintポインタで参照することが不可能になります.厳密にコードをチェックするときに有益です.

 オプションの指定の方法は次のとおりです.

  • 指定なし

  •   gcc -O2 -fno-strict-aliasing test235.c
  • 指定あり

  •   gcc -O2 test235.c

 ソースと生成されたコードをリスト7リスト9に示します.

 また,実行結果を次に示します.

  $ gcc test235.c -o test235 -O2
  $ ./test235
  3.141593e+00
  3.141593e+00
  $ gcc test235.c -o test235 
-fno-strict -aliasing
  $ ./test235
  3.141593e+00
  -3.141593e+00
  $ 

-ftracer

 このオプションは解析やフロー・コントロールを最適化し,他の最適化の実行を助けます.

-funsafe-math-optimizations

 IEEEまたはANSIの基準を破っても浮動小数点演算のための最適化を行います.これは好みで指定してください.

*          *

 次回はSSA最適化,および最適化オプションのまとめを行います.


NEW記事内インデックス    連載インデックスはこちら   Interfaceのトップ
◆最適化オプション
リスト

Copyright 2004 岸 哲夫

Copyright 1997-2004 CQ Publishing Co.,Ltd.