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 ; Prelink pipelines: 11 ; RUN: opt -disable-verify -debug-pass-manager \ 12 ; RUN: -passes='thinlto-pre-link<O1>,name-anon-globals' -S %s 2>&1 \ 13 ; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-O1,CHECK-PRELINK-O,CHECK-PRELINK-O-NODIS,CHECK-PRELINK-O1 14 ; RUN: opt -disable-verify -debug-pass-manager \ 15 ; RUN: -passes='thinlto-pre-link<O2>,name-anon-globals' -S %s 2>&1 \ 16 ; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-O2,CHECK-PRELINK-O,CHECK-PRELINK-O-NODIS,CHECK-PRELINK-O2 17 ; RUN: opt -disable-verify -debug-pass-manager \ 18 ; RUN: -passes='thinlto-pre-link<O3>,name-anon-globals' -S -passes-ep-pipeline-start='no-op-module' %s 2>&1 \ 19 ; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-O3,CHECK-PRELINK-O,CHECK-PRELINK-O-NODIS,CHECK-PRELINK-O3,CHECK-EP-PIPELINE-START 20 ; RUN: opt -disable-verify -debug-pass-manager \ 21 ; RUN: -passes='thinlto-pre-link<Os>,name-anon-globals' -S %s 2>&1 \ 22 ; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-Os,CHECK-PRELINK-O,CHECK-PRELINK-O-NODIS,CHECK-PRELINK-Os 23 ; RUN: opt -disable-verify -debug-pass-manager \ 24 ; RUN: -passes='thinlto-pre-link<Oz>,name-anon-globals' -S %s 2>&1 \ 25 ; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-Oz,CHECK-PRELINK-O,CHECK-PRELINK-O-NODIS,CHECK-PRELINK-Oz 26 ; RUN: opt -disable-verify -debug-pass-manager -new-pm-debug-info-for-profiling \ 27 ; RUN: -passes='thinlto-pre-link<O2>,name-anon-globals' -S %s 2>&1 \ 28 ; RUN: | FileCheck %s --check-prefixes=CHECK-DIS,CHECK-O,CHECK-O2,CHECK-PRELINK-O,CHECK-PRELINK-O2 29 ; 30 ; Postlink pipelines: 31 ; RUN: opt -disable-verify -debug-pass-manager \ 32 ; RUN: -passes='thinlto<O1>' -S %s 2>&1 \ 33 ; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-O1,CHECK-POSTLINK-O,CHECK-POSTLINK-O1 34 ; RUN: opt -disable-verify -debug-pass-manager \ 35 ; RUN: -passes='thinlto<O2>' -S %s 2>&1 \ 36 ; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-O2,CHECK-POSTLINK-O,CHECK-POSTLINK-O2 37 ; RUN: opt -disable-verify -debug-pass-manager -passes-ep-pipeline-start='no-op-module' \ 38 ; RUN: -passes='thinlto<O3>' -S %s 2>&1 \ 39 ; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-O3,CHECK-POSTLINK-O,CHECK-POSTLINK-O3 40 ; RUN: opt -disable-verify -debug-pass-manager \ 41 ; RUN: -passes='thinlto<Os>' -S %s 2>&1 \ 42 ; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-Os,CHECK-POSTLINK-O,CHECK-POSTLINK-Os 43 ; RUN: opt -disable-verify -debug-pass-manager \ 44 ; RUN: -passes='thinlto<Oz>' -S %s 2>&1 \ 45 ; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-Oz,CHECK-POSTLINK-O,CHECK-POSTLINK-Oz 46 ; RUN: opt -disable-verify -debug-pass-manager -new-pm-debug-info-for-profiling \ 47 ; RUN: -passes='thinlto<O2>' -S %s 2>&1 \ 48 ; RUN: | FileCheck %s --check-prefixes=CHECK-O,CHECK-O2,CHECK-POSTLINK-O,CHECK-POSTLINK-O2 49 ; 50 ; CHECK-O: Starting llvm::Module pass manager run. 51 ; CHECK-O-NEXT: Running pass: PassManager<{{.*}}Module{{.*}}> 52 ; CHECK-O-NEXT: Starting llvm::Module pass manager run. 53 ; CHECK-O-NEXT: Running pass: ForceFunctionAttrsPass 54 ; CHECK-EP-PIPELINE-START-NEXT: Running pass: NoOpModulePass 55 ; CHECK-DIS-NEXT: Running pass: ModuleToFunctionPassAdaptor<{{.*}}AddDiscriminatorsPass{{.*}}> 56 ; CHECK-DIS-NEXT: Running analysis: InnerAnalysisManagerProxy 57 ; CHECK-POSTLINK-O-NEXT: Running pass: PGOIndirectCallPromotion 58 ; CHECK-POSTLINK-O-NEXT: Running analysis: ProfileSummaryAnalysis 59 ; CHECK-POSTLINK-O-NEXT: Running analysis: InnerAnalysisManagerProxy 60 ; CHECK-POSTLINK-O-NEXT: Running analysis: OptimizationRemarkEmitterAnalysis 61 ; CHECK-O-NEXT: Running pass: PassManager<{{.*}}Module{{.*}}> 62 ; CHECK-O-NEXT: Starting llvm::Module pass manager run. 63 ; CHECK-O-NEXT: Running pass: InferFunctionAttrsPass 64 ; CHECK-O-NEXT: Running analysis: TargetLibraryAnalysis 65 ; CHECK-O-NEXT: Running pass: ModuleToFunctionPassAdaptor<{{.*}}PassManager{{.*}}> 66 ; CHECK-PRELINK-O-NODIS-NEXT: Running analysis: InnerAnalysisManagerProxy 67 ; CHECK-O-NEXT: Starting llvm::Function pass manager run. 68 ; CHECK-O-NEXT: Running pass: SimplifyCFGPass 69 ; CHECK-O-NEXT: Running analysis: TargetIRAnalysis 70 ; CHECK-O-NEXT: Running analysis: AssumptionAnalysis 71 ; CHECK-O-NEXT: Running pass: SROA 72 ; CHECK-O-NEXT: Running analysis: DominatorTreeAnalysis 73 ; CHECK-O-NEXT: Running pass: EarlyCSEPass 74 ; CHECK-O-NEXT: Running analysis: TargetLibraryAnalysis 75 ; CHECK-O-NEXT: Running pass: LowerExpectIntrinsicPass 76 ; CHECK-O3-NEXT: Running pass: CallSiteSplittingPass 77 ; CHECK-O-NEXT: Finished llvm::Function pass manager run. 78 ; CHECK-O-NEXT: Running pass: IPSCCPPass 79 ; CHECK-O-NEXT: Running pass: CalledValuePropagationPass 80 ; CHECK-O-NEXT: Running pass: GlobalOptPass 81 ; CHECK-O-NEXT: Running pass: ModuleToFunctionPassAdaptor<{{.*}}PromotePass> 82 ; CHECK-O-NEXT: Running pass: DeadArgumentEliminationPass 83 ; CHECK-O-NEXT: Running pass: ModuleToFunctionPassAdaptor<{{.*}}PassManager{{.*}}> 84 ; CHECK-O-NEXT: Starting llvm::Function pass manager run. 85 ; CHECK-O-NEXT: Running pass: InstCombinePass 86 ; CHECK-PRELINK-O-NEXT: Running analysis: OptimizationRemarkEmitterAnalysis 87 ; CHECK-O-NEXT: Running analysis: AAManager 88 ; CHECK-O-NEXT: Running pass: SimplifyCFGPass 89 ; CHECK-O-NEXT: Finished llvm::Function pass manager run. 90 ; CHECK-O-NEXT: Running pass: RequireAnalysisPass<{{.*}}GlobalsAA 91 ; CHECK-O-NEXT: Running analysis: GlobalsAA 92 ; CHECK-O-NEXT: Running analysis: CallGraphAnalysis 93 ; CHECK-O-NEXT: Running pass: RequireAnalysisPass<{{.*}}ProfileSummaryAnalysis 94 ; CHECK-PRELINK-O-NEXT: Running analysis: ProfileSummaryAnalysis 95 ; CHECK-O-NEXT: Running pass: ModuleToPostOrderCGSCCPassAdaptor<{{.*}}LazyCallGraph{{.*}}> 96 ; CHECK-O-NEXT: Running analysis: InnerAnalysisManagerProxy 97 ; CHECK-O-NEXT: Running analysis: LazyCallGraphAnalysis 98 ; CHECK-O-NEXT: Starting CGSCC pass manager run. 99 ; CHECK-O-NEXT: Running pass: InlinerPass 100 ; CHECK-O-NEXT: Running analysis: OuterAnalysisManagerProxy<{{.*}}LazyCallGraph{{.*}}> 101 ; CHECK-O-NEXT: Running analysis: FunctionAnalysisManagerCGSCCProxy 102 ; CHECK-O-NEXT: Running pass: PostOrderFunctionAttrsPass 103 ; CHECK-O3-NEXT: Running pass: ArgumentPromotionPass 104 ; CHECK-O-NEXT: Running pass: CGSCCToFunctionPassAdaptor<{{.*}}PassManager{{.*}}> 105 ; CHECK-O-NEXT: Starting llvm::Function pass manager run. 106 ; CHECK-O-NEXT: Running pass: SROA 107 ; CHECK-O-NEXT: Running pass: EarlyCSEPass 108 ; CHECK-O-NEXT: Running analysis: MemorySSAAnalysis 109 ; CHECK-O-NEXT: Running pass: SpeculativeExecutionPass 110 ; CHECK-O-NEXT: Running pass: JumpThreadingPass 111 ; CHECK-O-NEXT: Running analysis: LazyValueAnalysis 112 ; CHECK-O-NEXT: Running pass: CorrelatedValuePropagationPass 113 ; CHECK-O-NEXT: Running pass: SimplifyCFGPass 114 ; CHECK-O3-NEXT: Running pass: AggressiveInstCombinePass 115 ; CHECK-O-NEXT: Running pass: InstCombinePass 116 ; CHECK-O1-NEXT: Running pass: LibCallsShrinkWrapPass 117 ; CHECK-O2-NEXT: Running pass: LibCallsShrinkWrapPass 118 ; CHECK-O3-NEXT: Running pass: LibCallsShrinkWrapPass 119 ; CHECK-O-NEXT: Running pass: TailCallElimPass 120 ; CHECK-O-NEXT: Running pass: SimplifyCFGPass 121 ; CHECK-O-NEXT: Running pass: ReassociatePass 122 ; CHECK-O-NEXT: Running pass: RequireAnalysisPass<{{.*}}OptimizationRemarkEmitterAnalysis 123 ; CHECK-O-NEXT: Running pass: FunctionToLoopPassAdaptor<{{.*}}LoopStandardAnalysisResults{{.*}}> 124 ; CHECK-O-NEXT: Starting llvm::Function pass manager run 125 ; CHECK-O-NEXT: Running pass: LoopSimplifyPass 126 ; CHECK-O-NEXT: Running analysis: LoopAnalysis 127 ; CHECK-O-NEXT: Running pass: LCSSAPass 128 ; CHECK-O-NEXT: Finished llvm::Function pass manager run 129 ; CHECK-O-NEXT: Running analysis: ScalarEvolutionAnalysis 130 ; CHECK-O-NEXT: Running analysis: InnerAnalysisManagerProxy 131 ; CHECK-O-NEXT: Starting Loop pass manager run. 132 ; CHECK-O-NEXT: Running pass: LoopInstSimplifyPass 133 ; CHECK-O-NEXT: Running pass: LoopSimplifyCFGPass 134 ; CHECK-O-NEXT: Running pass: LoopRotatePass 135 ; CHECK-O-NEXT: Running pass: LICM 136 ; CHECK-O-NEXT: Running analysis: OuterAnalysisManagerProxy 137 ; CHECK-O-NEXT: Running pass: SimpleLoopUnswitchPass 138 ; CHECK-O-NEXT: Finished Loop pass manager run. 139 ; CHECK-O-NEXT: Running pass: SimplifyCFGPass 140 ; CHECK-O-NEXT: Running pass: InstCombinePass 141 ; CHECK-O-NEXT: Running pass: FunctionToLoopPassAdaptor<{{.*}}LoopStandardAnalysisResults{{.*}}> 142 ; CHECK-O-NEXT: Starting llvm::Function pass manager run 143 ; CHECK-O-NEXT: Running pass: LoopSimplifyPass 144 ; CHECK-O-NEXT: Running pass: LCSSAPass 145 ; CHECK-O-NEXT: Finished llvm::Function pass manager run 146 ; CHECK-O-NEXT: Starting Loop pass manager run. 147 ; CHECK-O-NEXT: Running pass: IndVarSimplifyPass 148 ; CHECK-O-NEXT: Running pass: LoopIdiomRecognizePass 149 ; CHECK-O-NEXT: Running pass: LoopDeletionPass 150 ; CHECK-O-NEXT: Running pass: LoopFullUnrollPass 151 ; CHECK-O-NEXT: Finished Loop pass manager run. 152 ; CHECK-Os-NEXT: Running pass: MergedLoadStoreMotionPass 153 ; CHECK-Os-NEXT: Running pass: GVN 154 ; CHECK-Os-NEXT: Running analysis: MemoryDependenceAnalysis 155 ; CHECK-Os-NEXT: Running analysis: PhiValuesAnalysis 156 ; CHECK-Oz-NEXT: Running pass: MergedLoadStoreMotionPass 157 ; CHECK-Oz-NEXT: Running pass: GVN 158 ; CHECK-Oz-NEXT: Running analysis: MemoryDependenceAnalysis 159 ; CHECK-Oz-NEXT: Running analysis: PhiValuesAnalysis 160 ; CHECK-O2-NEXT: Running pass: MergedLoadStoreMotionPass 161 ; CHECK-O2-NEXT: Running pass: GVN 162 ; CHECK-O2-NEXT: Running analysis: MemoryDependenceAnalysis 163 ; CHECK-O2-NEXT: Running analysis: PhiValuesAnalysis 164 ; CHECK-O3-NEXT: Running pass: MergedLoadStoreMotionPass 165 ; CHECK-O3-NEXT: Running pass: GVN 166 ; CHECK-O3-NEXT: Running analysis: MemoryDependenceAnalysis 167 ; CHECK-O3-NEXT: Running analysis: PhiValuesAnalysis 168 ; CHECK-O-NEXT: Running pass: MemCpyOptPass 169 ; CHECK-O1-NEXT: Running analysis: MemoryDependenceAnalysis 170 ; CHECK-O1-NEXT: Running analysis: PhiValuesAnalysis 171 ; CHECK-O-NEXT: Running pass: SCCPPass 172 ; CHECK-O-NEXT: Running pass: BDCEPass 173 ; CHECK-O-NEXT: Running analysis: DemandedBitsAnalysis 174 ; CHECK-O-NEXT: Running pass: InstCombinePass 175 ; CHECK-O-NEXT: Running pass: JumpThreadingPass 176 ; CHECK-O-NEXT: Running pass: CorrelatedValuePropagationPass 177 ; CHECK-O-NEXT: Running pass: DSEPass 178 ; CHECK-O-NEXT: Running pass: FunctionToLoopPassAdaptor<{{.*}}LICMPass{{.*}}> 179 ; CHECK-O-NEXT: Starting llvm::Function pass manager run 180 ; CHECK-O-NEXT: Running pass: LoopSimplifyPass 181 ; CHECK-O-NEXT: Running pass: LCSSAPass 182 ; CHECK-O-NEXT: Finished llvm::Function pass manager run 183 ; CHECK-O-NEXT: Running pass: ADCEPass 184 ; CHECK-O-NEXT: Running analysis: PostDominatorTreeAnalysis 185 ; CHECK-O-NEXT: Running pass: SimplifyCFGPass 186 ; CHECK-O-NEXT: Running pass: InstCombinePass 187 ; CHECK-O-NEXT: Finished llvm::Function pass manager run. 188 ; CHECK-O-NEXT: Finished CGSCC pass manager run. 189 ; CHECK-O-NEXT: Finished llvm::Module pass manager run. 190 ; CHECK-PRELINK-O-NEXT: Running pass: GlobalOptPass 191 ; CHECK-POSTLINK-O-NEXT: Running pass: PassManager<{{.*}}Module{{.*}}> 192 ; CHECK-POSTLINK-O-NEXT: Starting llvm::Module pass manager run. 193 ; CHECK-POSTLINK-O-NEXT: Running pass: GlobalOptPass 194 ; CHECK-POSTLINK-O-NEXT: Running pass: GlobalDCEPass 195 ; CHECK-POSTLINK-O-NEXT: Running pass: EliminateAvailableExternallyPass 196 ; CHECK-POSTLINK-O-NEXT: Running pass: ReversePostOrderFunctionAttrsPass 197 ; CHECK-POSTLINK-O-NEXT: Running pass: RequireAnalysisPass<{{.*}}GlobalsAA 198 ; CHECK-POSTLINK-O-NEXT: Running pass: ModuleToFunctionPassAdaptor<{{.*}}PassManager{{.*}}> 199 ; CHECK-POSTLINK-O-NEXT: Starting llvm::Function pass manager run. 200 ; CHECK-POSTLINK-O-NEXT: Running pass: Float2IntPass 201 ; CHECK-POSTLINK-O-NEXT: Running pass: FunctionToLoopPassAdaptor<{{.*}}LoopRotatePass 202 ; CHECK-POSTLINK-O-NEXT: Starting llvm::Function pass manager run 203 ; CHECK-POSTLINK-O-NEXT: Running pass: LoopSimplifyPass 204 ; CHECK-POSTLINK-O-NEXT: Running pass: LCSSAPass 205 ; CHECK-POSTLINK-O-NEXT: Finished llvm::Function pass manager run 206 ; CHECK-POSTLINK-O-NEXT: Running pass: LoopDistributePass 207 ; CHECK-POSTLINK-O-NEXT: Running pass: LoopVectorizePass 208 ; CHECK-POSTLINK-O-NEXT: Running analysis: BlockFrequencyAnalysis 209 ; CHECK-POSTLINK-O-NEXT: Running analysis: BranchProbabilityAnalysis 210 ; CHECK-POSTLINK-O-NEXT: Running pass: LoopLoadEliminationPass 211 ; CHECK-POSTLINK-O-NEXT: Running analysis: LoopAccessAnalysis 212 ; CHECK-POSTLINK-O-NEXT: Running pass: InstCombinePass 213 ; CHECK-POSTLINK-O-NEXT: Running pass: SimplifyCFGPass 214 ; CHECK-POSTLINK-O-NEXT: Running pass: SLPVectorizerPass 215 ; CHECK-POSTLINK-O-NEXT: Running pass: InstCombinePass 216 ; CHECK-POSTLINK-O-NEXT: Running pass: LoopUnrollPass 217 ; CHECK-POSTLINK-O-NEXT: Running analysis: OuterAnalysisManagerProxy 218 ; CHECK-POSTLINK-O-NEXT: Running pass: InstCombinePass 219 ; CHECK-POSTLINK-O-NEXT: Running pass: RequireAnalysisPass<{{.*}}OptimizationRemarkEmitterAnalysis 220 ; CHECK-POSTLINK-O-NEXT: Running pass: FunctionToLoopPassAdaptor<{{.*}}LICMPass 221 ; CHECK-POSTLINK-O-NEXT: Starting llvm::Function pass manager run 222 ; CHECK-POSTLINK-O-NEXT: Running pass: LoopSimplifyPass 223 ; CHECK-POSTLINK-O-NEXT: Running pass: LCSSAPass 224 ; CHECK-POSTLINK-O-NEXT: Finished llvm::Function pass manager run 225 ; CHECK-POSTLINK-O-NEXT: Running pass: AlignmentFromAssumptionsPass 226 ; CHECK-POSTLINK-O-NEXT: Running pass: LoopSinkPass 227 ; CHECK-POSTLINK-O-NEXT: Running pass: InstSimplifyPass 228 ; CHECK-POSTLINK-O-NEXT: Running pass: DivRemPairsPass 229 ; CHECK-POSTLINK-O-NEXT: Running pass: SimplifyCFGPass 230 ; CHECK-POSTLINK-O-NEXT: Running pass: SpeculateAroundPHIsPass 231 ; CHECK-POSTLINK-O-NEXT: Finished llvm::Function pass manager run. 232 ; CHECK-POSTLINK-O-NEXT: Running pass: CGProfilePass 233 ; CHECK-POSTLINK-O-NEXT: Running pass: GlobalDCEPass 234 ; CHECK-POSTLINK-O-NEXT: Running pass: ConstantMergePass 235 ; CHECK-POSTLINK-O-NEXT: Finished llvm::Module pass manager run. 236 ; CHECK-O-NEXT: Finished llvm::Module pass manager run. 237 ; CHECK-PRELINK-O-NEXT: Running pass: NameAnonGlobalPass 238 ; CHECK-O-NEXT: Running pass: PrintModulePass 239 240 ; Make sure we get the IR back out without changes when we print the module. 241 ; CHECK-O-LABEL: define void @foo(i32 %n) local_unnamed_addr { 242 ; CHECK-O-NEXT: entry: 243 ; CHECK-O-NEXT: br label %loop 244 ; CHECK-O: loop: 245 ; CHECK-O-NEXT: %iv = phi i32 [ 0, %entry ], [ %iv.next, %loop ] 246 ; CHECK-O-NEXT: %iv.next = add i32 %iv, 1 247 ; CHECK-O-NEXT: tail call void @bar() 248 ; CHECK-O-NEXT: %cmp = icmp eq i32 %iv, %n 249 ; CHECK-O-NEXT: br i1 %cmp, label %exit, label %loop 250 ; CHECK-O: exit: 251 ; CHECK-O-NEXT: ret void 252 ; CHECK-O-NEXT: } 253 ; 254 ; CHECK-O-NEXT: Finished llvm::Module pass manager run. 255 256 declare void @bar() local_unnamed_addr 257 258 define void @foo(i32 %n) local_unnamed_addr { 259 entry: 260 br label %loop 261 loop: 262 %iv = phi i32 [ 0, %entry ], [ %iv.next, %loop ] 263 %iv.next = add i32 %iv, 1 264 tail call void @bar() 265 %cmp = icmp eq i32 %iv, %n 266 br i1 %cmp, label %exit, label %loop 267 exit: 268 ret void 269 } 270