llvm-opt-report - YAMLから最適化レポートを生成する¶
概要¶
llvm-opt-report [オプション] [入力]
説明¶
llvm-opt-report は、YAML最適化記録ファイルから最適化レポートを生成するツールです。
llvm-opt-report を実行する前に、入力YAML最適化記録ファイルを作成する必要があります。
これは、各最適化パスの実行時間、メモリ使用量、およびその他の詳細に関する情報を提供します。
$ clang -c foo.c -o foo.o -O3 -fsave-optimization-record
次に、YAML最適化記録ファイル foo.opt.yaml
を入力として使用して、llvm-opt-report コマンドを使用してレポートを作成します。
$ llvm-opt-report foo.opt.yaml -o foo.lst
foo.lstは生成された最適化レポートです。
< foo.c
1 | void bar();
2 | void foo() { bar(); }
3 |
4 | void Test(int *res, int *c, int *d, int *p, int n) {
5 | int i;
6 |
7 | #pragma clang loop vectorize(assume_safety)
8 V4,1 | for (i = 0; i < 1600; i++) {
9 | res[i] = (p[i] == 0) ? res[i] : res[i] + d[i];
10 | }
11 |
12 U16 | for (i = 0; i < 16; i++) {
13 | res[i] = (p[i] == 0) ? res[i] : res[i] + d[i];
14 | }
15 |
16 I | foo();
17 |
18 | foo(); bar(); foo();
I | ^
I | ^
19 | }
20 |
プログラムの左側に表示される記号は、実行された最適化の種類を示しています。記号の意味は以下のとおりです。
I: 関数はインライン化されています。
U: ループが展開されています。 後ろの数字は展開係数を示します。
V: ループがベクトル化されています。 後ろの数字はベクトル長とインターリーブ係数を示します。
注記
特定のコード行が2回出力された場合、同じ最適化パスがそのコード行に2回適用され、パスが2回目の反復でコードをさらに最適化できたことを意味します。
オプション¶
input
が “-
” または省略されている場合、llvm-opt-report は標準入力から読み取ります。そうでない場合は、指定されたファイル名から読み取ります。
-o
オプションが省略された場合、llvm-opt-report は出力を標準出力に送信します。 -o
オプションで “-
” が指定された場合も、出力は標準出力に送信されます。
- --help¶
使用可能なオプションを表示します。
- --version¶
このプログラムのバージョンを表示します。
- --format=<string>¶
最適化記録ファイルの形式。引数は以下のいずれかです。
yaml
yaml-strtab
bitstream
- --no-demangle¶
関数名をデマングルしません。
- -o=<string>¶
出力ファイル。
- -r=<string>¶
相対入力パスのルート。
- -s¶
ベクトル化係数などを含めません。
終了ステータス¶
llvm-opt-report は、成功すると0を返します。 それ以外の場合、エラーメッセージが標準エラーに出力され、ツールは1を返します。