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
然後,您可以使用 llvm-opt-report 命令建立報告,並將 YAML 最佳化記錄檔 foo.opt.yaml
作為輸入。
$ 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:迴圈被向量化。後面的數字表示向量長度和交錯因子。
注意
如果同一行程式碼輸出兩次,表示對該行程式碼應用了兩次相同的最佳化遍歷,並且該遍歷能夠在第二次迭代時進一步最佳化程式碼。
選項¶
如果 輸入
為「-
」或省略,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。