• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
277declare void @bar() local_unnamed_addr
278
279define void @foo(i32 %n) local_unnamed_addr {
280entry:
281  br label %loop
282loop:
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
288exit:
289  ret void
290}
291