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:迴圈被向量化。後面的數字表示向量長度和交錯因子。
注意
如果特定的程式碼行輸出兩次,表示相同的最佳化過程已應用於該程式碼行兩次,且該過程能夠在第二次迭代中進一步最佳化程式碼。
選項¶
如果 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。