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。