[ThinLTO] Add code comment. NFC
[llvm-complete.git] / test / Other / pass-pipeline-parsing.ll
blob2e8bc7c87302563549eae2099a8f2b6a47d2c85d
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: Starting llvm::Module pass manager run
5 ; CHECK-TWO-NOOP-MP: Running pass: NoOpModulePass
6 ; CHECK-TWO-NOOP-MP: Running pass: NoOpModulePass
7 ; CHECK-TWO-NOOP-MP: Finished llvm::Module pass manager run
9 ; RUN: opt -disable-output -debug-pass-manager \
10 ; RUN:     -passes='module(no-op-module,no-op-module)' %s 2>&1 \
11 ; RUN:     | FileCheck %s --check-prefix=CHECK-NESTED-TWO-NOOP-MP
12 ; CHECK-NESTED-TWO-NOOP-MP: Starting llvm::Module pass manager run
13 ; CHECK-NESTED-TWO-NOOP-MP: Starting llvm::Module pass manager run
14 ; CHECK-NESTED-TWO-NOOP-MP: Running pass: NoOpModulePass
15 ; CHECK-NESTED-TWO-NOOP-MP: Running pass: NoOpModulePass
16 ; CHECK-NESTED-TWO-NOOP-MP: Finished llvm::Module pass manager run
17 ; CHECK-NESTED-TWO-NOOP-MP: Finished llvm::Module pass manager run
19 ; RUN: opt -disable-output -debug-pass-manager \
20 ; RUN:     -passes=no-op-function,no-op-function %s 2>&1 \
21 ; RUN:     | FileCheck %s --check-prefix=CHECK-TWO-NOOP-FP
22 ; CHECK-TWO-NOOP-FP: Starting llvm::Module pass manager run
23 ; CHECK-TWO-NOOP-FP: Running pass: ModuleToFunctionPassAdaptor
24 ; CHECK-TWO-NOOP-FP: Starting llvm::Function pass manager run
25 ; CHECK-TWO-NOOP-FP: Running pass: NoOpFunctionPass
26 ; CHECK-TWO-NOOP-FP: Running pass: NoOpFunctionPass
27 ; CHECK-TWO-NOOP-FP: Finished llvm::Function pass manager run
28 ; CHECK-TWO-NOOP-FP: Finished llvm::Module pass manager run
30 ; RUN: opt -disable-output -debug-pass-manager \
31 ; RUN:     -passes='function(no-op-function,no-op-function)' %s 2>&1 \
32 ; RUN:     | FileCheck %s --check-prefix=CHECK-NESTED-TWO-NOOP-FP
33 ; CHECK-NESTED-TWO-NOOP-FP: Starting llvm::Module pass manager run
34 ; CHECK-NESTED-TWO-NOOP-FP: Running pass: ModuleToFunctionPassAdaptor
35 ; CHECK-NESTED-TWO-NOOP-FP: Starting llvm::Function pass manager run
36 ; CHECK-NESTED-TWO-NOOP-FP: Running pass: NoOpFunctionPass
37 ; CHECK-NESTED-TWO-NOOP-FP: Running pass: NoOpFunctionPass
38 ; CHECK-NESTED-TWO-NOOP-FP: Finished llvm::Function pass manager run
39 ; CHECK-NESTED-TWO-NOOP-FP: Finished llvm::Module pass manager run
41 ; RUN: opt -disable-output -debug-pass-manager \
42 ; RUN:     -passes='no-op-module,function(no-op-function,no-op-function),no-op-module' %s 2>&1 \
43 ; RUN:     | FileCheck %s --check-prefix=CHECK-MIXED-FP-AND-MP
44 ; CHECK-MIXED-FP-AND-MP: Starting llvm::Module pass manager run
45 ; CHECK-MIXED-FP-AND-MP: Running pass: NoOpModulePass
46 ; CHECK-MIXED-FP-AND-MP: Running pass: ModuleToFunctionPassAdaptor
47 ; CHECK-MIXED-FP-AND-MP: Starting llvm::Function pass manager run
48 ; CHECK-MIXED-FP-AND-MP: Running pass: NoOpFunctionPass
49 ; CHECK-MIXED-FP-AND-MP: Running pass: NoOpFunctionPass
50 ; CHECK-MIXED-FP-AND-MP: Finished llvm::Function pass manager run
51 ; CHECK-MIXED-FP-AND-MP: Running pass: NoOpModulePass
52 ; CHECK-MIXED-FP-AND-MP: Finished llvm::Module pass manager run
54 ; RUN: not opt -disable-output -debug-pass-manager \
55 ; RUN:     -passes='no-op-module)' %s 2>&1 \
56 ; RUN:     | FileCheck %s --check-prefix=CHECK-UNBALANCED1
57 ; CHECK-UNBALANCED1: invalid pipeline 'no-op-module)'
59 ; RUN: not opt -disable-output -debug-pass-manager \
60 ; RUN:     -passes='module(no-op-module))' %s 2>&1 \
61 ; RUN:     | FileCheck %s --check-prefix=CHECK-UNBALANCED2
62 ; CHECK-UNBALANCED2: invalid pipeline 'module(no-op-module))'
64 ; RUN: not opt -disable-output -debug-pass-manager \
65 ; RUN:     -passes='module(no-op-module' %s 2>&1 \
66 ; RUN:     | FileCheck %s --check-prefix=CHECK-UNBALANCED3
67 ; CHECK-UNBALANCED3: invalid pipeline 'module(no-op-module'
69 ; RUN: not opt -disable-output -debug-pass-manager \
70 ; RUN:     -passes='no-op-function)' %s 2>&1 \
71 ; RUN:     | FileCheck %s --check-prefix=CHECK-UNBALANCED4
72 ; CHECK-UNBALANCED4: invalid pipeline 'no-op-function)'
74 ; RUN: not opt -disable-output -debug-pass-manager \
75 ; RUN:     -passes='function(no-op-function))' %s 2>&1 \
76 ; RUN:     | FileCheck %s --check-prefix=CHECK-UNBALANCED5
77 ; CHECK-UNBALANCED5: invalid pipeline 'function(no-op-function))'
79 ; RUN: not opt -disable-output -debug-pass-manager \
80 ; RUN:     -passes='function(function(no-op-function)))' %s 2>&1 \
81 ; RUN:     | FileCheck %s --check-prefix=CHECK-UNBALANCED6
82 ; CHECK-UNBALANCED6: invalid pipeline 'function(function(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-UNBALANCED7
87 ; CHECK-UNBALANCED7: 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-UNBALANCED8
92 ; CHECK-UNBALANCED8: invalid pipeline 'function(function(no-op-function)'
94 ; RUN: not opt -disable-output -debug-pass-manager \
95 ; RUN:     -passes='no-op-module,)' %s 2>&1 \
96 ; RUN:     | FileCheck %s --check-prefix=CHECK-UNBALANCED9
97 ; CHECK-UNBALANCED9: invalid pipeline 'no-op-module,)'
99 ; RUN: not opt -disable-output -debug-pass-manager \
100 ; RUN:     -passes='no-op-function,)' %s 2>&1 \
101 ; RUN:     | FileCheck %s --check-prefix=CHECK-UNBALANCED10
102 ; CHECK-UNBALANCED10: invalid pipeline 'no-op-function,)'
104 ; RUN: opt -disable-output -debug-pass-manager \
105 ; RUN:     -passes=no-op-cgscc,no-op-cgscc %s 2>&1 \
106 ; RUN:     | FileCheck %s --check-prefix=CHECK-TWO-NOOP-CG
107 ; CHECK-TWO-NOOP-CG: Starting llvm::Module pass manager run
108 ; CHECK-TWO-NOOP-CG: Running pass: ModuleToPostOrderCGSCCPassAdaptor
109 ; CHECK-TWO-NOOP-CG: Starting CGSCC pass manager run
110 ; CHECK-TWO-NOOP-CG: Running pass: NoOpCGSCCPass
111 ; CHECK-TWO-NOOP-CG: Running pass: NoOpCGSCCPass
112 ; CHECK-TWO-NOOP-CG: Finished CGSCC pass manager run
113 ; CHECK-TWO-NOOP-CG: Finished llvm::Module pass manager run
115 ; RUN: opt -disable-output -debug-pass-manager \
116 ; 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 \
117 ; RUN:     | FileCheck %s --check-prefix=CHECK-NESTED-MP-CG-FP
118 ; CHECK-NESTED-MP-CG-FP: Starting llvm::Module pass manager run
119 ; CHECK-NESTED-MP-CG-FP: Starting llvm::Module pass manager run
120 ; CHECK-NESTED-MP-CG-FP: Running pass: ModuleToFunctionPassAdaptor
121 ; CHECK-NESTED-MP-CG-FP: Starting llvm::Function pass manager run
122 ; CHECK-NESTED-MP-CG-FP: Running pass: NoOpFunctionPass
123 ; CHECK-NESTED-MP-CG-FP: Finished llvm::Function pass manager run
124 ; CHECK-NESTED-MP-CG-FP: Running pass: ModuleToPostOrderCGSCCPassAdaptor
125 ; CHECK-NESTED-MP-CG-FP: Starting CGSCC pass manager run
126 ; CHECK-NESTED-MP-CG-FP: Running pass: NoOpCGSCCPass
127 ; CHECK-NESTED-MP-CG-FP: Running pass: CGSCCToFunctionPassAdaptor
128 ; CHECK-NESTED-MP-CG-FP: Starting llvm::Function pass manager run
129 ; CHECK-NESTED-MP-CG-FP: Running pass: NoOpFunctionPass
130 ; CHECK-NESTED-MP-CG-FP: Finished llvm::Function pass manager run
131 ; CHECK-NESTED-MP-CG-FP: Running pass: NoOpCGSCCPass
132 ; CHECK-NESTED-MP-CG-FP: Finished CGSCC pass manager run
133 ; CHECK-NESTED-MP-CG-FP: Running pass: ModuleToFunctionPassAdaptor
134 ; CHECK-NESTED-MP-CG-FP: Starting llvm::Function pass manager run
135 ; CHECK-NESTED-MP-CG-FP: Running pass: NoOpFunctionPass
136 ; CHECK-NESTED-MP-CG-FP: Finished llvm::Function pass manager run
137 ; CHECK-NESTED-MP-CG-FP: Finished llvm::Module pass manager run
138 ; CHECK-NESTED-MP-CG-FP: Finished llvm::Module pass manager run
140 ; RUN: opt -disable-output -debug-pass-manager \
141 ; RUN:     -passes='no-op-loop,no-op-loop' %s 2>&1 \
142 ; RUN:     | FileCheck %s --check-prefix=CHECK-TWO-NOOP-LOOP
143 ; CHECK-TWO-NOOP-LOOP: Starting llvm::Module pass manager run
144 ; CHECK-TWO-NOOP-LOOP: Running pass: ModuleToFunctionPassAdaptor
145 ; CHECK-TWO-NOOP-LOOP: Starting llvm::Function pass manager run
146 ; CHECK-TWO-NOOP-LOOP: Running pass: FunctionToLoopPassAdaptor
147 ; CHECK-TWO-NOOP-LOOP: Starting Loop pass manager run
148 ; CHECK-TWO-NOOP-LOOP: Running pass: NoOpLoopPass
149 ; CHECK-TWO-NOOP-LOOP: Running pass: NoOpLoopPass
150 ; CHECK-TWO-NOOP-LOOP: Finished Loop pass manager run
151 ; CHECK-TWO-NOOP-LOOP: Finished llvm::Function pass manager run
152 ; CHECK-TWO-NOOP-LOOP: Finished llvm::Module pass manager run
154 ; RUN: opt -disable-output -debug-pass-manager \
155 ; RUN:     -passes='module(function(loop(no-op-loop)))' %s 2>&1 \
156 ; RUN:     | FileCheck %s --check-prefix=CHECK-NESTED-FP-LP
157 ; RUN: opt -disable-output -debug-pass-manager \
158 ; RUN:     -passes='function(loop(no-op-loop))' %s 2>&1 \
159 ; RUN:     | FileCheck %s --check-prefix=CHECK-NESTED-FP-LP
160 ; RUN: opt -disable-output -debug-pass-manager \
161 ; RUN:     -passes='loop(no-op-loop)' %s 2>&1 \
162 ; RUN:     | FileCheck %s --check-prefix=CHECK-NESTED-FP-LP
163 ; RUN: opt -disable-output -debug-pass-manager \
164 ; RUN:     -passes='no-op-loop' %s 2>&1 \
165 ; RUN:     | FileCheck %s --check-prefix=CHECK-NESTED-FP-LP
166 ; CHECK-NESTED-FP-LP: Starting llvm::Module pass manager run
167 ; CHECK-NESTED-FP-LP: Running pass: ModuleToFunctionPassAdaptor
168 ; CHECK-NESTED-FP-LP: Starting llvm::Function pass manager run
169 ; CHECK-NESTED-FP-LP: Running pass: FunctionToLoopPassAdaptor
170 ; CHECK-NESTED-FP-LP: Starting Loop pass manager run
171 ; CHECK-NESTED-FP-LP: Running pass: NoOpLoopPass
172 ; CHECK-NESTED-FP-LP: Finished Loop pass manager run
173 ; CHECK-NESTED-FP-LP: Finished llvm::Function pass manager run
174 ; CHECK-NESTED-FP-LP: Finished llvm::Module pass manager run
176 ; RUN: not opt -disable-output -debug-pass-manager \
177 ; RUN:     -passes='function(no-op-function)function(no-op-function)' %s 2>&1 \
178 ; RUN:     | FileCheck %s --check-prefix=CHECK-MISSING-COMMA1
179 ; CHECK-MISSING-COMMA1: invalid pipeline 'function(no-op-function)function(no-op-function)'
181 ; RUN: not opt -disable-output -debug-pass-manager \
182 ; RUN:     -passes='function()' %s 2>&1 \
183 ; RUN:     | FileCheck %s --check-prefix=CHECK-EMPTY-INNER-PIPELINE
184 ; CHECK-EMPTY-INNER-PIPELINE: unknown function pass ''
186 ; RUN: not opt -disable-output -debug-pass-manager \
187 ; RUN:     -passes='no-op-module(no-op-module,whatever)' %s 2>&1 \
188 ; RUN:     | FileCheck %s --check-prefix=CHECK-PIPELINE-ON-MODULE-PASS
189 ; CHECK-PIPELINE-ON-MODULE-PASS: invalid use of 'no-op-module' pass as module pipeline
191 ; RUN: not opt -disable-output -debug-pass-manager \
192 ; RUN:     -passes='no-op-cgscc(no-op-cgscc,whatever)' %s 2>&1 \
193 ; RUN:     | FileCheck %s --check-prefix=CHECK-PIPELINE-ON-CGSCC-PASS
194 ; CHECK-PIPELINE-ON-CGSCC-PASS: invalid use of 'no-op-cgscc' pass as cgscc pipeline
196 ; RUN: not opt -disable-output -debug-pass-manager \
197 ; RUN:     -passes='no-op-function(no-op-function,whatever)' %s 2>&1 \
198 ; RUN:     | FileCheck %s --check-prefix=CHECK-PIPELINE-ON-FUNCTION-PASS
199 ; CHECK-PIPELINE-ON-FUNCTION-PASS: invalid use of 'no-op-function' pass as function pipeline
201 ; RUN: not opt -disable-output -debug-pass-manager \
202 ; RUN:     -passes='no-op-loop(no-op-loop,whatever)' %s 2>&1 \
203 ; RUN:     | FileCheck %s --check-prefix=CHECK-PIPELINE-ON-LOOP-PASS
204 ; CHECK-PIPELINE-ON-LOOP-PASS: invalid use of 'no-op-loop' pass as loop pipeline
206 ; RUN: not opt -disable-output -debug-pass-manager \
207 ; RUN:     -passes='no-op-function()' %s 2>&1 \
208 ; RUN:     | FileCheck %s --check-prefix=CHECK-EMPTY-PIPELINE-ON-PASS
209 ; CHECK-EMPTY-PIPELINE-ON-PASS: invalid use of 'no-op-function' pass as function pipeline
211 ; RUN: not opt -passes='no-op-module,bad' \
212 ; RUN:       /dev/null -disable-output 2>&1 | FileCheck %s -check-prefix=CHECK-UNKNOWN-MODULE
213 ; CHECK-UNKNOWN-MODULE: unknown module pass 'bad'
215 ; RUN: not opt -passes='no-op-loop,bad' \
216 ; RUN:       /dev/null -disable-output 2>&1 | FileCheck %s -check-prefix=CHECK-UNKNOWN-LOOP
217 ; CHECK-UNKNOWN-LOOP: unknown loop pass 'bad'
219 ; RUN: not opt -passes='no-op-cgscc,bad' \
220 ; RUN:       /dev/null -disable-output 2>&1 | FileCheck %s -check-prefix=CHECK-UNKNOWN-CGSCC
221 ; CHECK-UNKNOWN-CGSCC: unknown cgscc pass 'bad'
223 ; RUN: not opt -passes='no-op-function,bad' \
224 ; RUN:       /dev/null -disable-output 2>&1 | FileCheck %s -check-prefix=CHECK-UNKNOWN-FUNCTION
225 ; RUN: not opt -passes='function(bad,pipeline,text)' \
226 ; RUN:       /dev/null -disable-output 2>&1 | FileCheck %s -check-prefix=CHECK-UNKNOWN-FUNCTION
227 ; RUN: not opt -passes='module(no-op-module,function(bad,pipeline,text))' \
228 ; RUN:       /dev/null -disable-output 2>&1 | FileCheck %s -check-prefix=CHECK-UNKNOWN-FUNCTION
229 ; RUN: not opt -passes='no-op-module,function(bad,pipeline,text)' \
230 ; RUN:       /dev/null -disable-output 2>&1 | FileCheck %s -check-prefix=CHECK-UNKNOWN-FUNCTION
231 ; RUN: not opt -passes='module(cgscc(function(bad,pipeline,text)))' \
232 ; RUN:       /dev/null -disable-output 2>&1 | FileCheck %s -check-prefix=CHECK-UNKNOWN-FUNCTION
233 ; CHECK-UNKNOWN-FUNCTION: unknown function pass 'bad'
235 ; RUN: not opt -aa-pipeline=bad -passes=no-op-function \
236 ; RUN:       /dev/null -disable-output 2>&1 | FileCheck %s -check-prefix=AA-PIPELINE-ERR
237 ; AA-PIPELINE-ERR: unknown alias analysis name 'bad'
238 ; RUN: opt -passes-ep-peephole=bad -passes=no-op-function \
239 ; RUN:       /dev/null -disable-output 2>&1 | FileCheck %s -check-prefix=PASSES-EP-PEEPHOLE-ERR
240 ; PASSES-EP-PEEPHOLE-ERR: Could not parse -passes-ep-peephole pipeline: unknown function pass 'bad'
241 ; RUN: opt -passes-ep-late-loop-optimizations=bad -passes=no-op-function \
242 ; RUN:       /dev/null -disable-output 2>&1 | FileCheck %s -check-prefix=PASSES-EP-LATELOOPOPT-ERR
243 ; PASSES-EP-LATELOOPOPT-ERR: Could not parse -passes-ep-late-loop-optimizations pipeline: unknown loop pass 'bad'
244 ; RUN: opt -passes-ep-loop-optimizer-end=bad -passes=no-op-function \
245 ; RUN:       /dev/null -disable-output 2>&1 | FileCheck %s -check-prefix=PASSES-EP-LOOPOPTEND-ERR
246 ; PASSES-EP-LOOPOPTEND-ERR: Could not parse -passes-ep-loop-optimizer-end pipeline: unknown loop pass 'bad'
247 ; RUN: opt -passes-ep-scalar-optimizer-late=bad -passes=no-op-function \
248 ; RUN:       /dev/null -disable-output 2>&1 | FileCheck %s -check-prefix=PASSES-EP-SCALAROPTLATE-ERR
249 ; PASSES-EP-SCALAROPTLATE-ERR: Could not parse -passes-ep-scalar-optimizer-late pipeline: unknown function pass 'bad'
250 ; RUN: opt -passes-ep-cgscc-optimizer-late=bad -passes=no-op-function \
251 ; RUN:       /dev/null -disable-output 2>&1 | FileCheck %s -check-prefix=PASSES-EP-CGSCCOPTLATE-ERR
252 ; PASSES-EP-CGSCCOPTLATE-ERR: Could not parse -passes-ep-cgscc-optimizer-late pipeline: unknown cgscc pass 'bad'
253 ; RUN: opt -passes-ep-vectorizer-start=bad -passes=no-op-function \
254 ; RUN:       /dev/null -disable-output 2>&1 | FileCheck %s -check-prefix=PASSES-EP-VECTORIZERSTART-ERR
255 ; PASSES-EP-VECTORIZERSTART-ERR: Could not parse -passes-ep-vectorizer-start pipeline: unknown function pass 'bad'
256 ; RUN: opt -passes-ep-pipeline-start=bad -passes=no-op-function \
257 ; RUN:       /dev/null -disable-output 2>&1 | FileCheck %s -check-prefix=PASSES-EP-PIPELINESTART-ERR
258 ; PASSES-EP-PIPELINESTART-ERR: Could not parse -passes-ep-pipeline-start pipeline: unknown pass name 'bad'
260 define void @f() {
261 entry:
262  br label %loop
263 loop:
264  br label %loop