LoginSignup
1

More than 3 years have passed since last update.

C/C++ コンパイラの最適化オプションの具体的な中身

Posted at

(この記事は私の 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 -\#\#\#

出力が読みづらいのが難点です。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1