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を返します。