Xcode が提供する標準の llvm ツールチェーンは、オプティマイザーからのデバッグ情報の取得をサポートしていないようです。ただし、独自のllvmをロールしてそれを使用する場合、上で提案されたmishrのようにフラグを渡すことができるはずです。私が使用したワークフローは次のとおりです。
1. homebrew を使用して、llvm をインストールします。
brew tap homebrew/versions
brew install llvm33 --with-clang --with-asan
これにより、完全で比較的最新の llvm ツールチェーンがインストールされます。/usr/local/bin/*-3.3
(つまり)にリンクされていclang++-3.3
ます。実際のディスク上の場所は、brew info llvm33
おそらく経由で入手できます/usr/local/Cellar/llvm33/3.3/bin
。
2.自作のllvmとフラグを使用して、最適化する単一のファイルをビルドします
Xcode でビルドした場合は、ビルド パラメーターを簡単にコピー アンド ペーストして、Xcode 独自の clang の代わりに自分の clang++-3.3 を使用できます。
追加-mllvm -debug-only=loop-vectorize
すると、自動ベクトル化レポートが得られます。注: これは、リモートで複雑なビルド (PCH を使用している場合など) では機能しない可能性がありますが、単一の cpp ファイルを微調整して、正しくベクトル化されていることを確認する簡単な方法です。
3. 新しい llvm からコンパイラ プラグインを作成します。
次の方法で、自作llvmでプロジェクト全体をビルドできました。
- この Xcode コンパイラ プラグインを取得します: http://trac.seqan.de/browser/trunk/util/xcode/Clang%20LLVM%20MacPorts.xcplugin.zip?order=name
- 自家製のllvmおよびclang bin名を指すようにclang関連のパスを変更します(「-3.3」を追加することにより)
- 中に入れる
/Library/Application Support/Developer/5.0/Xcode/Plug-ins/
Xcode を再起動すると、使用可能なコンパイラのリストにこのプラグインが表示されます。この時点で、-mllvm -debug-only=loop-vectorize
フラグは自動ベクトル化レポートを表示します。
これが Apple ビルドで公開されていない理由がわかりません。
更新: これは、Xcode の現在の (8.x) バージョンで公開されています。必要なのは、1 つ以上のloop-vectorize
フラグを有効にすることだけです。