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。