(この記事は私の blog の http://umezawa.dyndns.info/wordpress/?p=7429 の転載です)
GCC なり Clang なり MSVC なりを使う場合、普通は最適化オプションとしては -O2
などとだけ指定します。実際にはこの -O2
はいろいろな最適化手法の集合を有効化するオプションなのですが、じゃあその集合を知りたくなったらどうしましょう、というのがこの記事のお話です。
MSVC (Visual C++) の場合
MSVC の場合は MSDN のオプションの説明のページにそのものズバリ書いてあります。後述の GCC や Clang と比べると MSVC は最適化オプションの粒度が粗いことが分かります。
GCC の場合
オンラインマニュアルを見ると書いてあります。
手元のバージョンの GCC について調べたい場合は、
gcc -Q -O2 --help=optimizers
などとすると具体的な設定が表示されます。
Clang の場合
Clang の場合はサクッと見つけられなかった(マニュアルとか見てもそれぞれのオプションがどういう位置づけなのかしか書いてない)のですが、Stack Overflow にそういう質問があるということを教えてもらいました。
# LLVM レベルのオプションを知りたい場合
llvm-as < /dev/null | opt -O2 -disable-output -debug-pass=Arguments
# Clang が独自に追加するオプションを知りたい場合
echo 'int;' | clang -xc -O2 - -o /dev/null -\#\#\#
出力が読みづらいのが難点です。