1; This test is essentially doing very basic things with the opt tool and the
2; new pass manager pipeline. It will be used to flesh out the feature
3; completeness of the opt tool when the new pass manager is engaged. The tests
4; may not be useful once it becomes the default or may get spread out into other
5; files, but for now this is just going to step the new process through its
6; paces.
7
8; RUN: opt -disable-output -disable-verify -debug-pass-manager \
9; RUN:     -passes=no-op-module %s 2>&1 \
10; RUN:     | FileCheck %s --check-prefix=CHECK-MODULE-PASS
11; CHECK-MODULE-PASS: Starting llvm::Module pass manager run
12; CHECK-MODULE-PASS-NEXT: Running pass: NoOpModulePass
13; CHECK-MODULE-PASS-NEXT: Finished llvm::Module pass manager run
14
15; RUN: opt -disable-output -disable-verify -debug-pass-manager \
16; RUN:     -passes=no-op-cgscc %s 2>&1 \
17; RUN:     | FileCheck %s --check-prefix=CHECK-CGSCC-PASS
18; RUN: opt -disable-output -disable-verify -debug-pass-manager \
19; RUN:     -passes='cgscc(no-op-cgscc)' %s 2>&1 \
20; RUN:     | FileCheck %s --check-prefix=CHECK-CGSCC-PASS
21; CHECK-CGSCC-PASS: Starting llvm::Module pass manager run
22; CHECK-CGSCC-PASS-NEXT: Running pass: ModuleToPostOrderCGSCCPassAdaptor
23; CHECK-CGSCC-PASS-NEXT: Running analysis: InnerAnalysisManagerProxy<{{.*(CGSCCAnalysisManager|AnalysisManager<.*LazyCallGraph::SCC.*>).*}},{{.*}}Module>
24; CHECK-CGSCC-PASS-NEXT: Running analysis: InnerAnalysisManagerProxy<{{.*(FunctionAnalysisManager|AnalysisManager<.*Function.*>).*}},{{.*}}Module>
25; CHECK-CGSCC-PASS-NEXT: Running analysis: LazyCallGraphAnalysis
26; CHECK-CGSCC-PASS-NEXT: Running analysis: TargetLibraryAnalysis
27; CHECK-CGSCC-PASS-NEXT: Starting CGSCC pass manager run
28; CHECK-CGSCC-PASS-NEXT: Running pass: NoOpCGSCCPass
29; CHECK-CGSCC-PASS-NEXT: Finished CGSCC pass manager run
30; CHECK-CGSCC-PASS-NEXT: Finished llvm::Module pass manager run
31
32; RUN: opt -disable-output -disable-verify -debug-pass-manager \
33; RUN:     -passes=no-op-function %s 2>&1 \
34; RUN:     | FileCheck %s --check-prefix=CHECK-FUNCTION-PASS
35; RUN: opt -disable-output -disable-verify -debug-pass-manager \
36; RUN:     -passes='function(no-op-function)' %s 2>&1 \
37; RUN:     | FileCheck %s --check-prefix=CHECK-FUNCTION-PASS
38; CHECK-FUNCTION-PASS: Starting llvm::Module pass manager run
39; CHECK-FUNCTION-PASS-NEXT: Running pass: ModuleToFunctionPassAdaptor
40; CHECK-FUNCTION-PASS-NEXT: Running analysis: InnerAnalysisManagerProxy<{{.*}}>
41; CHECK-FUNCTION-PASS-NEXT: Starting llvm::Function pass manager run
42; CHECK-FUNCTION-PASS-NEXT: Running pass: NoOpFunctionPass
43; CHECK-FUNCTION-PASS-NEXT: Finished llvm::Function pass manager run
44; CHECK-FUNCTION-PASS-NEXT: Finished llvm::Module pass manager run
45
46; RUN: opt -disable-output -debug-pass-manager -passes=print %s 2>&1 \
47; RUN:     | FileCheck %s --check-prefix=CHECK-MODULE-PRINT
48; CHECK-MODULE-PRINT: Starting llvm::Module pass manager run
49; CHECK-MODULE-PRINT: Running pass: VerifierPass
50; CHECK-MODULE-PRINT: Running pass: PrintModulePass
51; CHECK-MODULE-PRINT: ModuleID
52; CHECK-MODULE-PRINT: define void @foo(i1 %x, i8* %p1, i8* %p2)
53; CHECK-MODULE-PRINT: Running pass: VerifierPass
54; CHECK-MODULE-PRINT: Finished llvm::Module pass manager run
55
56; RUN: opt -disable-output -debug-pass-manager -disable-verify -passes='print,verify' %s 2>&1 \
57; RUN:     | FileCheck %s --check-prefix=CHECK-MODULE-VERIFY
58; CHECK-MODULE-VERIFY: Starting llvm::Module pass manager run
59; CHECK-MODULE-VERIFY: Running pass: PrintModulePass
60; CHECK-MODULE-VERIFY: ModuleID
61; CHECK-MODULE-VERIFY: define void @foo(i1 %x, i8* %p1, i8* %p2)
62; CHECK-MODULE-VERIFY: Running pass: VerifierPass
63; CHECK-MODULE-VERIFY: Finished llvm::Module pass manager run
64
65; RUN: opt -disable-output -debug-pass-manager -passes='function(print)' %s 2>&1 \
66; RUN:     | FileCheck %s --check-prefix=CHECK-FUNCTION-PRINT
67; CHECK-FUNCTION-PRINT: Starting llvm::Module pass manager run
68; CHECK-FUNCTION-PRINT: Running pass: VerifierPass
69; CHECK-FUNCTION-PRINT: Running pass: ModuleToFunctionPassAdaptor
70; CHECK-FUNCTION-PRINT: Running analysis: InnerAnalysisManagerProxy<{{.*}}>
71; CHECK-FUNCTION-PRINT: Starting llvm::Function pass manager run
72; CHECK-FUNCTION-PRINT: Running pass: PrintFunctionPass
73; CHECK-FUNCTION-PRINT-NOT: ModuleID
74; CHECK-FUNCTION-PRINT: define void @foo(i1 %x, i8* %p1, i8* %p2)
75; CHECK-FUNCTION-PRINT: Finished llvm::Function pass manager run
76; CHECK-FUNCTION-PRINT: Running pass: VerifierPass
77; CHECK-FUNCTION-PRINT: Finished llvm::Module pass manager run
78
79; RUN: opt -disable-output -debug-pass-manager -disable-verify -passes='function(print,verify)' %s 2>&1 \
80; RUN:     | FileCheck %s --check-prefix=CHECK-FUNCTION-VERIFY
81; CHECK-FUNCTION-VERIFY: Starting llvm::Module pass manager run
82; CHECK-FUNCTION-VERIFY: Starting llvm::Function pass manager run
83; CHECK-FUNCTION-VERIFY: Running pass: PrintFunctionPass
84; CHECK-FUNCTION-VERIFY-NOT: ModuleID
85; CHECK-FUNCTION-VERIFY: define void @foo(i1 %x, i8* %p1, i8* %p2)
86; CHECK-FUNCTION-VERIFY: Running pass: VerifierPass
87; CHECK-FUNCTION-VERIFY: Finished llvm::Function pass manager run
88; CHECK-FUNCTION-VERIFY: Finished llvm::Module pass manager run
89
90; RUN: opt -S -o - -passes='no-op-module,no-op-module' %s \
91; RUN:     | FileCheck %s --check-prefix=CHECK-NOOP
92; CHECK-NOOP: define void @foo(i1 %x, i8* %p1, i8* %p2) {
93; CHECK-NOOP: entry:
94; CHECK-NOOP:   store i8 42, i8* %p1
95; CHECK-NOOP:   br i1 %x, label %loop, label %exit
96; CHECK-NOOP: loop:
97; CHECK-NOOP:   %tmp1 = load i8, i8* %p2
98; CHECK-NOOP:   br label %loop
99; CHECK-NOOP: exit:
100; CHECK-NOOP:   ret void
101; CHECK-NOOP: }
102
103; Round trip through bitcode.
104; RUN: opt -f -o - -passes='no-op-module,no-op-module' %s \
105; RUN:     | llvm-dis \
106; RUN:     | FileCheck %s --check-prefix=CHECK-NOOP
107
108; RUN: opt -disable-output -debug-pass-manager -verify-each -passes='no-op-module,function(no-op-function)' %s 2>&1 \
109; RUN:     | FileCheck %s --check-prefix=CHECK-VERIFY-EACH
110; CHECK-VERIFY-EACH: Starting llvm::Module pass manager run
111; CHECK-VERIFY-EACH: Running pass: VerifierPass
112; CHECK-VERIFY-EACH: Running pass: NoOpModulePass
113; CHECK-VERIFY-EACH: Running pass: VerifierPass
114; CHECK-VERIFY-EACH: Starting llvm::Function pass manager run
115; CHECK-VERIFY-EACH: Running pass: NoOpFunctionPass
116; CHECK-VERIFY-EACH: Running pass: VerifierPass
117; CHECK-VERIFY-EACH: Finished llvm::Function pass manager run
118; CHECK-VERIFY-EACH: Running pass: VerifierPass
119; CHECK-VERIFY-EACH: Finished llvm::Module pass manager run
120
121; RUN: opt -disable-output -debug-pass-manager -disable-verify -passes='no-op-module,function(no-op-function)' %s 2>&1 \
122; RUN:     | FileCheck %s --check-prefix=CHECK-NO-VERIFY
123; CHECK-NO-VERIFY: Starting llvm::Module pass manager run
124; CHECK-NO-VERIFY-NOT: VerifierPass
125; CHECK-NO-VERIFY: Running pass: NoOpModulePass
126; CHECK-NO-VERIFY-NOT: VerifierPass
127; CHECK-NO-VERIFY: Starting llvm::Function pass manager run
128; CHECK-NO-VERIFY: Running pass: NoOpFunctionPass
129; CHECK-NO-VERIFY-NOT: VerifierPass
130; CHECK-NO-VERIFY: Finished llvm::Function pass manager run
131; CHECK-NO-VERIFY-NOT: VerifierPass
132; CHECK-NO-VERIFY: Finished llvm::Module pass manager run
133
134; RUN: opt -disable-output -debug-pass-manager \
135; RUN:     -passes='require<no-op-module>,cgscc(require<no-op-cgscc>,function(require<no-op-function>))' %s 2>&1 \
136; RUN:     | FileCheck %s --check-prefix=CHECK-ANALYSES
137; CHECK-ANALYSES: Starting llvm::Module pass manager run
138; CHECK-ANALYSES: Running pass: RequireAnalysisPass
139; CHECK-ANALYSES: Running analysis: NoOpModuleAnalysis
140; CHECK-ANALYSES: Starting CGSCC pass manager run
141; CHECK-ANALYSES: Running pass: RequireAnalysisPass
142; CHECK-ANALYSES: Running analysis: NoOpCGSCCAnalysis
143; CHECK-ANALYSES: Starting llvm::Function pass manager run
144; CHECK-ANALYSES: Running pass: RequireAnalysisPass
145; CHECK-ANALYSES: Running analysis: NoOpFunctionAnalysis
146
147; Make sure no-op passes that preserve all analyses don't even try to do any
148; analysis invalidation.
149; RUN: opt -disable-output -debug-pass-manager \
150; RUN:     -passes='require<no-op-module>,cgscc(require<no-op-cgscc>,function(require<no-op-function>))' %s 2>&1 \
151; RUN:     | FileCheck %s --check-prefix=CHECK-NO-OP-INVALIDATION
152; CHECK-NO-OP-INVALIDATION: Starting llvm::Module pass manager run
153; CHECK-NO-OP-INVALIDATION-NOT: Invalidating all non-preserved analyses
154
155; RUN: opt -disable-output -debug-pass-manager \
156; RUN:     -passes='require<no-op-module>,require<no-op-module>,require<no-op-module>' %s 2>&1 \
157; RUN:     | FileCheck %s --check-prefix=CHECK-DO-CACHE-MODULE-ANALYSIS-RESULTS
158; CHECK-DO-CACHE-MODULE-ANALYSIS-RESULTS: Starting llvm::Module pass manager run
159; CHECK-DO-CACHE-MODULE-ANALYSIS-RESULTS: Running pass: RequireAnalysisPass
160; CHECK-DO-CACHE-MODULE-ANALYSIS-RESULTS: Running analysis: NoOpModuleAnalysis
161; CHECK-DO-CACHE-MODULE-ANALYSIS-RESULTS-NOT: Running analysis: NoOpModuleAnalysis
162
163; RUN: opt -disable-output -debug-pass-manager \
164; RUN:     -passes='require<no-op-module>,invalidate<no-op-module>,require<no-op-module>' %s 2>&1 \
165; RUN:     | FileCheck %s --check-prefix=CHECK-DO-INVALIDATE-MODULE-ANALYSIS-RESULTS
166; CHECK-DO-INVALIDATE-MODULE-ANALYSIS-RESULTS: Starting llvm::Module pass manager run
167; CHECK-DO-INVALIDATE-MODULE-ANALYSIS-RESULTS: Running pass: RequireAnalysisPass
168; CHECK-DO-INVALIDATE-MODULE-ANALYSIS-RESULTS: Running analysis: NoOpModuleAnalysis
169; CHECK-DO-INVALIDATE-MODULE-ANALYSIS-RESULTS: Invalidating analysis: NoOpModuleAnalysis
170; CHECK-DO-INVALIDATE-MODULE-ANALYSIS-RESULTS: Running analysis: NoOpModuleAnalysis
171
172; RUN: opt -disable-output -debug-pass-manager \
173; RUN:     -passes='cgscc(require<no-op-cgscc>,require<no-op-cgscc>,require<no-op-cgscc>)' %s 2>&1 \
174; RUN:     | FileCheck %s --check-prefix=CHECK-DO-CACHE-CGSCC-ANALYSIS-RESULTS
175; CHECK-DO-CACHE-CGSCC-ANALYSIS-RESULTS: Starting llvm::Module pass manager run
176; CHECK-DO-CACHE-CGSCC-ANALYSIS-RESULTS: Running pass: RequireAnalysisPass
177; CHECK-DO-CACHE-CGSCC-ANALYSIS-RESULTS: Running analysis: NoOpCGSCCAnalysis
178; CHECK-DO-CACHE-CGSCC-ANALYSIS-RESULTS-NOT: Running analysis: NoOpCGSCCAnalysis
179
180; RUN: opt -disable-output -debug-pass-manager \
181; RUN:     -passes='cgscc(require<no-op-cgscc>,invalidate<no-op-cgscc>,require<no-op-cgscc>)' %s 2>&1 \
182; RUN:     | FileCheck %s --check-prefix=CHECK-DO-INVALIDATE-CGSCC-ANALYSIS-RESULTS
183; CHECK-DO-INVALIDATE-CGSCC-ANALYSIS-RESULTS: Starting llvm::Module pass manager run
184; CHECK-DO-INVALIDATE-CGSCC-ANALYSIS-RESULTS: Running pass: RequireAnalysisPass
185; CHECK-DO-INVALIDATE-CGSCC-ANALYSIS-RESULTS: Running analysis: NoOpCGSCCAnalysis
186; CHECK-DO-INVALIDATE-CGSCC-ANALYSIS-RESULTS: Invalidating analysis: NoOpCGSCCAnalysis
187; CHECK-DO-INVALIDATE-CGSCC-ANALYSIS-RESULTS: Running analysis: NoOpCGSCCAnalysis
188
189; RUN: opt -disable-output -debug-pass-manager \
190; RUN:     -passes='function(require<no-op-function>,require<no-op-function>,require<no-op-function>)' %s 2>&1 \
191; RUN:     | FileCheck %s --check-prefix=CHECK-DO-CACHE-FUNCTION-ANALYSIS-RESULTS
192; CHECK-DO-CACHE-FUNCTION-ANALYSIS-RESULTS: Starting llvm::Module pass manager run
193; CHECK-DO-CACHE-FUNCTION-ANALYSIS-RESULTS: Running pass: RequireAnalysisPass
194; CHECK-DO-CACHE-FUNCTION-ANALYSIS-RESULTS: Running analysis: NoOpFunctionAnalysis
195; CHECK-DO-CACHE-FUNCTION-ANALYSIS-RESULTS-NOT: Running analysis: NoOpFunctionAnalysis
196
197; RUN: opt -disable-output -debug-pass-manager \
198; RUN:     -passes='function(require<no-op-function>,invalidate<no-op-function>,require<no-op-function>)' %s 2>&1 \
199; RUN:     | FileCheck %s --check-prefix=CHECK-DO-INVALIDATE-FUNCTION-ANALYSIS-RESULTS
200; CHECK-DO-INVALIDATE-FUNCTION-ANALYSIS-RESULTS: Starting llvm::Module pass manager run
201; CHECK-DO-INVALIDATE-FUNCTION-ANALYSIS-RESULTS: Running pass: RequireAnalysisPass
202; CHECK-DO-INVALIDATE-FUNCTION-ANALYSIS-RESULTS: Running analysis: NoOpFunctionAnalysis
203; CHECK-DO-INVALIDATE-FUNCTION-ANALYSIS-RESULTS: Invalidating analysis: NoOpFunctionAnalysis
204; CHECK-DO-INVALIDATE-FUNCTION-ANALYSIS-RESULTS: Running analysis: NoOpFunctionAnalysis
205
206; RUN: opt -disable-output -disable-verify -debug-pass-manager \
207; RUN:     -passes='require<no-op-module>,module(require<no-op-module>,function(require<no-op-function>,invalidate<all>,require<no-op-function>),require<no-op-module>),require<no-op-module>' %s 2>&1 \
208; RUN:     | FileCheck %s --check-prefix=CHECK-INVALIDATE-ALL
209; CHECK-INVALIDATE-ALL: Starting llvm::Module pass manager run
210; CHECK-INVALIDATE-ALL: Running pass: RequireAnalysisPass
211; CHECK-INVALIDATE-ALL: Running analysis: NoOpModuleAnalysis
212; CHECK-INVALIDATE-ALL: Starting llvm::Module pass manager run
213; CHECK-INVALIDATE-ALL: Running pass: RequireAnalysisPass
214; CHECK-INVALIDATE-ALL-NOT: Running analysis: NoOpModuleAnalysis
215; CHECK-INVALIDATE-ALL: Starting llvm::Function pass manager run
216; CHECK-INVALIDATE-ALL: Running pass: RequireAnalysisPass
217; CHECK-INVALIDATE-ALL: Running analysis: NoOpFunctionAnalysis
218; CHECK-INVALIDATE-ALL: Running pass: InvalidateAllAnalysesPass
219; CHECK-INVALIDATE-ALL: Invalidating analysis: NoOpFunctionAnalysis
220; CHECK-INVALIDATE-ALL: Running pass: RequireAnalysisPass
221; CHECK-INVALIDATE-ALL: Running analysis: NoOpFunctionAnalysis
222; CHECK-INVALIDATE-ALL: Finished llvm::Function pass manager run
223; CHECK-INVALIDATE-ALL: Invalidating analysis: NoOpModuleAnalysis
224; CHECK-INVALIDATE-ALL: Running pass: RequireAnalysisPass
225; CHECK-INVALIDATE-ALL: Running analysis: NoOpModuleAnalysis
226; CHECK-INVALIDATE-ALL: Finished llvm::Module pass manager run
227; CHECK-INVALIDATE-ALL-NOT: Invalidating analysis: NoOpModuleAnalysis
228; CHECK-INVALIDATE-ALL: Running pass: RequireAnalysisPass
229; CHECK-INVALIDATE-ALL-NOT: Running analysis: NoOpModuleAnalysis
230; CHECK-INVALIDATE-ALL: Finished llvm::Module pass manager run
231
232; RUN: opt -disable-output -disable-verify -debug-pass-manager \
233; RUN:     -passes='require<no-op-module>,module(require<no-op-module>,cgscc(require<no-op-cgscc>,function(require<no-op-function>,invalidate<all>,require<no-op-function>),require<no-op-cgscc>),require<no-op-module>),require<no-op-module>' %s 2>&1 \
234; RUN:     | FileCheck %s --check-prefix=CHECK-INVALIDATE-ALL-CG
235; CHECK-INVALIDATE-ALL-CG: Starting llvm::Module pass manager run
236; CHECK-INVALIDATE-ALL-CG: Running pass: RequireAnalysisPass
237; CHECK-INVALIDATE-ALL-CG: Running analysis: NoOpModuleAnalysis
238; CHECK-INVALIDATE-ALL-CG: Starting llvm::Module pass manager run
239; CHECK-INVALIDATE-ALL-CG: Running pass: RequireAnalysisPass
240; CHECK-INVALIDATE-ALL-CG-NOT: Running analysis: NoOpModuleAnalysis
241; CHECK-INVALIDATE-ALL-CG: Starting CGSCC pass manager run
242; CHECK-INVALIDATE-ALL-CG: Running pass: RequireAnalysisPass
243; CHECK-INVALIDATE-ALL-CG: Running analysis: NoOpCGSCCAnalysis
244; CHECK-INVALIDATE-ALL-CG: Starting llvm::Function pass manager run
245; CHECK-INVALIDATE-ALL-CG: Running pass: RequireAnalysisPass
246; CHECK-INVALIDATE-ALL-CG: Running analysis: NoOpFunctionAnalysis
247; CHECK-INVALIDATE-ALL-CG: Running pass: InvalidateAllAnalysesPass
248; CHECK-INVALIDATE-ALL-CG: Invalidating analysis: NoOpFunctionAnalysis
249; CHECK-INVALIDATE-ALL-CG: Running pass: RequireAnalysisPass
250; CHECK-INVALIDATE-ALL-CG: Running analysis: NoOpFunctionAnalysis
251; CHECK-INVALIDATE-ALL-CG: Finished llvm::Function pass manager run
252; CHECK-INVALIDATE-ALL-CG-NOT: Running analysis: NoOpFunctionAnalysis
253; CHECK-INVALIDATE-ALL-CG: Invalidating analysis: NoOpCGSCCAnalysis
254; CHECK-INVALIDATE-ALL-CG: Running pass: RequireAnalysisPass
255; CHECK-INVALIDATE-ALL-CG: Running analysis: NoOpCGSCCAnalysis
256; CHECK-INVALIDATE-ALL-CG: Finished CGSCC pass manager run
257; CHECK-INVALIDATE-ALL-CG-NOT: Invalidating analysis: NoOpCGSCCAnalysis
258; CHECK-INVALIDATE-ALL-CG: Invalidating analysis: NoOpModuleAnalysis
259; CHECK-INVALIDATE-ALL-CG: Running pass: RequireAnalysisPass
260; CHECK-INVALIDATE-ALL-CG: Running analysis: NoOpModuleAnalysis
261; CHECK-INVALIDATE-ALL-CG: Finished llvm::Module pass manager run
262; CHECK-INVALIDATE-ALL-CG-NOT: Invalidating analysis: NoOpModuleAnalysis
263; CHECK-INVALIDATE-ALL-CG: Running pass: RequireAnalysisPass
264; CHECK-INVALIDATE-ALL-CG-NOT: Running analysis: NoOpModuleAnalysis
265; CHECK-INVALIDATE-ALL-CG: Finished llvm::Module pass manager run
266
267; RUN: opt -disable-output -disable-verify -debug-pass-manager %s 2>&1 \
268; RUN:     -passes='require<targetlibinfo>,invalidate<all>,require<targetlibinfo>' \
269; RUN:     | FileCheck %s --check-prefix=CHECK-TLI
270; CHECK-TLI: Starting llvm::Module pass manager run
271; CHECK-TLI: Running pass: RequireAnalysisPass
272; CHECK-TLI: Running analysis: TargetLibraryAnalysis
273; CHECK-TLI: Running pass: InvalidateAllAnalysesPass
274; CHECK-TLI-NOT: Invalidating analysis: TargetLibraryAnalysis
275; CHECK-TLI: Running pass: RequireAnalysisPass
276; CHECK-TLI-NOT: Running analysis: TargetLibraryAnalysis
277; CHECK-TLI: Finished llvm::Module pass manager run
278
279; RUN: opt -disable-output -disable-verify -debug-pass-manager %s 2>&1 \
280; RUN:     -passes='require<targetir>,invalidate<all>,require<targetir>' \
281; RUN:     | FileCheck %s --check-prefix=CHECK-TIRA
282; CHECK-TIRA: Starting llvm::Module pass manager run
283; CHECK-TIRA: Running pass: RequireAnalysisPass
284; CHECK-TIRA: Running analysis: TargetIRAnalysis
285; CHECK-TIRA: Running pass: InvalidateAllAnalysesPass
286; CHECK-TIRA-NOT: Invalidating analysis: TargetIRAnalysis
287; CHECK-TIRA: Running pass: RequireAnalysisPass
288; CHECK-TIRA-NOT: Running analysis: TargetIRAnalysis
289; CHECK-TIRA: Finished llvm::Module pass manager run
290
291; RUN: opt -disable-output -disable-verify -debug-pass-manager %s 2>&1 \
292; RUN:     -passes='require<domtree>' \
293; RUN:     | FileCheck %s --check-prefix=CHECK-DT
294; CHECK-DT: Starting llvm::Module pass manager run
295; CHECK-DT: Running pass: RequireAnalysisPass
296; CHECK-DT: Running analysis: DominatorTreeAnalysis
297; CHECK-DT: Finished llvm::Module pass manager run
298
299; RUN: opt -disable-output -disable-verify -debug-pass-manager %s 2>&1 \
300; RUN:     -passes='require<basic-aa>' \
301; RUN:     | FileCheck %s --check-prefix=CHECK-BASIC-AA
302; CHECK-BASIC-AA: Starting llvm::Module pass manager run
303; CHECK-BASIC-AA: Running pass: RequireAnalysisPass
304; CHECK-BASIC-AA: Running analysis: BasicAA
305; CHECK-BASIC-AA: Finished llvm::Module pass manager run
306
307; RUN: opt -disable-output -disable-verify -debug-pass-manager %s 2>&1 \
308; RUN:     -passes='require<aa>' -aa-pipeline='basic-aa' \
309; RUN:     | FileCheck %s --check-prefix=CHECK-AA
310; CHECK-AA: Starting llvm::Module pass manager run
311; CHECK-AA: Running pass: RequireAnalysisPass
312; CHECK-AA: Running analysis: AAManager
313; CHECK-AA: Running analysis: BasicAA
314; CHECK-AA: Finished llvm::Module pass manager run
315
316; RUN: opt -disable-output -disable-verify -debug-pass-manager %s 2>&1 \
317; RUN:     -passes='require<aa>' -aa-pipeline='default' \
318; RUN:     | FileCheck %s --check-prefix=CHECK-AA-DEFAULT
319; CHECK-AA-DEFAULT: Starting llvm::Module pass manager run
320; CHECK-AA-DEFAULT: Running pass: RequireAnalysisPass
321; CHECK-AA-DEFAULT: Running analysis: AAManager
322; CHECK-AA-DEFAULT: Running analysis: BasicAA
323; CHECK-AA-DEFAULT: Running analysis: ScopedNoAliasAA
324; CHECK-AA-DEFAULT: Running analysis: TypeBasedAA
325; CHECK-AA-DEFAULT: Finished llvm::Module pass manager run
326
327; RUN: opt -disable-output -disable-verify -debug-pass-manager %s 2>&1 \
328; RUN:     -passes='require<aa>,invalidate<domtree>,aa-eval' -aa-pipeline='basic-aa' \
329; RUN:     | FileCheck %s --check-prefix=CHECK-AA-FUNCTION-INVALIDATE
330; CHECK-AA-FUNCTION-INVALIDATE: Starting llvm::Function pass manager run
331; CHECK-AA-FUNCTION-INVALIDATE: Running pass: RequireAnalysisPass
332; CHECK-AA-FUNCTION-INVALIDATE: Running analysis: AAManager
333; CHECK-AA-FUNCTION-INVALIDATE: Running analysis: BasicAA
334; CHECK-AA-FUNCTION-INVALIDATE: Running pass: InvalidateAnalysisPass
335; CHECK-AA-FUNCTION-INVALIDATE: Invalidating analysis: DominatorTreeAnalysis
336; CHECK-AA-FUNCTION-INVALIDATE: Invalidating analysis: BasicAA
337; CHECK-AA-FUNCTION-INVALIDATE: Invalidating analysis: AAManager
338; CHECK-AA-FUNCTION-INVALIDATE: Running pass: AAEvaluator
339; CHECK-AA-FUNCTION-INVALIDATE: Running analysis: AAManager
340; CHECK-AA-FUNCTION-INVALIDATE: Running analysis: BasicAA
341; CHECK-AA-FUNCTION-INVALIDATE: Finished llvm::Function pass manager run
342
343; RUN: opt -disable-output -disable-verify -debug-pass-manager %s 2>&1 \
344; RUN:     -passes='require<globals-aa>,function(require<aa>),invalidate<globals-aa>,require<globals-aa>,function(aa-eval)' -aa-pipeline='globals-aa' \
345; RUN:     | FileCheck %s --check-prefix=CHECK-AA-MODULE-INVALIDATE
346; CHECK-AA-MODULE-INVALIDATE: Starting llvm::Module pass manager run
347; CHECK-AA-MODULE-INVALIDATE: Running pass: RequireAnalysisPass
348; CHECK-AA-MODULE-INVALIDATE: Running analysis: GlobalsAA
349; CHECK-AA-MODULE-INVALIDATE: Starting llvm::Function pass manager run
350; CHECK-AA-MODULE-INVALIDATE: Running pass: RequireAnalysisPass
351; CHECK-AA-MODULE-INVALIDATE: Running analysis: AAManager
352; CHECK-AA-MODULE-INVALIDATE: Finished llvm::Function pass manager run
353; CHECK-AA-MODULE-INVALIDATE: Running pass: InvalidateAnalysisPass
354; CHECK-AA-MODULE-INVALIDATE: Invalidating analysis: AAManager
355; CHECK-AA-MODULE-INVALIDATE: Invalidating analysis: GlobalsAA
356; CHECK-AA-MODULE-INVALIDATE: Running pass: RequireAnalysisPass
357; CHECK-AA-MODULE-INVALIDATE: Running analysis: GlobalsAA
358; CHECK-AA-MODULE-INVALIDATE: Starting llvm::Function pass manager run
359; CHECK-AA-MODULE-INVALIDATE: Running pass: AAEvaluator
360; CHECK-AA-MODULE-INVALIDATE: Running analysis: AAManager
361; CHECK-AA-MODULE-INVALIDATE: Finished llvm::Function pass manager run
362; CHECK-AA-MODULE-INVALIDATE: Finished llvm::Module pass manager run
363
364; RUN: opt -disable-output -disable-verify -debug-pass-manager %s 2>&1 \
365; RUN:     -passes='require<memdep>' \
366; RUN:     | FileCheck %s --check-prefix=CHECK-MEMDEP
367; CHECK-MEMDEP: Starting llvm::Module pass manager run
368; CHECK-MEMDEP: Running pass: RequireAnalysisPass
369; CHECK-MEMDEP: Running analysis: MemoryDependenceAnalysis
370; CHECK-MEMDEP: Finished llvm::Module pass manager run
371
372; RUN: opt -disable-output -disable-verify -debug-pass-manager %s 2>&1 \
373; RUN:     -passes='require<callgraph>' \
374; RUN:     | FileCheck %s --check-prefix=CHECK-CALLGRAPH
375; CHECK-CALLGRAPH: Starting llvm::Module pass manager run
376; CHECK-CALLGRAPH: Running pass: RequireAnalysisPass
377; CHECK-CALLGRAPH: Running analysis: CallGraphAnalysis
378; CHECK-CALLGRAPH: Finished llvm::Module pass manager run
379
380; RUN: opt -disable-output -disable-verify -debug-pass-manager \
381; RUN:     -passes='default<O0>' %s 2>&1 \
382; RUN:     | FileCheck %s --check-prefix=CHECK-O0
383; CHECK-O0: Starting llvm::Module pass manager run
384; CHECK-O0-NEXT: Finished llvm::Module pass manager run
385
386; RUN: opt -disable-output -disable-verify -debug-pass-manager \
387; RUN:     -passes='repeat<3>(no-op-module)' %s 2>&1 \
388; RUN:     | FileCheck %s --check-prefix=CHECK-REPEAT-MODULE-PASS
389; CHECK-REPEAT-MODULE-PASS: Starting llvm::Module pass manager run
390; CHECK-REPEAT-MODULE-PASS-NEXT: Running pass: RepeatedPass
391; CHECK-REPEAT-MODULE-PASS-NEXT: Starting llvm::Module pass manager run
392; CHECK-REPEAT-MODULE-PASS-NEXT: Running pass: NoOpModulePass
393; CHECK-REPEAT-MODULE-PASS-NEXT: Finished llvm::Module pass manager run
394; CHECK-REPEAT-MODULE-PASS-NEXT: Starting llvm::Module pass manager run
395; CHECK-REPEAT-MODULE-PASS-NEXT: Running pass: NoOpModulePass
396; CHECK-REPEAT-MODULE-PASS-NEXT: Finished llvm::Module pass manager run
397; CHECK-REPEAT-MODULE-PASS-NEXT: Starting llvm::Module pass manager run
398; CHECK-REPEAT-MODULE-PASS-NEXT: Running pass: NoOpModulePass
399; CHECK-REPEAT-MODULE-PASS-NEXT: Finished llvm::Module pass manager run
400; CHECK-REPEAT-MODULE-PASS-NEXT: Finished llvm::Module pass manager run
401
402; RUN: opt -disable-output -disable-verify -debug-pass-manager \
403; RUN:     -passes='cgscc(repeat<3>(no-op-cgscc))' %s 2>&1 \
404; RUN:     | FileCheck %s --check-prefix=CHECK-REPEAT-CGSCC-PASS
405; CHECK-REPEAT-CGSCC-PASS: Starting llvm::Module pass manager run
406; CHECK-REPEAT-CGSCC-PASS-NEXT: Running pass: ModuleToPostOrderCGSCCPassAdaptor
407; CHECK-REPEAT-CGSCC-PASS-NEXT: Running analysis: InnerAnalysisManagerProxy<{{.*(CGSCCAnalysisManager|AnalysisManager<.*LazyCallGraph::SCC.*>).*}},{{.*}}Module>
408; CHECK-REPEAT-CGSCC-PASS-NEXT: Running analysis: InnerAnalysisManagerProxy<{{.*(FunctionAnalysisManager|AnalysisManager<.*Function.*>).*}},{{.*}}Module>
409; CHECK-REPEAT-CGSCC-PASS-NEXT: Running analysis: LazyCallGraphAnalysis
410; CHECK-REPEAT-CGSCC-PASS-NEXT: Running analysis: TargetLibraryAnalysis
411; CHECK-REPEAT-CGSCC-PASS-NEXT: Starting CGSCC pass manager run
412; CHECK-REPEAT-CGSCC-PASS-NEXT: Running pass: RepeatedPass
413; CHECK-REPEAT-CGSCC-PASS-NEXT: Starting CGSCC pass manager run
414; CHECK-REPEAT-CGSCC-PASS-NEXT: Running pass: NoOpCGSCCPass
415; CHECK-REPEAT-CGSCC-PASS-NEXT: Finished CGSCC pass manager run
416; CHECK-REPEAT-CGSCC-PASS-NEXT: Starting CGSCC pass manager run
417; CHECK-REPEAT-CGSCC-PASS-NEXT: Running pass: NoOpCGSCCPass
418; CHECK-REPEAT-CGSCC-PASS-NEXT: Finished CGSCC pass manager run
419; CHECK-REPEAT-CGSCC-PASS-NEXT: Starting CGSCC pass manager run
420; CHECK-REPEAT-CGSCC-PASS-NEXT: Running pass: NoOpCGSCCPass
421; CHECK-REPEAT-CGSCC-PASS-NEXT: Finished CGSCC pass manager run
422; CHECK-REPEAT-CGSCC-PASS-NEXT: Finished CGSCC pass manager run
423; CHECK-REPEAT-CGSCC-PASS-NEXT: Finished llvm::Module pass manager run
424
425; RUN: opt -disable-output -disable-verify -debug-pass-manager \
426; RUN:     -passes='function(repeat<3>(no-op-function))' %s 2>&1 \
427; RUN:     | FileCheck %s --check-prefix=CHECK-REPEAT-FUNCTION-PASS
428; CHECK-REPEAT-FUNCTION-PASS: Starting llvm::Module pass manager run
429; CHECK-REPEAT-FUNCTION-PASS-NEXT: Running pass: ModuleToFunctionPassAdaptor
430; CHECK-REPEAT-FUNCTION-PASS-NEXT: Running analysis: InnerAnalysisManagerProxy<{{.*}}>
431; CHECK-REPEAT-FUNCTION-PASS-NEXT: Starting llvm::Function pass manager run
432; CHECK-REPEAT-FUNCTION-PASS-NEXT: Running pass: RepeatedPass
433; CHECK-REPEAT-FUNCTION-PASS-NEXT: Starting llvm::Function pass manager run
434; CHECK-REPEAT-FUNCTION-PASS-NEXT: Running pass: NoOpFunctionPass
435; CHECK-REPEAT-FUNCTION-PASS-NEXT: Finished llvm::Function pass manager run
436; CHECK-REPEAT-FUNCTION-PASS-NEXT: Starting llvm::Function pass manager run
437; CHECK-REPEAT-FUNCTION-PASS-NEXT: Running pass: NoOpFunctionPass
438; CHECK-REPEAT-FUNCTION-PASS-NEXT: Finished llvm::Function pass manager run
439; CHECK-REPEAT-FUNCTION-PASS-NEXT: Starting llvm::Function pass manager run
440; CHECK-REPEAT-FUNCTION-PASS-NEXT: Running pass: NoOpFunctionPass
441; CHECK-REPEAT-FUNCTION-PASS-NEXT: Finished llvm::Function pass manager run
442; CHECK-REPEAT-FUNCTION-PASS-NEXT: Finished llvm::Function pass manager run
443; CHECK-REPEAT-FUNCTION-PASS-NEXT: Finished llvm::Module pass manager run
444
445; RUN: opt -disable-output -disable-verify -debug-pass-manager \
446; RUN:     -passes='loop(repeat<3>(no-op-loop))' %s 2>&1 \
447; RUN:     | FileCheck %s --check-prefix=CHECK-REPEAT-LOOP-PASS
448; CHECK-REPEAT-LOOP-PASS: Starting llvm::Module pass manager run
449; CHECK-REPEAT-LOOP-PASS-NEXT: Running pass: ModuleToFunctionPassAdaptor
450; CHECK-REPEAT-LOOP-PASS-NEXT: Running analysis: InnerAnalysisManagerProxy<{{.*}}>
451; CHECK-REPEAT-LOOP-PASS-NEXT: Starting llvm::Function pass manager run
452; CHECK-REPEAT-LOOP-PASS-NEXT: Running pass: FunctionToLoopPassAdaptor
453; CHECK-REPEAT-LOOP-PASS-NEXT: Starting llvm::Function pass manager run
454; CHECK-REPEAT-LOOP-PASS-NEXT: Running pass: LoopSimplify
455; CHECK-REPEAT-LOOP-PASS-NEXT: Running analysis: LoopAnalysis
456; CHECK-REPEAT-LOOP-PASS-NEXT: Running analysis: DominatorTreeAnalysis
457; CHECK-REPEAT-LOOP-PASS-NEXT: Running analysis: AssumptionAnalysis
458; CHECK-REPEAT-LOOP-PASS-NEXT: Invalidating all non-preserved analyses
459; CHECK-REPEAT-LOOP-PASS-NEXT: Running pass: LCSSAPass
460; CHECK-REPEAT-LOOP-PASS-NEXT: Finished llvm::Function pass manager run
461; CHECK-REPEAT-LOOP-PASS-NEXT: Running analysis: AAManager
462; CHECK-REPEAT-LOOP-PASS-NEXT: Running analysis: TargetLibraryAnalysis
463; CHECK-REPEAT-LOOP-PASS-NEXT: Running analysis: ScalarEvolutionAnalysis
464; CHECK-REPEAT-LOOP-PASS-NEXT: Running analysis: TargetIRAnalysis
465; CHECK-REPEAT-LOOP-PASS-NEXT: Running analysis: InnerAnalysisManagerProxy<{{.*}}>
466; CHECK-REPEAT-LOOP-PASS-NEXT: Starting Loop pass manager run
467; CHECK-REPEAT-LOOP-PASS-NEXT: Running pass: RepeatedPass
468; CHECK-REPEAT-LOOP-PASS-NEXT: Starting Loop pass manager run
469; CHECK-REPEAT-LOOP-PASS-NEXT: Running pass: NoOpLoopPass
470; CHECK-REPEAT-LOOP-PASS-NEXT: Finished Loop pass manager run
471; CHECK-REPEAT-LOOP-PASS-NEXT: Starting Loop pass manager run
472; CHECK-REPEAT-LOOP-PASS-NEXT: Running pass: NoOpLoopPass
473; CHECK-REPEAT-LOOP-PASS-NEXT: Finished Loop pass manager run
474; CHECK-REPEAT-LOOP-PASS-NEXT: Starting Loop pass manager run
475; CHECK-REPEAT-LOOP-PASS-NEXT: Running pass: NoOpLoopPass
476; CHECK-REPEAT-LOOP-PASS-NEXT: Finished Loop pass manager run
477; CHECK-REPEAT-LOOP-PASS-NEXT: Finished Loop pass manager run
478; CHECK-REPEAT-LOOP-PASS-NEXT: Finished llvm::Function pass manager run
479; CHECK-REPEAT-LOOP-PASS-NEXT: Invalidating all non-preserved analyses
480; CHECK-REPEAT-LOOP-PASS-NEXT: Finished llvm::Module pass manager run
481
482define void @foo(i1 %x, i8* %p1, i8* %p2) {
483entry:
484  store i8 42, i8* %p1
485  br i1 %x, label %loop, label %exit
486
487loop:
488  %tmp1 = load i8, i8* %p2
489  br label %loop
490
491exit:
492  ret void
493}
494
495declare void @bar()
496