[英]How to make the LLVM Opt tool to report which analysis passes successfully used by each optimization -O1, -O2, etc?
I wonder if it is possible to make the LLVM opt
tool to report in detail which optimization passes are successfully used during each optimization level like -O1
, -O2
, etc.我想知道是否可以让 LLVM opt
工具详细报告在每个优化级别(如-O1
、 -O2
等)期间成功使用了哪些优化通道。
For example, here is the naive bitcode of the file foo.bc
:例如,这里是文件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
}
And here is the bitcode obtained after running opt -O1 foo.bc -o foo.opt.bc
这是运行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
}
How can I obtain information about passes applied by LLVM opt
in the above optimization?如何获取有关 LLVM opt
在上述优化中应用的通行证的信息?
I tried to use several flags of opt
of LLVM 10.0, such as --pass-remarks-filter
, --debugify-each
, --verify-each
, --lto-pass-remarks-filter
, etc but none of them work.我尝试使用 LLVM 10.0 的几个opt
标志,例如--pass-remarks-filter
、 --debugify-each
、 --verify-each
、 --lto-pass-remarks-filter
等,但它们都不起作用.
Does anyone know how to get such kind of information?有谁知道如何获取此类信息?
The -time-passes
option gives you that (and the time taken per pass). -time-passes
选项为您提供了这一点(以及每次通过所花费的时间)。
This option is available in many LLVM tools, but is not listed in the manual, as it intended as a debugging tool for compiler/pass authors.此选项在许多 LLVM 工具中都可用,但未在手册中列出,因为它旨在用作编译器/pass 作者的调试工具。
See the -debug-pass
family of options:请参阅-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=Arguments -o /dev/null
Pass Arguments: -tti -tbaa -scoped-noalias -assumption-cache-tracker -targetlibinfo -verify -ee-instrument -simplifycfg -domtree -sroa -early-cse -lower-expect
Pass Arguments: -targetlibinfo -tti -targetpassconfig -tbaa -scoped-noalias -assumption-cache-tracker -profile-summary-info -forceattrs -inferattrs -ipsccp -called-value-propagation -attributor -globalopt -domtree -mem2reg -deadargelim -domtree -basicaa -aa -loops -lazy-branch-prob -lazy-block-freq -opt-remark-emitter -instcombine -simplifycfg -basiccg -globals-aa -prune-eh -always-inline -functionattrs -domtree -sroa -basicaa -aa -memoryssa -early-cse-memssa -simplifycfg -domtree -basicaa -aa -loops -lazy-branch-prob -lazy-block-freq -opt-remark-emitter -instcombine -libcalls-shrinkwrap -loops -branch-prob -block-freq -lazy-branch-prob -lazy-block-freq -opt-remark-emitter -pgo-memop-opt -simplifycfg -reassociate -domtree -loops -loop-simplify -lcssa-verification -lcssa -basicaa -aa -scalar-evolution -loop-rotate -memoryssa -licm -loop-unswitch -simplifycfg -domtree -basicaa -aa -loops -lazy-branch-prob -lazy-block-freq -opt-remark-emitter -instcombine -loop-simplify -lcssa-verification -lcssa -scalar-evolution -indvars -loop-idiom -loop-deletion -loop-unroll -phi-values -memdep -memcpyopt -sccp -demanded-bits -bdce -basicaa -aa -lazy-branch-prob -lazy-block-freq -opt-remark-emitter -instcombine -postdomtree -adce -simplifycfg -domtree -basicaa -aa -loops -lazy-branch-prob -lazy-block-freq -opt-remark-emitter -instcombine -barrier -basiccg -rpo-functionattrs -globalopt -globaldce -basiccg -globals-aa -domtree -float2int -lower-constant-intrinsics -domtree -loops -loop-simplify -lcssa-verification -lcssa -basicaa -aa -scalar-evolution -loop-rotate -loop-accesses -lazy-branch-prob -lazy-block-freq -opt-remark-emitter -loop-distribute -branch-prob -block-freq -scalar-evolution -basicaa -aa -loop-accesses -demanded-bits -lazy-branch-prob -lazy-block-freq -opt-remark-emitter -loop-vectorize -loop-simplify -scalar-evolution -aa -loop-accesses -lazy-branch-prob -lazy-block-freq -loop-load-elim -basicaa -aa -lazy-branch-prob -lazy-block-freq -opt-remark-emitter -instcombine -simplifycfg -domtree -basicaa -aa -loops -lazy-branch-prob -lazy-block-freq -opt-remark-emitter -instcombine -loop-simplify -lcssa-verification -lcssa -scalar-evolution -loop-unroll -lazy-branch-prob -lazy-block-freq -opt-remark-emitter -instcombine -memoryssa -loop-simplify -lcssa-verification -lcssa -scalar-evolution -licm -lazy-branch-prob -lazy-block-freq -opt-remark-emitter -transform-warning -alignment-from-assumptions -strip-dead-prototypes -domtree -loops -branch-prob -block-freq -loop-simplify -lcssa-verification -lcssa -basicaa -aa -scalar-evolution -block-freq -loop-sink -lazy-branch-prob -lazy-block-freq -opt-remark-emitter -instsimplify -div-rem-pairs -simplifycfg -verify -write-bitcode
Pass Arguments: -domtree
Pass Arguments: -targetlibinfo -domtree -loops -branch-prob -block-freq
Pass Arguments: -targetlibinfo -domtree -loops -branch-prob -block-freq
$ opt -O1 foo.bc -debug-pass=Structure -o /dev/null
Pass Arguments: -tti -tbaa -scoped-noalias -assumption-cache-tracker -targetlibinfo -verify -ee-instrument -simplifycfg -domtree -sroa -early-cse -lower-expect
Target Transform Information
Type-Based Alias Analysis
Scoped NoAlias Alias Analysis
Assumption Cache Tracker
Target Library Information
FunctionPass Manager
Module Verifier
Instrument function entry/exit with calls to e.g. mcount() (pre inlining)
Simplify the CFG
Dominator Tree Construction
SROA
Early CSE
Lower 'expect' Intrinsics
Pass Arguments: -targetlibinfo -tti -targetpassconfig -tbaa -scoped-noalias -assumption-cache-tracker -profile-summary-info -forceattrs -inferattrs -ipsccp -called-value-propagation -attributor -globalopt -domtree -mem2reg -deadargelim -domtree -basicaa -aa -loops -lazy-branch-prob -lazy-block-freq -opt-remark-emitter -instcombine -simplifycfg -basiccg -globals-aa -prune-eh -always-inline -functionattrs -domtree -sroa -basicaa -aa -memoryssa -early-cse-memssa -simplifycfg -domtree -basicaa -aa -loops -lazy-branch-prob -lazy-block-freq -opt-remark-emitter -instcombine -libcalls-shrinkwrap -loops -branch-prob -block-freq -lazy-branch-prob -lazy-block-freq -opt-remark-emitter -pgo-memop-opt -simplifycfg -reassociate -domtree -loops -loop-simplify -lcssa-verification -lcssa -basicaa -aa -scalar-evolution -loop-rotate -memoryssa -licm -loop-unswitch -simplifycfg -domtree -basicaa -aa -loops -lazy-branch-prob -lazy-block-freq -opt-remark-emitter -instcombine -loop-simplify -lcssa-verification -lcssa -scalar-evolution -indvars -loop-idiom -loop-deletion -loop-unroll -phi-values -memdep -memcpyopt -sccp -demanded-bits -bdce -basicaa -aa -lazy-branch-prob -lazy-block-freq -opt-remark-emitter -instcombine -postdomtree -adce -simplifycfg -domtree -basicaa -aa -loops -lazy-branch-prob -lazy-block-freq -opt-remark-emitter -instcombine -barrier -basiccg -rpo-functionattrs -globalopt -globaldce -basiccg -globals-aa -domtree -float2int -lower-constant-intrinsics -domtree -loops -loop-simplify -lcssa-verification -lcssa -basicaa -aa -scalar-evolution -loop-rotate -loop-accesses -lazy-branch-prob -lazy-block-freq -opt-remark-emitter -loop-distribute -branch-prob -block-freq -scalar-evolution -basicaa -aa -loop-accesses -demanded-bits -lazy-branch-prob -lazy-block-freq -opt-remark-emitter -loop-vectorize -loop-simplify -scalar-evolution -aa -loop-accesses -lazy-branch-prob -lazy-block-freq -loop-load-elim -basicaa -aa -lazy-branch-prob -lazy-block-freq -opt-remark-emitter -instcombine -simplifycfg -domtree -basicaa -aa -loops -lazy-branch-prob -lazy-block-freq -opt-remark-emitter -instcombine -loop-simplify -lcssa-verification -lcssa -scalar-evolution -loop-unroll -lazy-branch-prob -lazy-block-freq -opt-remark-emitter -instcombine -memoryssa -loop-simplify -lcssa-verification -lcssa -scalar-evolution -licm -lazy-branch-prob -lazy-block-freq -opt-remark-emitter -transform-warning -alignment-from-assumptions -strip-dead-prototypes -domtree -loops -branch-prob -block-freq -loop-simplify -lcssa-verification -lcssa -basicaa -aa -scalar-evolution -block-freq -loop-sink -lazy-branch-prob -lazy-block-freq -opt-remark-emitter -instsimplify -div-rem-pairs -simplifycfg -verify -write-bitcode
Target Library Information
Target Transform Information
Target Pass Configuration
Type-Based Alias Analysis
Scoped NoAlias Alias Analysis
Assumption Cache Tracker
Profile summary info
ModulePass Manager
Force set function attributes
Infer set function attributes
Interprocedural Sparse Conditional Constant Propagation
FunctionPass Manager
Dominator Tree Construction
Called Value Propagation
Deduce and propagate attributes
Global Variable Optimizer
FunctionPass Manager
Dominator Tree Construction
Natural Loop Information
Branch Probability Analysis
Block Frequency Analysis
FunctionPass Manager
Dominator Tree Construction
Promote Memory to Register
Dead Argument Elimination
FunctionPass Manager
Dominator Tree Construction
Basic Alias Analysis (stateless AA impl)
Function Alias Analysis Results
Natural Loop Information
Lazy Branch Probability Analysis
Lazy Block Frequency Analysis
Optimization Remark Emitter
Combine redundant instructions
Simplify the CFG
CallGraph Construction
Globals Alias Analysis
Call Graph SCC Pass Manager
Remove unused exception handling info
Inliner for always_inline functions
Deduce function attributes
FunctionPass Manager
Dominator Tree Construction
SROA
Basic Alias Analysis (stateless AA impl)
Function Alias Analysis Results
Memory SSA
Early CSE w/ MemorySSA
Simplify the CFG
Dominator Tree Construction
Basic Alias Analysis (stateless AA impl)
Function Alias Analysis Results
Natural Loop Information
Lazy Branch Probability Analysis
Lazy Block Frequency Analysis
Optimization Remark Emitter
Combine redundant instructions
Conditionally eliminate dead library calls
Natural Loop Information
Branch Probability Analysis
Block Frequency Analysis
Lazy Branch Probability Analysis
Lazy Block Frequency Analysis
Optimization Remark Emitter
PGOMemOPSize
Simplify the CFG
Reassociate expressions
Dominator Tree Construction
Natural Loop Information
Canonicalize natural loops
LCSSA Verifier
Loop-Closed SSA Form Pass
Basic Alias Analysis (stateless AA impl)
Function Alias Analysis Results
Scalar Evolution Analysis
Loop Pass Manager
Rotate Loops
Memory SSA
Loop Pass Manager
Loop Invariant Code Motion
Unswitch loops
Simplify the CFG
Dominator Tree Construction
Basic Alias Analysis (stateless AA impl)
Function Alias Analysis Results
Natural Loop Information
Lazy Branch Probability Analysis
Lazy Block Frequency Analysis
Optimization Remark Emitter
Combine redundant instructions
Canonicalize natural loops
LCSSA Verifier
Loop-Closed SSA Form Pass
Scalar Evolution Analysis
Loop Pass Manager
Induction Variable Simplification
Recognize loop idioms
Delete dead loops
Unroll loops
Phi Values Analysis
Memory Dependence Analysis
MemCpy Optimization
Sparse Conditional Constant Propagation
Demanded bits analysis
Bit-Tracking Dead Code Elimination
Basic Alias Analysis (stateless AA impl)
Function Alias Analysis Results
Lazy Branch Probability Analysis
Lazy Block Frequency Analysis
Optimization Remark Emitter
Combine redundant instructions
Post-Dominator Tree Construction
Aggressive Dead Code Elimination
Simplify the CFG
Dominator Tree Construction
Basic Alias Analysis (stateless AA impl)
Function Alias Analysis Results
Natural Loop Information
Lazy Branch Probability Analysis
Lazy Block Frequency Analysis
Optimization Remark Emitter
Combine redundant instructions
A No-Op Barrier Pass
CallGraph Construction
Deduce function attributes in RPO
Global Variable Optimizer
FunctionPass Manager
Dominator Tree Construction
Natural Loop Information
Branch Probability Analysis
Block Frequency Analysis
Dead Global Elimination
CallGraph Construction
Globals Alias Analysis
FunctionPass Manager
Dominator Tree Construction
Float to int
Lower constant intrinsics
Dominator Tree Construction
Natural Loop Information
Canonicalize natural loops
LCSSA Verifier
Loop-Closed SSA Form Pass
Basic Alias Analysis (stateless AA impl)
Function Alias Analysis Results
Scalar Evolution Analysis
Loop Pass Manager
Rotate Loops
Loop Access Analysis
Lazy Branch Probability Analysis
Lazy Block Frequency Analysis
Optimization Remark Emitter
Loop Distribution
Branch Probability Analysis
Block Frequency Analysis
Scalar Evolution Analysis
Basic Alias Analysis (stateless AA impl)
Function Alias Analysis Results
Loop Access Analysis
Demanded bits analysis
Lazy Branch Probability Analysis
Lazy Block Frequency Analysis
Optimization Remark Emitter
Loop Vectorization
Canonicalize natural loops
Scalar Evolution Analysis
Function Alias Analysis Results
Loop Access Analysis
Lazy Branch Probability Analysis
Lazy Block Frequency Analysis
Loop Load Elimination
Basic Alias Analysis (stateless AA impl)
Function Alias Analysis Results
Lazy Branch Probability Analysis
Lazy Block Frequency Analysis
Optimization Remark Emitter
Combine redundant instructions
Simplify the CFG
Dominator Tree Construction
Basic Alias Analysis (stateless AA impl)
Function Alias Analysis Results
Natural Loop Information
Lazy Branch Probability Analysis
Lazy Block Frequency Analysis
Optimization Remark Emitter
Combine redundant instructions
Canonicalize natural loops
LCSSA Verifier
Loop-Closed SSA Form Pass
Scalar Evolution Analysis
Loop Pass Manager
Unroll loops
Lazy Branch Probability Analysis
Lazy Block Frequency Analysis
Optimization Remark Emitter
Combine redundant instructions
Memory SSA
Canonicalize natural loops
LCSSA Verifier
Loop-Closed SSA Form Pass
Scalar Evolution Analysis
Loop Pass Manager
Loop Invariant Code Motion
Lazy Branch Probability Analysis
Lazy Block Frequency Analysis
Optimization Remark Emitter
Warn about non-applied transformations
Alignment from assumptions
Strip Unused Function Prototypes
FunctionPass Manager
Dominator Tree Construction
Natural Loop Information
Branch Probability Analysis
Block Frequency Analysis
Canonicalize natural loops
LCSSA Verifier
Loop-Closed SSA Form Pass
Basic Alias Analysis (stateless AA impl)
Function Alias Analysis Results
Scalar Evolution Analysis
Block Frequency Analysis
Loop Pass Manager
Loop Sink
Lazy Branch Probability Analysis
Lazy Block Frequency Analysis
Optimization Remark Emitter
Remove redundant instructions
Hoist/decompose integer division and remainder
Simplify the CFG
Module Verifier
Bitcode Writer
Pass Arguments: -domtree
FunctionPass Manager
Dominator Tree Construction
Pass Arguments: -targetlibinfo -domtree -loops -branch-prob -block-freq
Target Library Information
FunctionPass Manager
Dominator Tree Construction
Natural Loop Information
Branch Probability Analysis
Block Frequency Analysis
Pass Arguments: -targetlibinfo -domtree -loops -branch-prob -block-freq
Target Library Information
FunctionPass Manager
Dominator Tree Construction
Natural Loop Information
Branch Probability Analysis
Block Frequency Analysis
$ opt -O1 foo.bc -debug-pass=Executions -o /dev/null
… (includes previous levels)
[2020-07-15 12:09:58.850749079] 0x559a227eda10 Executing Pass 'Force set function attributes' on Module 'foo.bc'...
[2020-07-15 12:09:58.850794318] 0x559a227eda10 Freeing Pass 'Force set function attributes' on Module 'foo.bc'...
[2020-07-15 12:09:58.850834995] 0x559a227eda10 Executing Pass 'Infer set function attributes' on Module 'foo.bc'...
[2020-07-15 12:09:58.850877016] 0x559a227eda10 Freeing Pass 'Infer set function attributes' on Module 'foo.bc'...
[2020-07-15 12:09:58.850917851] 0x559a227eda10 Executing Pass 'Interprocedural Sparse Conditional Constant Propagation' on Module 'foo.bc'...
[2020-07-15 12:09:58.850967874] 0x559a227cb5c0 Executing Pass 'Dominator Tree Construction' on Function 'main'...
[2020-07-15 12:09:58.851024434] 0x559a227cb5c0 Executing Pass 'Dominator Tree Construction' on Function 'f'...
[2020-07-15 12:09:58.851078626] 0x559a227eda10 Freeing Pass 'Interprocedural Sparse Conditional Constant Propagation' on Module 'foo.bc'...
[2020-07-15 12:09:58.851118672] 0x559a227eda10 Executing Pass 'Called Value Propagation' on Module 'foo.bc'...
[2020-07-15 12:09:58.851176380] 0x559a227eda10 Freeing Pass 'Called Value Propagation' on Module 'foo.bc'...
[2020-07-15 12:09:58.851195948] 0x559a227eda10 Executing Pass 'Deduce and propagate attributes' on Module 'foo.bc'...
[2020-07-15 12:09:58.851222525] 0x559a227eda10 Freeing Pass 'Deduce and propagate attributes' on Module 'foo.bc'...
[2020-07-15 12:09:58.851252769] 0x559a227eda10 Executing Pass 'Global Variable Optimizer' on Module 'foo.bc'...
[2020-07-15 12:09:58.851285163] 0x559a227eda10 Made Modification 'Global Variable Optimizer' on Module 'foo.bc'...
[2020-07-15 12:09:58.851306058] 0x559a227eda10 Freeing Pass 'Global Variable Optimizer' on Module 'foo.bc'...
[2020-07-15 12:09:58.851332678] 0x559a227eda10 Executing Pass 'Function Pass Manager' on Module 'foo.bc'...
[2020-07-15 12:09:58.851361051] 0x559a2281c6c0 Executing Pass 'Dominator Tree Construction' on Function 'main'...
[2020-07-15 12:09:58.851390305] 0x559a2281c6c0 Executing Pass 'Promote Memory to Register' on Function 'main'...
[2020-07-15 12:09:58.851419137] 0x559a2281c6c0 Freeing Pass 'Dominator Tree Construction' on Function 'main'...
…
$ opt -O1 foo.bc -debug-pass=Details -o /dev/null
… (includes Structure level)
[2020-07-15 12:12:50.727901681] 0x55963d24ca10 Executing Pass 'Force set function attributes' on Module 'foo.bc'...
-*- 'Force set function attributes' is the last user of following pass instances. Free these instances
[2020-07-15 12:12:50.727919514] 0x55963d24ca10 Freeing Pass 'Force set function attributes' on Module 'foo.bc'...
[2020-07-15 12:12:50.727930575] 0x55963d24ca10 Executing Pass 'Infer set function attributes' on Module 'foo.bc'...
0x55963d229c20 Required Analyses: Target Library Information
-*- 'Infer set function attributes' is the last user of following pass instances. Free these instances
[2020-07-15 12:12:50.727951877] 0x55963d24ca10 Freeing Pass 'Infer set function attributes' on Module 'foo.bc'...
[2020-07-15 12:12:50.727962569] 0x55963d24ca10 Executing Pass 'Interprocedural Sparse Conditional Constant Propagation' on Module 'foo.bc'...
0x55963d229c80 Required Analyses: Assumption Cache Tracker, Dominator Tree Construction, Target Library Information
[2020-07-15 12:12:50.727991878] 0x55963d22aa00 Executing Pass 'Dominator Tree Construction' on Function 'main'...
[2020-07-15 12:12:50.728019459] 0x55963d22aa00 Executing Pass 'Dominator Tree Construction' on Function 'f'...
-*- 'Interprocedural Sparse Conditional Constant Propagation' is the last user of following pass instances. Free these instances
[2020-07-15 12:12:50.728048312] 0x55963d24ca10 Freeing Pass 'Interprocedural Sparse Conditional Constant Propagation' on Module 'foo.bc'...
[2020-07-15 12:12:50.728059628] 0x55963d24ca10 Executing Pass 'Called Value Propagation' on Module 'foo.bc'...
-*- 'Called Value Propagation' is the last user of following pass instances. Free these instances
[2020-07-15 12:12:50.728087385] 0x55963d24ca10 Freeing Pass 'Called Value Propagation' on Module 'foo.bc'...
[2020-07-15 12:12:50.728098125] 0x55963d24ca10 Executing Pass 'Deduce and propagate attributes' on Module 'foo.bc'...
0x55963d22c270 Required Analyses: Target Library Information
-*- 'Deduce and propagate attributes' is the last user of following pass instances. Free these instances
[2020-07-15 12:12:50.728123960] 0x55963d24ca10 Freeing Pass 'Deduce and propagate attributes' on Module 'foo.bc'...
[2020-07-15 12:12:50.728134651] 0x55963d24ca10 Executing Pass 'Global Variable Optimizer' on Module 'foo.bc'...
0x55963d22c2d0 Required Analyses: Target Library Information, Target Transform Information, Dominator Tree Construction, Block Frequency Analysis
[2020-07-15 12:12:50.728178301] 0x55963d24ca10 Made Modification 'Global Variable Optimizer' on Module 'foo.bc'...
-*- 'Global Variable Optimizer' is the last user of following pass instances. Free these instances
[2020-07-15 12:12:50.728193095] 0x55963d24ca10 Freeing Pass 'Global Variable Optimizer' on Module 'foo.bc'...
[2020-07-15 12:12:50.728203671] 0x55963d24ca10 Executing Pass 'Function Pass Manager' on Module 'foo.bc'...
[2020-07-15 12:12:50.728214720] 0x55963d27bb00 Executing Pass 'Dominator Tree Construction' on Function 'main'...
[2020-07-15 12:12:50.728227201] 0x55963d27bb00 Executing Pass 'Promote Memory to Register' on Function 'main'...
0x55963d27b620 Required Analyses: Assumption Cache Tracker, Dominator Tree Construction
…
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.