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。