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