LLVM的opt使用了哪些优化策略,我该怎么查看?

4
我希望了解并修改LLVM的opt在不同硬件架构上使用的通行证。
2个回答

4

opt 可以告诉您在给定的 LLVM IR 上运行哪些 passes:

$ opt -O2 -debug-pass=Arguments example_file.ll -disable-output
Pass Arguments:  -tti -no-aa -tbaa -scoped-noalias -assumption-cache-tracker -targetlibinfo -basicaa -verify -simplifycfg -domtree -sroa -early-cse -lower-expect
Pass Arguments:  -targetlibinfo -tti -no-aa -tbaa -scoped-noalias -assumption-cache-tracker -basicaa -ipsccp -globalopt -deadargelim -domtree -instcombine -simplifycfg -basiccg -prune-eh -inline-cost -inline -functionattrs -domtree -sroa -early-cse -lazy-value-info -jump-threading -correlated-propagation -simplifycfg -domtree -instcombine -tailcallelim -simplifycfg -reassociate -domtree -loops -loop-simplify -lcssa -loop-rotate -licm -loop-unswitch -instcombine -scalar-evolution -loop-simplify -lcssa -indvars -loop-idiom -loop-deletion -loop-unroll -mldst-motion -domtree -memdep -gvn -memdep -memcpyopt -sccp -domtree -bdce -instcombine -lazy-value-info -jump-threading -correlated-propagation -domtree -memdep -dse -loops -loop-simplify -lcssa -licm -adce -simplifycfg -domtree -instcombine -barrier -float2int -domtree -loops -loop-simplify -lcssa -loop-rotate -branch-prob -block-freq -scalar-evolution -loop-accesses -loop-vectorize -instcombine -scalar-evolution -slp-vectorizer -simplifycfg -domtree -instcombine -loops -loop-simplify -lcssa -scalar-evolution -loop-unroll -instcombine -loop-simplify -lcssa -licm -scalar-evolution -alignment-from-assumptions -strip-dead-prototypes -elim-avail-extern -globaldce -constmerge -verify

查看源代码,通常需要做以下事情:

实例化PassManagerBuilder并调用SetOptLevel。 然后,构建器会将这些传递作为populateModulePassManager的一部分添加

请注意,默认的传递顺序已经针对C/C++进行了优化,可能不适用于其他语言。


3
为什么有两个传递参数的列表? - Kyriakos

0
假设您正在使用clang,请使用-debug-pass=Arguments选项查看在每个优化级别下运行了哪些传递。

我没有使用clang,而是使用另一个编译器生成的LLVM IR格式的IR文件。我想尝试使用opt在(.ll)文件中修改一些opt的特性以查看其影响,主要想删除X86专用的passes。 - khalil Saedi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接