07/10/12 00:58:21
ソースを読みました。opts.c の decode_options() に最適化オプション読み込みの
基本部分がありました。大雑把には次のような構造でした。
for (i = 1; i < argc; i++)
{ /* すべての-Oxオプションを通し読み */ }
if (optimize >= 1)
{ flag_hoge = 1; ... } /* -O1以上でのフラグ設定を適用 */
if (optimize >= 2)
{ flag_geho = 1; ... } /* -O2以上でのフラグ設定を適用 */
...
handle_options(argc, argv, ...); /* 各オプションを処理 */
optimize >= 3 では、flag_inline_functions と flag_unswitch_loops と
flag_gcse_after_reload を 1 にしていました。
その箇所だけ読むとmanやinfoの記述は正しいことになるんですが、はて。
結局追いきれませんでした。
それから、>>988の通り、フラグ変数を書き換えてもその情報をどこにも伝えません。
ちょっと不便なような。。。
で、別解なんですが、「-O3 --param max-completely-peeled-insns=0」
と指定してpeelingを止めてしまえば目的を果たせることがわかりました。
この指定で行こうと思います。