Home | History | Annotate | Download | only in Other
      1 ; The IR below was crafted so as:
      2 ; 1) To have a loop, so we create a loop pass manager
      3 ; 2) To be "immutable" in the sense that no pass in the standard
      4 ;    pipeline will modify it.
      5 ; Since no transformations take place, we don't expect any analyses
      6 ; to be invalidated.
      7 ; Any invalidation that shows up here is a bug, unless we started modifying
      8 ; the IR, in which case we need to make it immutable harder.
      9 
     10 ; RUN: opt -disable-verify -debug-pass-manager \
     11 ; RUN:     -passes='default<O1>' -S %s 2>&1 \
     12 ; RUN:     | FileCheck %s --check-prefix=CHECK-O --check-prefix=CHECK-O1
     13 ; RUN: opt -disable-verify -debug-pass-manager \
     14 ; RUN:     -passes='default<O2>' -S  %s 2>&1 \
     15 ; RUN:     | FileCheck %s --check-prefix=CHECK-O --check-prefix=CHECK-O2
     16 ; RUN: opt -disable-verify -debug-pass-manager \
     17 ; RUN:     -passes='default<O3>' -S  %s 2>&1 \
     18 ; RUN:     | FileCheck %s --check-prefix=CHECK-O --check-prefix=CHECK-O3
     19 ; RUN: opt -disable-verify -debug-pass-manager \
     20 ; RUN:     -passes='default<Os>' -S %s 2>&1 \
     21 ; RUN:     | FileCheck %s --check-prefix=CHECK-O --check-prefix=CHECK-Os
     22 ; RUN: opt -disable-verify -debug-pass-manager \
     23 ; RUN:     -passes='default<Oz>' -S %s 2>&1 \
     24 ; RUN:     | FileCheck %s --check-prefix=CHECK-O --check-prefix=CHECK-Oz
     25 ; RUN: opt -disable-verify -debug-pass-manager \
     26 ; RUN:     -passes='lto-pre-link<O2>' -S %s 2>&1 \
     27 ; RUN:     | FileCheck %s --check-prefix=CHECK-O --check-prefix=CHECK-O2
     28 
     29 ; RUN: opt -disable-verify -debug-pass-manager \
     30 ; RUN:     -passes-ep-peephole='no-op-function' \
     31 ; RUN:     -passes='default<O3>' -S  %s 2>&1 \
     32 ; RUN:     | FileCheck %s --check-prefix=CHECK-O --check-prefix=CHECK-O3 \
     33 ; RUN:     --check-prefix=CHECK-EP-PEEPHOLE
     34 ; RUN: opt -disable-verify -debug-pass-manager \
     35 ; RUN:     -passes-ep-late-loop-optimizations='no-op-loop' \
     36 ; RUN:     -passes='default<O3>' -S  %s 2>&1 \
     37 ; RUN:     | FileCheck %s --check-prefix=CHECK-O --check-prefix=CHECK-O3 \
     38 ; RUN:     --check-prefix=CHECK-EP-LOOP-LATE
     39 ; RUN: opt -disable-verify -debug-pass-manager \
     40 ; RUN:     -passes-ep-loop-optimizer-end='no-op-loop' \
     41 ; RUN:     -passes='default<O3>' -S  %s 2>&1 \
     42 ; RUN:     | FileCheck %s --check-prefix=CHECK-O --check-prefix=CHECK-O3 \
     43 ; RUN:     --check-prefix=CHECK-EP-LOOP-END
     44 ; RUN: opt -disable-verify -debug-pass-manager \
     45 ; RUN:     -passes-ep-scalar-optimizer-late='no-op-function' \
     46 ; RUN:     -passes='default<O3>' -S  %s 2>&1 \
     47 ; RUN:     | FileCheck %s --check-prefix=CHECK-O --check-prefix=CHECK-O3 \
     48 ; RUN:     --check-prefix=CHECK-EP-SCALAR-LATE
     49 ; RUN: opt -disable-verify -debug-pass-manager \
     50 ; RUN:     -passes-ep-cgscc-optimizer-late='no-op-cgscc' \
     51 ; RUN:     -passes='default<O3>' -S  %s 2>&1 \
     52 ; RUN:     | FileCheck %s --check-prefix=CHECK-O --check-prefix=CHECK-O3 \
     53 ; RUN:     --check-prefix=CHECK-EP-CGSCC-LATE
     54 ; RUN: opt -disable-verify -debug-pass-manager \
     55 ; RUN:     -passes-ep-vectorizer-start='no-op-function' \
     56 ; RUN:     -passes='default<O3>' -S  %s 2>&1 \
     57 ; RUN:     | FileCheck %s --check-prefix=CHECK-O --check-prefix=CHECK-O3 \
     58 ; RUN:     --check-prefix=CHECK-EP-VECTORIZER-START
     59 ; RUN: opt -disable-verify -debug-pass-manager \
     60 ; RUN:     -passes-ep-pipeline-start='no-op-module' \
     61 ; RUN:     -passes='default<O3>' -S  %s 2>&1 \
     62 ; RUN:     | FileCheck %s --check-prefix=CHECK-O --check-prefix=CHECK-O3 \
     63 ; RUN:     --check-prefix=CHECK-EP-PIPELINE-START
     64 ; RUN: opt -disable-verify -debug-pass-manager \
     65 ; RUN:     -passes-ep-pipeline-start='no-op-module' \
     66 ; RUN:     -passes='lto-pre-link<O3>' -S  %s 2>&1 \
     67 ; RUN:     | FileCheck %s --check-prefix=CHECK-O --check-prefix=CHECK-O3 \
     68 ; RUN:     --check-prefix=CHECK-EP-PIPELINE-START
     69 
     70 ; CHECK-O: Starting llvm::Module pass manager run.
     71 ; CHECK-O-NEXT: Running pass: PassManager<{{.*}}Module{{.*}}>
     72 ; CHECK-O-NEXT: Starting llvm::Module pass manager run.
     73 ; CHECK-O-NEXT: Running pass: ForceFunctionAttrsPass
     74 ; CHECK-EP-PIPELINE-START-NEXT: Running pass: NoOpModulePass
     75 ; CHECK-O-NEXT: Running pass: PassManager<{{.*}}Module{{.*}}>
     76 ; CHECK-O-NEXT: Starting llvm::Module pass manager run.
     77 ; CHECK-O-NEXT: Running pass: InferFunctionAttrsPass
     78 ; CHECK-O-NEXT: Running analysis: TargetLibraryAnalysis
     79 ; CHECK-O-NEXT: Running pass: ModuleToFunctionPassAdaptor<{{.*}}PassManager{{.*}}>
     80 ; CHECK-O-NEXT: Running analysis: InnerAnalysisManagerProxy
     81 ; CHECK-O-NEXT: Starting llvm::Function pass manager run.
     82 ; CHECK-O-NEXT: Running pass: SimplifyCFGPass
     83 ; CHECK-O-NEXT: Running analysis: TargetIRAnalysis
     84 ; CHECK-O-NEXT: Running analysis: AssumptionAnalysis
     85 ; CHECK-O-NEXT: Running pass: SROA
     86 ; CHECK-O-NEXT: Running analysis: DominatorTreeAnalysis
     87 ; CHECK-O-NEXT: Running pass: EarlyCSEPass
     88 ; CHECK-O-NEXT: Running analysis: TargetLibraryAnalysis
     89 ; CHECK-O-NEXT: Running pass: LowerExpectIntrinsicPass
     90 ; CHECK-O3-NEXT: Running pass: CallSiteSplittingPass
     91 ; CHECK-O-NEXT: Finished llvm::Function pass manager run.
     92 ; CHECK-O-NEXT: Running pass: IPSCCPPass
     93 ; CHECK-O-NEXT: Running pass: CalledValuePropagationPass
     94 ; CHECK-O-NEXT: Running pass: GlobalOptPass
     95 ; CHECK-O-NEXT: Running pass: ModuleToFunctionPassAdaptor<{{.*}}PromotePass>
     96 ; CHECK-O-NEXT: Running pass: DeadArgumentEliminationPass
     97 ; CHECK-O-NEXT: Running pass: ModuleToFunctionPassAdaptor<{{.*}}PassManager{{.*}}>
     98 ; CHECK-O-NEXT: Starting llvm::Function pass manager run.
     99 ; CHECK-O-NEXT: Running pass: InstCombinePass
    100 ; CHECK-O-NEXT: Running analysis: OptimizationRemarkEmitterAnalysis
    101 ; CHECK-O-NEXT: Running analysis: AAManager
    102 ; CHECK-EP-PEEPHOLE-NEXT: Running pass: NoOpFunctionPass
    103 ; CHECK-O-NEXT: Running pass: SimplifyCFGPass
    104 ; CHECK-O-NEXT: Finished llvm::Function pass manager run.
    105 ; CHECK-O-NEXT: Running pass: RequireAnalysisPass<{{.*}}GlobalsAA
    106 ; CHECK-O-NEXT: Running analysis: GlobalsAA
    107 ; CHECK-O-NEXT: Running analysis: CallGraphAnalysis
    108 ; CHECK-O-NEXT: Running pass: RequireAnalysisPass<{{.*}}ProfileSummaryAnalysis
    109 ; CHECK-O-NEXT: Running analysis: ProfileSummaryAnalysis
    110 ; CHECK-O-NEXT: Running pass: ModuleToPostOrderCGSCCPassAdaptor<{{.*}}LazyCallGraph{{.*}}>
    111 ; CHECK-O-NEXT: Running analysis: InnerAnalysisManagerProxy
    112 ; CHECK-O-NEXT: Running analysis: LazyCallGraphAnalysis
    113 ; CHECK-O-NEXT: Starting CGSCC pass manager run.
    114 ; CHECK-O-NEXT: Running pass: InlinerPass
    115 ; CHECK-O-NEXT: Running analysis: OuterAnalysisManagerProxy<{{.*}}LazyCallGraph{{.*}}>
    116 ; CHECK-O-NEXT: Running analysis: FunctionAnalysisManagerCGSCCProxy
    117 ; CHECK-O-NEXT: Running pass: PostOrderFunctionAttrsPass
    118 ; CHECK-O3-NEXT: Running pass: ArgumentPromotionPass
    119 ; CHECK-O-NEXT: Running pass: CGSCCToFunctionPassAdaptor<{{.*}}PassManager{{.*}}>
    120 ; CHECK-O-NEXT: Starting llvm::Function pass manager run.
    121 ; CHECK-O-NEXT: Running pass: SROA
    122 ; CHECK-O-NEXT: Running pass: EarlyCSEPass
    123 ; CHECK-O-NEXT: Running analysis: MemorySSAAnalysis
    124 ; CHECK-O-NEXT: Running pass: SpeculativeExecutionPass
    125 ; CHECK-O-NEXT: Running pass: JumpThreadingPass
    126 ; CHECK-O-NEXT: Running analysis: LazyValueAnalysis
    127 ; CHECK-O-NEXT: Running pass: CorrelatedValuePropagationPass
    128 ; CHECK-O-NEXT: Running pass: SimplifyCFGPass
    129 ; CHECK-O3-NEXT: AggressiveInstCombinePass
    130 ; CHECK-O-NEXT: Running pass: InstCombinePass
    131 ; CHECK-O1-NEXT: Running pass: LibCallsShrinkWrapPass
    132 ; CHECK-O2-NEXT: Running pass: LibCallsShrinkWrapPass
    133 ; CHECK-O3-NEXT: Running pass: LibCallsShrinkWrapPass
    134 ; CHECK-EP-PEEPHOLE-NEXT: Running pass: NoOpFunctionPass
    135 ; CHECK-O-NEXT: Running pass: TailCallElimPass
    136 ; CHECK-O-NEXT: Running pass: SimplifyCFGPass
    137 ; CHECK-O-NEXT: Running pass: ReassociatePass
    138 ; CHECK-O-NEXT: Running pass: RequireAnalysisPass<{{.*}}OptimizationRemarkEmitterAnalysis
    139 ; CHECK-O-NEXT: Running pass: FunctionToLoopPassAdaptor<{{.*}}LoopStandardAnalysisResults{{.*}}>
    140 ; CHECK-O-NEXT: Starting llvm::Function pass manager run.
    141 ; CHECK-O-NEXT: Running pass: LoopSimplifyPass
    142 ; CHECK-O-NEXT: Running analysis: LoopAnalysis
    143 ; CHECK-O-NEXT: Running pass: LCSSAPass
    144 ; CHECK-O-NEXT: Finished llvm::Function pass manager run.
    145 ; CHECK-O-NEXT: Running analysis: ScalarEvolutionAnalysis
    146 ; CHECK-O-NEXT: Running analysis: InnerAnalysisManagerProxy
    147 ; CHECK-O-NEXT: Starting Loop pass manager run.
    148 ; CHECK-O-NEXT: Running pass: LoopInstSimplifyPass
    149 ; CHECK-O-NEXT: Running pass: LoopSimplifyCFGPass
    150 ; CHECK-O-NEXT: Running pass: LoopRotatePass
    151 ; CHECK-O-NEXT: Running pass: LICM
    152 ; CHECK-O-NEXT: Running analysis: OuterAnalysisManagerProxy
    153 ; CHECK-O-NEXT: Running pass: SimpleLoopUnswitchPass
    154 ; CHECK-O-NEXT: Finished Loop pass manager run.
    155 ; CHECK-O-NEXT: Running pass: SimplifyCFGPass
    156 ; CHECK-O-NEXT: Running pass: InstCombinePass
    157 ; CHECK-O-NEXT: Running pass: FunctionToLoopPassAdaptor<{{.*}}LoopStandardAnalysisResults{{.*}}>
    158 ; CHECK-O-NEXT: Starting llvm::Function pass manager run.
    159 ; CHECK-O-NEXT: Running pass: LoopSimplifyPass
    160 ; CHECK-O-NEXT: Running pass: LCSSAPass
    161 ; CHECK-O-NEXT: Finished llvm::Function pass manager run.
    162 ; CHECK-O-NEXT: Starting Loop pass manager run.
    163 ; CHECK-O-NEXT: Running pass: IndVarSimplifyPass
    164 ; CHECK-O-NEXT: Running pass: LoopIdiomRecognizePass
    165 ; CHECK-EP-LOOP-LATE-NEXT: Running pass: NoOpLoopPass
    166 ; CHECK-O-NEXT: Running pass: LoopDeletionPass
    167 ; CHECK-O-NEXT: Running pass: LoopFullUnrollPass
    168 ; CHECK-EP-LOOP-END-NEXT: Running pass: NoOpLoopPass
    169 ; CHECK-O-NEXT: Finished Loop pass manager run.
    170 ; CHECK-Os-NEXT: Running pass: MergedLoadStoreMotionPass
    171 ; CHECK-Os-NEXT: Running pass: GVN
    172 ; CHECK-Os-NEXT: Running analysis: MemoryDependenceAnalysis
    173 ; CHECK-Os-NEXT: Running analysis: PhiValuesAnalysis
    174 ; CHECK-Oz-NEXT: Running pass: MergedLoadStoreMotionPass
    175 ; CHECK-Oz-NEXT: Running pass: GVN
    176 ; CHECK-Oz-NEXT: Running analysis: MemoryDependenceAnalysis
    177 ; CHECK-Oz-NEXT: Running analysis: PhiValuesAnalysis
    178 ; CHECK-O2-NEXT: Running pass: MergedLoadStoreMotionPass
    179 ; CHECK-O2-NEXT: Running pass: GVN
    180 ; CHECK-O2-NEXT: Running analysis: MemoryDependenceAnalysis
    181 ; CHECK-O2-NEXT: Running analysis: PhiValuesAnalysis
    182 ; CHECK-O3-NEXT: Running pass: MergedLoadStoreMotionPass
    183 ; CHECK-O3-NEXT: Running pass: GVN
    184 ; CHECK-O3-NEXT: Running analysis: MemoryDependenceAnalysis
    185 ; CHECK-O3-NEXT: Running analysis: PhiValuesAnalysis
    186 ; CHECK-O-NEXT: Running pass: MemCpyOptPass
    187 ; CHECK-O1-NEXT: Running analysis: MemoryDependenceAnalysis
    188 ; CHECK-O1-NEXT: Running analysis: PhiValuesAnalysis
    189 ; CHECK-O-NEXT: Running pass: SCCPPass
    190 ; CHECK-O-NEXT: Running pass: BDCEPass
    191 ; CHECK-O-NEXT: Running analysis: DemandedBitsAnalysis
    192 ; CHECK-O-NEXT: Running pass: InstCombinePass
    193 ; CHECK-EP-PEEPHOLE-NEXT: Running pass: NoOpFunctionPass
    194 ; CHECK-O-NEXT: Running pass: JumpThreadingPass
    195 ; CHECK-O-NEXT: Running pass: CorrelatedValuePropagationPass
    196 ; CHECK-O-NEXT: Running pass: DSEPass
    197 ; CHECK-O-NEXT: Running pass: FunctionToLoopPassAdaptor<{{.*}}LICMPass{{.*}}>
    198 ; CHECK-O-NEXT: Starting llvm::Function pass manager run.
    199 ; CHECK-O-NEXT: Running pass: LoopSimplifyPass
    200 ; CHECK-O-NEXT: Running pass: LCSSAPass
    201 ; CHECK-O-NEXT: Finished llvm::Function pass manager run.
    202 ; CHECK-EP-SCALAR-LATE-NEXT: Running pass: NoOpFunctionPass
    203 ; CHECK-O-NEXT: Running pass: ADCEPass
    204 ; CHECK-O-NEXT: Running analysis: PostDominatorTreeAnalysis
    205 ; CHECK-O-NEXT: Running pass: SimplifyCFGPass
    206 ; CHECK-O-NEXT: Running pass: InstCombinePass
    207 ; CHECK-EP-PEEPHOLE-NEXT: Running pass: NoOpFunctionPass
    208 ; CHECK-O-NEXT: Finished llvm::Function pass manager run.
    209 ; CHECK-EP-CGSCC-LATE-NEXT: Running pass: NoOpCGSCCPass
    210 ; CHECK-O-NEXT: Finished CGSCC pass manager run.
    211 ; CHECK-O-NEXT: Finished llvm::Module pass manager run.
    212 ; CHECK-O-NEXT: Running pass: PassManager<{{.*}}Module{{.*}}>
    213 ; CHECK-O-NEXT: Starting llvm::Module pass manager run.
    214 ; CHECK-O-NEXT: Running pass: GlobalOptPass
    215 ; CHECK-O-NEXT: Running pass: GlobalDCEPass
    216 ; CHECK-O-NEXT: Running pass: EliminateAvailableExternallyPass
    217 ; CHECK-O-NEXT: Running pass: ReversePostOrderFunctionAttrsPass
    218 ; CHECK-O-NEXT: Running pass: RequireAnalysisPass<{{.*}}GlobalsAA
    219 ; CHECK-O-NEXT: Running pass: ModuleToFunctionPassAdaptor<{{.*}}PassManager{{.*}}>
    220 ; CHECK-O-NEXT: Starting llvm::Function pass manager run.
    221 ; CHECK-O-NEXT: Running pass: Float2IntPass
    222 ; CHECK-EP-VECTORIZER-START-NEXT: Running pass: NoOpFunctionPass
    223 ; CHECK-O-NEXT: Running pass: FunctionToLoopPassAdaptor<{{.*}}LoopRotatePass
    224 ; CHECK-O-NEXT: Starting llvm::Function pass manager run.
    225 ; CHECK-O-NEXT: Running pass: LoopSimplifyPass
    226 ; CHECK-O-NEXT: Running pass: LCSSAPass
    227 ; CHECK-O-NEXT: Finished llvm::Function pass manager run.
    228 ; CHECK-O-NEXT: Running pass: LoopDistributePass
    229 ; CHECK-O-NEXT: Running pass: LoopVectorizePass
    230 ; CHECK-O-NEXT: Running analysis: BlockFrequencyAnalysis
    231 ; CHECK-O-NEXT: Running analysis: BranchProbabilityAnalysis
    232 ; CHECK-O-NEXT: Running pass: LoopLoadEliminationPass
    233 ; CHECK-O-NEXT: Running analysis: LoopAccessAnalysis
    234 ; CHECK-O-NEXT: Running pass: InstCombinePass
    235 ; CHECK-O-NEXT: Running pass: SimplifyCFGPass
    236 ; CHECK-O-NEXT: Running pass: SLPVectorizerPass
    237 ; CHECK-O-NEXT: Running pass: InstCombinePass
    238 ; CHECK-O-NEXT: Running pass: LoopUnrollPass
    239 ; CHECK-O-NEXT: Running analysis: OuterAnalysisManagerProxy
    240 ; CHECK-O-NEXT: Running pass: InstCombinePass
    241 ; CHECK-O-NEXT: Running pass: RequireAnalysisPass<{{.*}}OptimizationRemarkEmitterAnalysis
    242 ; CHECK-O-NEXT: Running pass: FunctionToLoopPassAdaptor<{{.*}}LICMPass
    243 ; CHECK-O-NEXT: Starting llvm::Function pass manager run.
    244 ; CHECK-O-NEXT: Running pass: LoopSimplifyPass
    245 ; CHECK-O-NEXT: Running pass: LCSSAPass
    246 ; CHECK-O-NEXT: Finished llvm::Function pass manager run.
    247 ; CHECK-O-NEXT: Running pass: AlignmentFromAssumptionsPass
    248 ; CHECK-O-NEXT: Running pass: LoopSinkPass
    249 ; CHECK-O-NEXT: Running pass: InstSimplifyPass
    250 ; CHECK-O-NEXT: Running pass: DivRemPairsPass
    251 ; CHECK-O-NEXT: Running pass: SimplifyCFGPass
    252 ; CHECK-O-NEXT: Running pass: SpeculateAroundPHIsPass
    253 ; CHECK-O-NEXT: Finished llvm::Function pass manager run.
    254 ; CHECK-O-NEXT: Running pass: CGProfilePass
    255 ; CHECK-O-NEXT: Running pass: GlobalDCEPass
    256 ; CHECK-O-NEXT: Running pass: ConstantMergePass
    257 ; CHECK-O-NEXT: Finished llvm::Module pass manager run.
    258 ; CHECK-O-NEXT: Finished llvm::Module pass manager run.
    259 ; CHECK-O-NEXT: Running pass: PrintModulePass
    260 ;
    261 ; Make sure we get the IR back out without changes when we print the module.
    262 ; CHECK-O-LABEL: define void @foo(i32 %n) local_unnamed_addr {
    263 ; CHECK-O-NEXT: entry:
    264 ; CHECK-O-NEXT:   br label %loop
    265 ; CHECK-O:      loop:
    266 ; CHECK-O-NEXT:   %iv = phi i32 [ 0, %entry ], [ %iv.next, %loop ]
    267 ; CHECK-O-NEXT:   %iv.next = add i32 %iv, 1
    268 ; CHECK-O-NEXT:   tail call void @bar()
    269 ; CHECK-O-NEXT:   %cmp = icmp eq i32 %iv, %n
    270 ; CHECK-O-NEXT:   br i1 %cmp, label %exit, label %loop
    271 ; CHECK-O:      exit:
    272 ; CHECK-O-NEXT:   ret void
    273 ; CHECK-O-NEXT: }
    274 ;
    275 ; CHECK-O-NEXT: Finished llvm::Module pass manager run.
    276 
    277 declare void @bar() local_unnamed_addr
    278 
    279 define void @foo(i32 %n) local_unnamed_addr {
    280 entry:
    281   br label %loop
    282 loop:
    283   %iv = phi i32 [ 0, %entry ], [ %iv.next, %loop ]
    284   %iv.next = add i32 %iv, 1
    285   tail call void @bar()
    286   %cmp = icmp eq i32 %iv, %n
    287   br i1 %cmp, label %exit, label %loop
    288 exit:
    289   ret void
    290 }
    291