1

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.

For example, here is the naive bitcode of the file 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

; 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?

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.

Does anyone know how to get such kind of information?

Trung Ta
  • 1,582
  • 1
  • 16
  • 25
  • 1
    The -time-passes option gives you that (and the time taken per pass). – arnt Jul 14 '20 at 20:58
  • @arnt: Thanks for your answer. That option really works. I guess it is internal since `opt --help` doesn't show it. Would you like to repost your comment as an answer so that I can accept it? – Trung Ta Jul 15 '20 at 03:44
  • Do you also know any option that can report the efficiency of each analysis pass, such as how many IR instructions are eliminated, or how it changes the program? – Trung Ta Jul 15 '20 at 03:58
  • There's a -print-after-all option that may help you a tiny little bit. Based on its output, counting the change in number of instructions should be simple. But I think the efficiency of the code is quite far from a total IR instruction count. – arnt Jul 15 '20 at 09:15
  • @TrungTa Regarding `--help` see : `--help-list` and `--help-list-hidden`. – orestisf Jul 15 '20 at 09:52
  • @arnt: Thanks a lot. The option -print-after-all is very useful for me. – Trung Ta Jul 15 '20 at 10:09
  • 1
    @orestisf: Wow, I didn't know about these options. Thank you so much! – Trung Ta Jul 15 '20 at 10:11

3 Answers3

5

See the -debug-pass family of options:

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

Examples:

=Arguments

$ 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

=Structure

$ 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

=Executions

$ 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'...
…

=Details

$ 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
…
orestisf
  • 1,396
  • 1
  • 15
  • 30
4

The -time-passes option gives you that (and the time taken per pass).

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.

arnt
  • 8,949
  • 5
  • 24
  • 32
1

Since the release of LLVM-13, the new pass manager is turned on by default.

It seems one of suggested options, -debug-pass=<value> is not longer working.

There is another option -debug-pass-manager which could be used to list all running passes.

Billy
  • 701
  • 1
  • 8
  • 26