Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / llvm / test / Other / pass-pipeline-parsing.ll
blobfd65224b1ef0d887bd2e9b96cc8d8bbfbf5520c4
1 ; RUN: opt -disable-output -debug-pass-manager \
2 ; RUN:     -passes=no-op-module,no-op-module %s 2>&1 \
3 ; RUN:     | FileCheck %s --check-prefix=CHECK-TWO-NOOP-MP
4 ; CHECK-TWO-NOOP-MP: Running pass: NoOpModulePass
5 ; CHECK-TWO-NOOP-MP: Running pass: NoOpModulePass
7 ; RUN: opt -disable-output -debug-pass-manager \
8 ; RUN:     -passes='module(no-op-module,no-op-module)' %s 2>&1 \
9 ; RUN:     | FileCheck %s --check-prefix=CHECK-NESTED-TWO-NOOP-MP
10 ; CHECK-NESTED-TWO-NOOP-MP: Running pass: NoOpModulePass
11 ; CHECK-NESTED-TWO-NOOP-MP: Running pass: NoOpModulePass
13 ; RUN: opt -disable-output -debug-pass-manager \
14 ; RUN:     -passes=no-op-function,no-op-function %s 2>&1 \
15 ; RUN:     | FileCheck %s --check-prefix=CHECK-TWO-NOOP-FP
16 ; CHECK-TWO-NOOP-FP: Running pass: NoOpFunctionPass
17 ; CHECK-TWO-NOOP-FP: Running pass: NoOpFunctionPass
19 ; RUN: opt -disable-output -debug-pass-manager \
20 ; RUN:     -passes='function(no-op-function,no-op-function)' %s 2>&1 \
21 ; RUN:     | FileCheck %s --check-prefix=CHECK-NESTED-TWO-NOOP-FP
22 ; CHECK-NESTED-TWO-NOOP-FP: Running pass: NoOpFunctionPass
23 ; CHECK-NESTED-TWO-NOOP-FP: Running pass: NoOpFunctionPass
25 ; RUN: opt -disable-output -debug-pass-manager \
26 ; RUN:     -passes='no-op-module,function(no-op-function,no-op-function),no-op-module' %s 2>&1 \
27 ; RUN:     | FileCheck %s --check-prefix=CHECK-MIXED-FP-AND-MP
28 ; CHECK-MIXED-FP-AND-MP: Running pass: NoOpModulePass
29 ; CHECK-MIXED-FP-AND-MP: Running pass: NoOpFunctionPass
30 ; CHECK-MIXED-FP-AND-MP: Running pass: NoOpFunctionPass
31 ; CHECK-MIXED-FP-AND-MP: Running pass: NoOpModulePass
33 ; RUN: opt -disable-output -debug-pass-manager \
34 ; RUN:     -aa-pipeline= -passes='require<aa>' %s 2>&1 \
35 ; RUN:     | FileCheck %s --check-prefix=CHECK-EMPTY-AA
36 ; CHECK-EMPTY-AA: Running analysis: AAManager
37 ; CHECK-EMPTY-AA-NOT: Running analysis: BasicAA
39 ; RUN: opt -disable-output -debug-pass-manager \
40 ; RUN:     -aa-pipeline=basic-aa -passes='require<aa>' %s 2>&1 \
41 ; RUN:     | FileCheck %s --check-prefix=CHECK-BASIC-AA
42 ; CHECK-BASIC-AA: Running analysis: AAManager
43 ; CHECK-BASIC-AA: Running analysis: BasicAA
44 ; CHECK-BASIC-AA-NOT: Running analysis: TypeBasedAA
46 ; RUN: opt -disable-output -debug-pass-manager \
47 ; RUN:     -aa-pipeline=basic-aa,tbaa -passes='require<aa>' %s 2>&1 \
48 ; RUN:     | FileCheck %s --check-prefix=CHECK-TWO-AA
49 ; CHECK-TWO-AA: Running analysis: AAManager
50 ; CHECK-TWO-AA: Running analysis: BasicAA
51 ; CHECK-TWO-AA: Running analysis: TypeBasedAA
53 ; RUN: opt -disable-output -debug-pass-manager \
54 ; RUN:     -aa-pipeline=default -passes='require<aa>' %s 2>&1 \
55 ; RUN:     | FileCheck %s --check-prefix=CHECK-DEFAULT-AA
56 ; CHECK-DEFAULT-AA: Running analysis: AAManager
57 ; CHECK-DEFAULT-AA-DAG: Running analysis: BasicAA
58 ; CHECK-DEFAULT-AA-DAG: Running analysis: TypeBasedAA
60 ; RUN: not opt -passes='function<no-rerun>(no-op-function)' %s 2>&1 \
61 ; RUN:     | FileCheck %s --check-prefix=CHECK-RERUN-BAD
62 ; CHECK-RERUN-BAD: cannot have a no-rerun module to function adaptor
64 ; RUN: not opt -disable-output -debug-pass-manager \
65 ; RUN:     -passes='no-op-module)' %s 2>&1 \
66 ; RUN:     | FileCheck %s --check-prefix=CHECK-UNBALANCED1
67 ; CHECK-UNBALANCED1: invalid pipeline 'no-op-module)'
69 ; RUN: not opt -disable-output -debug-pass-manager \
70 ; RUN:     -passes='module(no-op-module))' %s 2>&1 \
71 ; RUN:     | FileCheck %s --check-prefix=CHECK-UNBALANCED2
72 ; CHECK-UNBALANCED2: invalid pipeline 'module(no-op-module))'
74 ; RUN: not opt -disable-output -debug-pass-manager \
75 ; RUN:     -passes='module(no-op-module' %s 2>&1 \
76 ; RUN:     | FileCheck %s --check-prefix=CHECK-UNBALANCED3
77 ; CHECK-UNBALANCED3: invalid pipeline 'module(no-op-module'
79 ; RUN: not opt -disable-output -debug-pass-manager \
80 ; RUN:     -passes='no-op-function)' %s 2>&1 \
81 ; RUN:     | FileCheck %s --check-prefix=CHECK-UNBALANCED4
82 ; CHECK-UNBALANCED4: invalid pipeline 'no-op-function)'
84 ; RUN: not opt -disable-output -debug-pass-manager \
85 ; RUN:     -passes='function(no-op-function))' %s 2>&1 \
86 ; RUN:     | FileCheck %s --check-prefix=CHECK-UNBALANCED5
87 ; CHECK-UNBALANCED5: invalid pipeline 'function(no-op-function))'
89 ; RUN: not opt -disable-output -debug-pass-manager \
90 ; RUN:     -passes='function(function(no-op-function)))' %s 2>&1 \
91 ; RUN:     | FileCheck %s --check-prefix=CHECK-UNBALANCED6
92 ; CHECK-UNBALANCED6: invalid pipeline 'function(function(no-op-function)))'
94 ; RUN: not opt -disable-output -debug-pass-manager \
95 ; RUN:     -passes='function(no-op-function' %s 2>&1 \
96 ; RUN:     | FileCheck %s --check-prefix=CHECK-UNBALANCED7
97 ; CHECK-UNBALANCED7: invalid pipeline 'function(no-op-function'
99 ; RUN: not opt -disable-output -debug-pass-manager \
100 ; RUN:     -passes='function(function(no-op-function)' %s 2>&1 \
101 ; RUN:     | FileCheck %s --check-prefix=CHECK-UNBALANCED8
102 ; CHECK-UNBALANCED8: invalid pipeline 'function(function(no-op-function)'
104 ; RUN: not opt -disable-output -debug-pass-manager \
105 ; RUN:     -passes='no-op-module,)' %s 2>&1 \
106 ; RUN:     | FileCheck %s --check-prefix=CHECK-UNBALANCED9
107 ; CHECK-UNBALANCED9: invalid pipeline 'no-op-module,)'
109 ; RUN: not opt -disable-output -debug-pass-manager \
110 ; RUN:     -passes='no-op-function,)' %s 2>&1 \
111 ; RUN:     | FileCheck %s --check-prefix=CHECK-UNBALANCED10
112 ; CHECK-UNBALANCED10: invalid pipeline 'no-op-function,)'
114 ; RUN: opt -disable-output -debug-pass-manager \
115 ; RUN:     -passes=no-op-cgscc,no-op-cgscc %s 2>&1 \
116 ; RUN:     | FileCheck %s --check-prefix=CHECK-TWO-NOOP-CG
117 ; CHECK-TWO-NOOP-CG: Running pass: NoOpCGSCCPass
118 ; CHECK-TWO-NOOP-CG: Running pass: NoOpCGSCCPass
120 ; RUN: opt -disable-output -debug-pass-manager \
121 ; RUN:     -passes='module(function(no-op-function),cgscc(no-op-cgscc,function(no-op-function),no-op-cgscc),function(no-op-function))' %s 2>&1 \
122 ; RUN:     | FileCheck %s --check-prefix=CHECK-NESTED-MP-CG-FP
123 ; CHECK-NESTED-MP-CG-FP: Running pass: NoOpFunctionPass
124 ; CHECK-NESTED-MP-CG-FP: Running pass: NoOpCGSCCPass
125 ; CHECK-NESTED-MP-CG-FP: Running pass: NoOpFunctionPass
126 ; CHECK-NESTED-MP-CG-FP: Running pass: NoOpCGSCCPass
127 ; CHECK-NESTED-MP-CG-FP: Running pass: NoOpFunctionPass
129 ; RUN: opt -disable-output -debug-pass-manager \
130 ; RUN:     -passes='no-op-loop,no-op-loop' %s 2>&1 \
131 ; RUN:     | FileCheck %s --check-prefix=CHECK-TWO-NOOP-LOOP
132 ; CHECK-TWO-NOOP-LOOP: Running pass: NoOpLoopPass
133 ; CHECK-TWO-NOOP-LOOP: Running pass: NoOpLoopPass
135 ; RUN: opt -disable-output -debug-pass-manager \
136 ; RUN:     -passes='module(function(loop(no-op-loop)))' %s 2>&1 \
137 ; RUN:     | FileCheck %s --check-prefix=CHECK-NESTED-FP-LP
138 ; RUN: opt -disable-output -debug-pass-manager \
139 ; RUN:     -passes='function(loop(no-op-loop))' %s 2>&1 \
140 ; RUN:     | FileCheck %s --check-prefix=CHECK-NESTED-FP-LP
141 ; RUN: opt -disable-output -debug-pass-manager \
142 ; RUN:     -passes='loop(no-op-loop)' %s 2>&1 \
143 ; RUN:     | FileCheck %s --check-prefix=CHECK-NESTED-FP-LP
144 ; RUN: opt -disable-output -debug-pass-manager \
145 ; RUN:     -passes='no-op-loop' %s 2>&1 \
146 ; RUN:     | FileCheck %s --check-prefix=CHECK-NESTED-FP-LP
147 ; CHECK-NESTED-FP-LP: Running pass: NoOpLoopPass
149 ; RUN: opt -disable-output -debug-pass-manager=verbose \
150 ; RUN:     -passes='module(no-op-function,no-op-loop,no-op-cgscc,cgscc(no-op-function,no-op-loop),function(no-op-loop))' %s 2>&1 \
151 ; RUN:     | FileCheck %s --check-prefix=CHECK-ADAPTORS
152 ; CHECK-ADAPTORS: Running pass: ModuleToFunctionPassAdaptor
153 ; CHECK-ADAPTORS: Running pass: NoOpFunctionPass
154 ; CHECK-ADAPTORS: Running pass: ModuleToFunctionPassAdaptor
155 ; CHECK-ADAPTORS: Running pass: FunctionToLoopPassAdaptor
156 ; CHECK-ADAPTORS: Running pass: NoOpLoopPass on loop
157 ; CHECK-ADAPTORS: Running pass: ModuleToPostOrderCGSCCPassAdaptor
158 ; CHECK-ADAPTORS: Running pass: NoOpCGSCCPass
159 ; CHECK-ADAPTORS: Running pass: ModuleToPostOrderCGSCCPassAdaptor
160 ; CHECK-ADAPTORS: Running pass: PassManager{{.*}}SCC
161 ; CHECK-ADAPTORS: Running pass: CGSCCToFunctionPassAdaptor
162 ; CHECK-ADAPTORS: Running pass: NoOpFunctionPass
163 ; CHECK-ADAPTORS: Running pass: CGSCCToFunctionPassAdaptor
164 ; CHECK-ADAPTORS: Running pass: FunctionToLoopPassAdaptor
165 ; CHECK-ADAPTORS: Running pass: NoOpLoopPass on loop
166 ; CHECK-ADAPTORS: Running pass: ModuleToFunctionPassAdaptor
167 ; CHECK-ADAPTORS: Running pass: PassManager{{.*}}Function
168 ; CHECK-ADAPTORS: Running pass: FunctionToLoopPassAdaptor
169 ; CHECK-ADAPTORS: Running pass: NoOpLoopPass on loop
171 ; RUN: opt -disable-output -debug-pass-manager \
172 ; RUN:     -passes='module(function(no-op-function,loop(no-op-loop,no-op-loop)))' %s 2>&1 \
173 ; RUN:     | FileCheck %s --check-prefix=CHECK-MANAGERS-NO-VERBOSE
174 ; RUN: opt -disable-output -debug-pass-manager=verbose \
175 ; RUN:     -passes='module(function(no-op-function,loop(no-op-loop,no-op-loop)))' %s 2>&1 \
176 ; RUN:     | FileCheck %s --check-prefix=CHECK-MANAGERS
177 ; CHECK-MANAGERS: Running pass: PassManager{{.*}}Function
178 ; CHECK-MANAGERS: Running pass: PassManager{{.*}}Loop
179 ; CHECK-MANAGERS-NO-VERBOSE-NOT: PassManager
181 ; RUN: opt -disable-output -debug-pass-manager \
182 ; RUN:     -passes='cgscc(print)' %s 2>&1 \
183 ; RUN:     | FileCheck %s --check-prefix=CHECK-PRINT-IN-CGSCC
184 ; CHECK-PRINT-IN-CGSCC: Running pass: PrintFunctionPass
185 ; CHECK-PRINT-IN-CGSCC: Running pass: VerifierPass
187 ; RUN: not opt -disable-output -debug-pass-manager \
188 ; RUN:     -passes='function(no-op-function)function(no-op-function)' %s 2>&1 \
189 ; RUN:     | FileCheck %s --check-prefix=CHECK-MISSING-COMMA1
190 ; CHECK-MISSING-COMMA1: invalid pipeline 'function(no-op-function)function(no-op-function)'
192 ; RUN: not opt -disable-output -debug-pass-manager \
193 ; RUN:     -passes='function()' %s 2>&1 \
194 ; RUN:     | FileCheck %s --check-prefix=CHECK-EMPTY-INNER-PIPELINE
195 ; CHECK-EMPTY-INNER-PIPELINE: unknown function pass ''
197 ; RUN: not opt -disable-output -debug-pass-manager \
198 ; RUN:     -passes='no-op-module(no-op-module,whatever)' %s 2>&1 \
199 ; RUN:     | FileCheck %s --check-prefix=CHECK-PIPELINE-ON-MODULE-PASS
200 ; CHECK-PIPELINE-ON-MODULE-PASS: invalid use of 'no-op-module' pass as module pipeline
202 ; RUN: not opt -disable-output -debug-pass-manager \
203 ; RUN:     -passes='no-op-cgscc(no-op-cgscc,whatever)' %s 2>&1 \
204 ; RUN:     | FileCheck %s --check-prefix=CHECK-PIPELINE-ON-CGSCC-PASS
205 ; CHECK-PIPELINE-ON-CGSCC-PASS: invalid use of 'no-op-cgscc' pass as cgscc pipeline
207 ; RUN: not opt -disable-output -debug-pass-manager \
208 ; RUN:     -passes='no-op-function(no-op-function,whatever)' %s 2>&1 \
209 ; RUN:     | FileCheck %s --check-prefix=CHECK-PIPELINE-ON-FUNCTION-PASS
210 ; CHECK-PIPELINE-ON-FUNCTION-PASS: invalid use of 'no-op-function' pass as function pipeline
212 ; RUN: not opt -disable-output -debug-pass-manager \
213 ; RUN:     -passes='no-op-loop(no-op-loop,whatever)' %s 2>&1 \
214 ; RUN:     | FileCheck %s --check-prefix=CHECK-PIPELINE-ON-LOOP-PASS
215 ; CHECK-PIPELINE-ON-LOOP-PASS: invalid use of 'no-op-loop' pass as loop pipeline
217 ; RUN: not opt -disable-output -debug-pass-manager \
218 ; RUN:     -passes='no-op-function()' %s 2>&1 \
219 ; RUN:     | FileCheck %s --check-prefix=CHECK-EMPTY-PIPELINE-ON-PASS
220 ; CHECK-EMPTY-PIPELINE-ON-PASS: invalid use of 'no-op-function' pass as function pipeline
222 ; RUN: not opt -passes='no-op-module,bad' \
223 ; RUN:       /dev/null -disable-output 2>&1 | FileCheck %s -check-prefix=CHECK-UNKNOWN-MODULE
224 ; CHECK-UNKNOWN-MODULE: unknown module pass 'bad'
226 ; RUN: not opt -passes='no-op-loop,bad' \
227 ; RUN:       /dev/null -disable-output 2>&1 | FileCheck %s -check-prefix=CHECK-UNKNOWN-LOOP
228 ; CHECK-UNKNOWN-LOOP: unknown loop pass 'bad'
230 ; RUN: not opt -passes='no-op-cgscc,bad' \
231 ; RUN:       /dev/null -disable-output 2>&1 | FileCheck %s -check-prefix=CHECK-UNKNOWN-CGSCC
232 ; CHECK-UNKNOWN-CGSCC: unknown cgscc pass 'bad'
234 ; RUN: not opt -passes='no-op-function,bad' \
235 ; RUN:       /dev/null -disable-output 2>&1 | FileCheck %s -check-prefix=CHECK-UNKNOWN-FUNCTION
236 ; RUN: not opt -passes='function(bad,pipeline,text)' \
237 ; RUN:       /dev/null -disable-output 2>&1 | FileCheck %s -check-prefix=CHECK-UNKNOWN-FUNCTION
238 ; RUN: not opt -passes='module(no-op-module,function(bad,pipeline,text))' \
239 ; RUN:       /dev/null -disable-output 2>&1 | FileCheck %s -check-prefix=CHECK-UNKNOWN-FUNCTION
240 ; RUN: not opt -passes='no-op-module,function(bad,pipeline,text)' \
241 ; RUN:       /dev/null -disable-output 2>&1 | FileCheck %s -check-prefix=CHECK-UNKNOWN-FUNCTION
242 ; RUN: not opt -passes='module(cgscc(function(bad,pipeline,text)))' \
243 ; RUN:       /dev/null -disable-output 2>&1 | FileCheck %s -check-prefix=CHECK-UNKNOWN-FUNCTION
244 ; CHECK-UNKNOWN-FUNCTION: unknown function pass 'bad'
246 ; RUN: not opt -aa-pipeline=bad -passes=no-op-function \
247 ; RUN:       /dev/null -disable-output 2>&1 | FileCheck %s -check-prefix=AA-PIPELINE-ERR
248 ; AA-PIPELINE-ERR: unknown alias analysis name 'bad'
249 ; RUN: opt -passes-ep-peephole=bad -passes=no-op-function \
250 ; RUN:       /dev/null -disable-output 2>&1 | FileCheck %s -check-prefix=PASSES-EP-PEEPHOLE-ERR
251 ; PASSES-EP-PEEPHOLE-ERR: Could not parse -passes-ep-peephole pipeline: unknown function pass 'bad'
252 ; RUN: opt -passes-ep-late-loop-optimizations=bad -passes=no-op-function \
253 ; RUN:       /dev/null -disable-output 2>&1 | FileCheck %s -check-prefix=PASSES-EP-LATELOOPOPT-ERR
254 ; PASSES-EP-LATELOOPOPT-ERR: Could not parse -passes-ep-late-loop-optimizations pipeline: unknown loop pass 'bad'
255 ; RUN: opt -passes-ep-loop-optimizer-end=bad -passes=no-op-function \
256 ; RUN:       /dev/null -disable-output 2>&1 | FileCheck %s -check-prefix=PASSES-EP-LOOPOPTEND-ERR
257 ; PASSES-EP-LOOPOPTEND-ERR: Could not parse -passes-ep-loop-optimizer-end pipeline: unknown loop pass 'bad'
258 ; RUN: opt -passes-ep-scalar-optimizer-late=bad -passes=no-op-function \
259 ; RUN:       /dev/null -disable-output 2>&1 | FileCheck %s -check-prefix=PASSES-EP-SCALAROPTLATE-ERR
260 ; PASSES-EP-SCALAROPTLATE-ERR: Could not parse -passes-ep-scalar-optimizer-late pipeline: unknown function pass 'bad'
261 ; RUN: opt -passes-ep-cgscc-optimizer-late=bad -passes=no-op-function \
262 ; RUN:       /dev/null -disable-output 2>&1 | FileCheck %s -check-prefix=PASSES-EP-CGSCCOPTLATE-ERR
263 ; PASSES-EP-CGSCCOPTLATE-ERR: Could not parse -passes-ep-cgscc-optimizer-late pipeline: unknown cgscc pass 'bad'
264 ; RUN: opt -passes-ep-vectorizer-start=bad -passes=no-op-function \
265 ; RUN:       /dev/null -disable-output 2>&1 | FileCheck %s -check-prefix=PASSES-EP-VECTORIZERSTART-ERR
266 ; PASSES-EP-VECTORIZERSTART-ERR: Could not parse -passes-ep-vectorizer-start pipeline: unknown function pass 'bad'
267 ; RUN: opt -passes-ep-pipeline-start=bad -passes=no-op-function \
268 ; RUN:       /dev/null -disable-output 2>&1 | FileCheck %s -check-prefix=PASSES-EP-PIPELINESTART-ERR
269 ; PASSES-EP-PIPELINESTART-ERR: Could not parse -passes-ep-pipeline-start pipeline: unknown pass name 'bad'
270 ; RUN: opt -passes-ep-pipeline-early-simplification=bad -passes=no-op-function \
271 ; RUN:       /dev/null -disable-output 2>&1 | FileCheck %s -check-prefix=PASSES-EP-PIPELINEEARLYSIMPLIFICATION-ERR
272 ; PASSES-EP-PIPELINEEARLYSIMPLIFICATION-ERR: Could not parse -passes-ep-pipeline-early-simplification pipeline: unknown pass name 'bad'
274 define void @f() {
275 entry:
276  br label %loop
277 loop:
278  br label %loop