【发布时间】:2020-11-04 04:00:51
【问题描述】:
我想知道是否可以让 LLVM opt 工具详细报告在每个优化级别(如 -O1、-O2 等)期间成功使用了哪些优化通道。
例如,这里是文件foo.bc的原始位码:
define dso_local i32 @main() #0 {
%1 = alloca i32, align 4
%2 = alloca i32, align 4
%3 = alloca i32, align 4
store i32 0, i32* %1, align 4
store i32 1, i32* %2, align 4
store i32 1, i32* %3, align 4
%4 = load i32, i32* %2, align 4
ret i32 %4
}
这里是运行opt -O1 foo.bc -o foo.opt.bc后得到的bitcode
; Function Attrs: noinline norecurse nounwind readnone uwtable
define dso_local i32 @main() local_unnamed_addr #0 {
ret i32 1
}
如何获取上述优化中 LLVM opt 应用的 pass 信息?
我尝试使用 LLVM 10.0 的 opt 的几个标志,例如 --pass-remarks-filter、--debugify-each、--verify-each、--lto-pass-remarks-filter 等,但它们都不起作用。
有谁知道如何获取此类信息?
【问题讨论】:
-
-time-passes 选项为您提供了这一点(以及每次通过所花费的时间)。
-
@arnt:感谢您的回答。该选项确实有效。我猜它是内部的,因为
opt --help没有显示它。您想重新发布您的评论作为答案,以便我接受吗? -
您是否还知道任何可以报告每个分析过程的效率的选项,例如消除了多少条 IR 指令,或者它如何改变程序?
-
有一个 -print-after-all 选项可以帮助你一点点。根据它的输出,计算指令数量的变化应该很简单。但我认为代码的效率与 IR 指令总数相差甚远。
-
@orestisf:哇,我不知道这些选项。非常感谢!
标签: optimization llvm llvm-clang llvm-ir bitcode