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。