Optimization 如何使LLVM Opt工具报告每个优化(O1、-O2等)成功使用的分析通过?

Optimization 如何使LLVM Opt工具报告每个优化(O1、-O2等)成功使用的分析通过?,optimization,llvm,llvm-clang,llvm-ir,bitcode,Optimization,Llvm,Llvm Clang,Llvm Ir,Bitcode,我想知道是否有可能使LLVMopt工具详细报告在每个优化级别(如-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, alig

我想知道是否有可能使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

; Function Attrs: noinline norecurse nounwind readnone uwtable
define dso_local i32 @main() local_unnamed_addr #0 {
  ret i32 1
}
我如何获得有关LLVM
opt
在上述优化中应用的过程的信息

我尝试使用LLVM 10.0的
opt
的几个标志,如
--传递备注过滤器
--调试每个
--验证每个
--传递备注过滤器
,但它们都不起作用


有人知道如何获取此类信息吗?

时间通行证选项提供了这些信息(以及每次通行所需的时间)


此选项在许多LLVM工具中可用,但未在手册中列出,因为它旨在作为编译器/过程作者的调试工具。

时间过程选项提供此选项(以及每次过程所用的时间)


此选项在许多LLVM工具中可用,但未在手册中列出,因为它是编译器/过程作者的调试工具。

请参阅
-debug-pass
选项系列:

opt --help-list-hidden | grep debug-pass -A 5
  --debug-pass=<value>                                            - Print PassManager debugging information
    =Disabled                                                     -   disable debug output
    =Arguments                                                    -   print pass arguments to pass to 'opt'
    =Structure                                                    -   print pass structure before run()
    =Executions                                                   -   print pass name before it is executed
    =Details                                                      -   print pass details when it is executed
=结构
$opt-O1 foo.bc-debug pass=Structure-o/dev/null
传递参数:-tti-tbaa-作用域noalias-假设缓存跟踪器-targetlibinfo-验证-ee工具-SimpleCfg-domtree-sroa-早期cse-较低期望
目标变换信息
基于类型的别名分析
作用域NoAlias别名分析
假设缓存跟踪器
目标库信息
功能通行证管理器
模块验证器
仪器函数入口/出口,调用例如mcount()(预内联)
简化CFG
支配树构造
SROA
早期CSE
较低的“期望”本质
传递参数:-targetlibinfo-tti-targetpassconfig-tbaa-作用域noalias-假设缓存跟踪器-配置文件摘要信息-forceattrs-推断属性-ipscp-调用值传播-attributer-globalopt-domtree-mem2reg-deadargelim-domtree-basicaa-aa-循环-惰性分支问题-惰性块频率-opt备注发射器-instcombine-simplectcfg-basiccg-globals aa-prune eh-always inline-functionattrs-domtree-sroa-basica-aa-memoryssa-early cse memssa-SimpleCfg-domtree-Basica-aa-loops-lazy branch prob-lazy block freq-opt remark emitter-instcombine-libcalls shrinkwrap-loops-branch prob-block freq-opt remark emitter-pgo memop opt-SIMPLETICFG-reassociate-domtree-loops SIMPLETE-lcssa验证-lcssa-basicaa-aa-标量进化-循环旋转-memoryssa-licm-循环取消开关-SIMPLETICCFG-domtree-basicaa-aa-循环-惰性分支问题-惰性块频率-opt备注发射器-组合-循环简化-lcssa验证-lcssa-标量进化-indvars-loop idiom-loop deletation-loop unroll-phi values-memdep-memcpyopt-sccp-required bits-bdce-basicaa-aa-lazy branch prob-lazy block freq-opt remark emitter-instcombine-postdomtree-adce-simplectcfg-domtree-basica-aa-loops-lazy branch-freq-opt remark emitter-instcombine-barrie-basiccg-rpo函数Ttrs-globalopt-globaldce-basiccg-globals aa-domtree-float2int-lower constant intrinsics-domtree-loops-simplify-lcssa验证-lcssa-basicaa-scalar evolution-loop rotate-loop Access-lazy branch prob-lazy block freq-opt备注发射器-loop Distribution-branch prob-block freq-scalar evolution-basicaa-aa-循环访问-所需位-延迟分支问题-延迟块频率-opt备注发射器-循环向量化-循环简化-标量进化-aa-循环访问-延迟分支问题-延迟块频率-循环加载elim-基本CAA-aa-延迟分支问题-延迟块频率-opt备注发射器-组合-简化CFG-domtree-基本CAA-aa-循环-延迟分支问题-惰性块频率-opt备注发射器-instcombine-loop simplify-lcssa验证-lcssa-标量演化-循环展开-惰性分支问题-惰性块频率-opt备注发射器-instcombine-memoryssa-loop simplify-lcssa验证-lcssa-标量演化-licm-惰性分支问题-惰性块频率-opt备注发射器-转换警告-根据假设对齐-带死原型-domtree-循环-分支prob-块频率-循环简化-lcssa验证-lcssa-basicaa-aa-标量进化-块频率-循环接收器-惰性分支prob-惰性块频率-opt备注发射器-INSTDIMPLIMPLIME-div rem对-SIMPLIMPLIMETCFG-验证-写入位码
目标库信息
目标变换信息
目标过程配置
基于类型的别名分析
作用域NoAlias别名分析
假设缓存跟踪器
概要信息
模块进程管理器
力集函数属性
推断集合函数属性
过程间稀疏条件常数传播
功能通行证管理器
支配树构造
所谓价值传播
推断和传播属性
全局变量优化器
功能通行证管理器
支配树构造
自然循环信息
分支概率分析
块频率分析
功能通行证管理器
支配树构造
促进记忆注册
死角消除
功能通行证管理器
支配树构造
基本别名分析(无状态AA impl)
函数别名分析结果
自然循环信息
延迟分支概率分析
延迟块频率分析
优化注记发射器
合并冗余指令
简化CFG
调用图构造
全局别名分析
调用图SCC过程管理器
删除未使用的异常处理