[ThinLTO] Add code comment. NFC
[llvm-complete.git] / test / Other / loop-pm-invalidation.ll
blob20acb3573531e9b864042ad361071f97f973e24a
1 ; Test that the loop PM infrastructure is invalidated appropriately.
3 ; Check that we always nuke the LPM stuff when the loops themselves are
4 ; invalidated.
5 ; RUN: opt -disable-output -disable-verify -debug-pass-manager %s 2>&1 \
6 ; RUN:     -passes='loop(no-op-loop),invalidate<loops>,loop(no-op-loop)' \
7 ; RUN:     | FileCheck %s --check-prefix=CHECK-LOOP-INV
9 ; If we ended up building the standard analyses, their invalidation should nuke
10 ; stuff as well.
11 ; RUN: opt -disable-output -disable-verify -debug-pass-manager %s 2>&1 \
12 ; RUN:     -passes='loop(no-op-loop),invalidate<scalar-evolution>,loop(no-op-loop)' \
13 ; RUN:     | FileCheck %s --check-prefix=CHECK-SCEV-INV
15 ; Also provide a test that can delete loops after populating analyses for them.
16 ; RUN: opt -disable-output -disable-verify -debug-pass-manager %s 2>&1 \
17 ; RUN:     -passes='loop(no-op-loop,loop-deletion),invalidate<scalar-evolution>,loop(no-op-loop)' \
18 ; RUN:     | FileCheck %s --check-prefix=CHECK-SCEV-INV-AFTER-DELETE
20 define void @no_loops() {
21 ; CHECK-LOOP-INV-LABEL: Running pass: FunctionToLoopPassAdaptor<{{.*}}> on no_loops
22 ; CHECK-LOOP-INV-NEXT: Starting {{.*}}Function pass manager run
23 ; CHECK-LOOP-INV-NEXT: Running pass: LoopSimplifyPass
24 ; CHECK-LOOP-INV-NEXT: Running analysis: LoopAnalysis
25 ; CHECK-LOOP-INV-NEXT: Running analysis: DominatorTreeAnalysis
26 ; CHECK-LOOP-INV-NEXT: Running analysis: AssumptionAnalysis
27 ; CHECK-LOOP-INV-NEXT: Running pass: LCSSAPass
28 ; CHECK-LOOP-INV-NEXT: Finished {{.*}}Function pass manager run
29 ; CHECK-LOOP-INV-NEXT: Running pass: InvalidateAnalysisPass<{{.*}}LoopAnalysis
30 ; CHECK-LOOP-INV-NEXT: Invalidating all non-preserved analyses
31 ; CHECK-LOOP-INV-NEXT: Invalidating analysis: LoopAnalysis
32 ; CHECK-LOOP-INV-NEXT: Running pass: FunctionToLoopPassAdaptor<{{.*}}> on no_loops
33 ; CHECK-LOOP-INV-NEXT: Starting {{.*}}Function pass manager run
34 ; CHECK-LOOP-INV-NEXT: Running pass: LoopSimplifyPass
35 ; CHECK-LOOP-INV-NEXT: Running analysis: LoopAnalysis
36 ; CHECK-LOOP-INV-NEXT: Running pass: LCSSAPass
37 ; CHECK-LOOP-INV-NEXT: Finished {{.*}}Function pass manager run
38 ; CHECK-LOOP-INV-NEXT: Finished {{.*}}Function pass manager run.
40 ; CHECK-SCEV-INV-LABEL: Running pass: FunctionToLoopPassAdaptor<{{.*}}> on no_loops
41 ; CHECK-SCEV-INV-NEXT: Starting {{.*}}Function pass manager run
42 ; CHECK-SCEV-INV-NEXT: Running pass: LoopSimplifyPass
43 ; CHECK-SCEV-INV-NEXT: Running analysis: LoopAnalysis
44 ; CHECK-SCEV-INV-NEXT: Running analysis: DominatorTreeAnalysis
45 ; CHECK-SCEV-INV-NEXT: Running analysis: AssumptionAnalysis
46 ; CHECK-SCEV-INV-NEXT: Running pass: LCSSAPass
47 ; CHECK-SCEV-INV-NEXT: Finished {{.*}}Function pass manager run
48 ; CHECK-SCEV-INV-NEXT: Running pass: InvalidateAnalysisPass<{{.*}}ScalarEvolutionAnalysis
49 ; CHECK-SCEV-INV-NEXT: Invalidating all non-preserved analyses
50 ; CHECK-SCEV-INV-NEXT: Running pass: FunctionToLoopPassAdaptor<{{.*}}> on no_loops
51 ; CHECK-SCEV-INV-NEXT: Starting {{.*}}Function pass manager run
52 ; CHECK-SCEV-INV-NEXT: Running pass: LoopSimplifyPass
53 ; CHECK-SCEV-INV-NEXT: Running pass: LCSSAPass
54 ; CHECK-SCEV-INV-NEXT: Finished {{.*}}Function pass manager run
55 ; CHECK-SCEV-INV-NEXT: Finished {{.*}}Function pass manager run.
57 entry:
58   ret void
61 define void @one_loop(i1* %ptr) {
62 ; CHECK-LOOP-INV-LABEL: Running pass: FunctionToLoopPassAdaptor<{{.*}}> on one_loop
63 ; CHECK-LOOP-INV-NEXT: Starting {{.*}}Function pass manager run
64 ; CHECK-LOOP-INV-NEXT: Running pass: LoopSimplifyPass
65 ; CHECK-LOOP-INV-NEXT: Running analysis: LoopAnalysis
66 ; CHECK-LOOP-INV-NEXT: Running analysis: DominatorTreeAnalysis
67 ; CHECK-LOOP-INV-NEXT: Running analysis: AssumptionAnalysis
68 ; CHECK-LOOP-INV-NEXT: Running pass: LCSSAPass
69 ; CHECK-LOOP-INV-NEXT: Finished {{.*}}Function pass manager run
70 ; CHECK-LOOP-INV-NEXT: Running analysis: AAManager
71 ; CHECK-LOOP-INV-NEXT: Running analysis: TargetLibraryAnalysis
72 ; CHECK-LOOP-INV-NEXT: Running analysis: ScalarEvolutionAnalysis
73 ; CHECK-LOOP-INV-NEXT: Running analysis: TargetIRAnalysis
74 ; CHECK-LOOP-INV-NEXT: Running analysis: InnerAnalysisManagerProxy<{{.*}}Loop
75 ; CHECK-LOOP-INV-NEXT: Starting {{.*}}Loop pass manager run.
76 ; CHECK-LOOP-INV-NEXT: Running analysis: PassInstrumentationAnalysis
77 ; CHECK-LOOP-INV-NEXT: Running pass: NoOpLoopPass
78 ; CHECK-LOOP-INV-NEXT: Finished {{.*}}Loop pass manager run.
79 ; CHECK-LOOP-INV-NEXT: Running pass: InvalidateAnalysisPass<{{.*}}LoopAnalysis
80 ; CHECK-LOOP-INV-NEXT: Invalidating all non-preserved analyses
81 ; CHECK-LOOP-INV-NEXT: Clearing all analysis results for: <possibly invalidated loop>
82 ; CHECK-LOOP-INV-NEXT: Invalidating analysis: LoopAnalysis
83 ; CHECK-LOOP-INV-NEXT: Invalidating analysis: ScalarEvolutionAnalysis
84 ; CHECK-LOOP-INV-NEXT: Invalidating analysis: InnerAnalysisManagerProxy<{{.*}}Loop
85 ; CHECK-LOOP-INV-NEXT: Running pass: FunctionToLoopPassAdaptor<{{.*}}> on one_loop
86 ; CHECK-LOOP-INV-NEXT: Starting {{.*}}Function pass manager run
87 ; CHECK-LOOP-INV-NEXT: Running pass: LoopSimplifyPass
88 ; CHECK-LOOP-INV-NEXT: Running analysis: LoopAnalysis
89 ; CHECK-LOOP-INV-NEXT: Running pass: LCSSAPass
90 ; CHECK-LOOP-INV-NEXT: Finished {{.*}}Function pass manager run
91 ; CHECK-LOOP-INV-NEXT: Running analysis: ScalarEvolutionAnalysis
92 ; CHECK-LOOP-INV-NEXT: Running analysis: InnerAnalysisManagerProxy<{{.*}}Loop
93 ; CHECK-LOOP-INV-NEXT: Starting {{.*}}Loop pass manager run.
94 ; CHECK-LOOP-INV-NEXT: Running analysis: PassInstrumentationAnalysis
95 ; CHECK-LOOP-INV-NEXT: Running pass: NoOpLoopPass
96 ; CHECK-LOOP-INV-NEXT: Finished {{.*}}Loop pass manager run.
97 ; CHECK-LOOP-INV-NEXT: Finished {{.*}}Function pass manager run.
99 ; CHECK-SCEV-INV-LABEL: Running pass: FunctionToLoopPassAdaptor<{{.*}}> on one_loop
100 ; CHECK-SCEV-INV-NEXT: Starting {{.*}}Function pass manager run
101 ; CHECK-SCEV-INV-NEXT: Running pass: LoopSimplifyPass
102 ; CHECK-SCEV-INV-NEXT: Running analysis: LoopAnalysis
103 ; CHECK-SCEV-INV-NEXT: Running analysis: DominatorTreeAnalysis
104 ; CHECK-SCEV-INV-NEXT: Running analysis: AssumptionAnalysis
105 ; CHECK-SCEV-INV-NEXT: Running pass: LCSSAPass
106 ; CHECK-SCEV-INV-NEXT: Finished {{.*}}Function pass manager run
107 ; CHECK-SCEV-INV-NEXT: Running analysis: AAManager
108 ; CHECK-SCEV-INV-NEXT: Running analysis: TargetLibraryAnalysis
109 ; CHECK-SCEV-INV-NEXT: Running analysis: ScalarEvolutionAnalysis
110 ; CHECK-SCEV-INV-NEXT: Running analysis: TargetIRAnalysis
111 ; CHECK-SCEV-INV-NEXT: Running analysis: InnerAnalysisManagerProxy<{{.*}}Loop
112 ; CHECK-SCEV-INV-NEXT: Starting {{.*}}Loop pass manager run.
113 ; CHECK-SCEV-INV-NEXT: Running analysis: PassInstrumentationAnalysis
114 ; CHECK-SCEV-INV-NEXT: Running pass: NoOpLoopPass
115 ; CHECK-SCEV-INV-NEXT: Finished {{.*}}Loop pass manager run.
116 ; CHECK-SCEV-INV-NEXT: Running pass: InvalidateAnalysisPass<{{.*}}ScalarEvolutionAnalysis
117 ; CHECK-SCEV-INV-NEXT: Invalidating all non-preserved analyses
118 ; CHECK-SCEV-INV-NEXT: Clearing all analysis results for: <possibly invalidated loop>
119 ; CHECK-SCEV-INV-NEXT: Invalidating analysis: ScalarEvolutionAnalysis
120 ; CHECK-SCEV-INV-NEXT: Invalidating analysis: InnerAnalysisManagerProxy<{{.*}}Loop
121 ; CHECK-SCEV-INV-NEXT: Running pass: FunctionToLoopPassAdaptor<{{.*}}> on one_loop
122 ; CHECK-SCEV-INV-NEXT: Starting {{.*}}Function pass manager run
123 ; CHECK-SCEV-INV-NEXT: Running pass: LoopSimplifyPass
124 ; CHECK-SCEV-INV-NEXT: Running pass: LCSSAPass
125 ; CHECK-SCEV-INV-NEXT: Finished {{.*}}Function pass manager run
126 ; CHECK-SCEV-INV-NEXT: Running analysis: ScalarEvolutionAnalysis
127 ; CHECK-SCEV-INV-NEXT: Running analysis: InnerAnalysisManagerProxy<{{.*}}Loop
128 ; CHECK-SCEV-INV-NEXT: Starting {{.*}}Loop pass manager run.
129 ; CHECK-SCEV-INV-NEXT: Running analysis: PassInstrumentationAnalysis
130 ; CHECK-SCEV-INV-NEXT: Running pass: NoOpLoopPass
131 ; CHECK-SCEV-INV-NEXT: Finished {{.*}}Loop pass manager run.
132 ; CHECK-SCEV-INV-NEXT: Finished {{.*}}Function pass manager run.
134 entry:
135   br label %l0.header
137 l0.header:
138   %flag0 = load volatile i1, i1* %ptr
139   br i1 %flag0, label %l0.header, label %exit
141 exit:
142   ret void
145 define void @nested_loops(i1* %ptr) {
146 ; CHECK-LOOP-INV-LABEL: Running pass: FunctionToLoopPassAdaptor<{{.*}}> on nested_loops
147 ; CHECK-LOOP-INV-NEXT: Starting {{.*}}Function pass manager run
148 ; CHECK-LOOP-INV-NEXT: Running pass: LoopSimplifyPass
149 ; CHECK-LOOP-INV-NEXT: Running analysis: LoopAnalysis
150 ; CHECK-LOOP-INV-NEXT: Running analysis: DominatorTreeAnalysis
151 ; CHECK-LOOP-INV-NEXT: Running analysis: AssumptionAnalysis
152 ; CHECK-LOOP-INV-NEXT: Running pass: LCSSAPass
153 ; CHECK-LOOP-INV-NEXT: Finished {{.*}}Function pass manager run
154 ; CHECK-LOOP-INV-NEXT: Running analysis: AAManager
155 ; CHECK-LOOP-INV-NEXT: Running analysis: TargetLibraryAnalysis
156 ; CHECK-LOOP-INV-NEXT: Running analysis: ScalarEvolutionAnalysis
157 ; CHECK-LOOP-INV-NEXT: Running analysis: TargetIRAnalysis
158 ; CHECK-LOOP-INV-NEXT: Running analysis: InnerAnalysisManagerProxy<{{.*}}Loop
159 ; CHECK-LOOP-INV-NEXT: Starting {{.*}}Loop pass manager run.
160 ; CHECK-LOOP-INV-NEXT: Running analysis: PassInstrumentationAnalysis
161 ; CHECK-LOOP-INV-NEXT: Running pass: NoOpLoopPass
162 ; CHECK-LOOP-INV-NEXT: Finished {{.*}}Loop pass manager run.
163 ; CHECK-LOOP-INV-NEXT: Starting {{.*}}Loop pass manager run.
164 ; CHECK-LOOP-INV-NEXT: Running analysis: PassInstrumentationAnalysis
165 ; CHECK-LOOP-INV-NEXT: Running pass: NoOpLoopPass
166 ; CHECK-LOOP-INV: Finished {{.*}}Loop pass manager run.
167 ; CHECK-LOOP-INV-NEXT: Running pass: InvalidateAnalysisPass<{{.*}}LoopAnalysis
168 ; CHECK-LOOP-INV-NEXT: Invalidating all non-preserved analyses
169 ; CHECK-LOOP-INV-NEXT: Clearing all analysis results for: <possibly invalidated loop>
170 ; CHECK-LOOP-INV-NEXT: Clearing all analysis results for: <possibly invalidated loop>
171 ; CHECK-LOOP-INV-NEXT: Invalidating analysis: LoopAnalysis
172 ; CHECK-LOOP-INV-NEXT: Invalidating analysis: ScalarEvolutionAnalysis
173 ; CHECK-LOOP-INV-NEXT: Invalidating analysis: InnerAnalysisManagerProxy<{{.*}}Loop
174 ; CHECK-LOOP-INV-NEXT: Running pass: FunctionToLoopPassAdaptor<{{.*}}> on nested_loops
175 ; CHECK-LOOP-INV-NEXT: Starting {{.*}}Function pass manager run
176 ; CHECK-LOOP-INV-NEXT: Running pass: LoopSimplifyPass
177 ; CHECK-LOOP-INV-NEXT: Running analysis: LoopAnalysis
178 ; CHECK-LOOP-INV-NEXT: Running pass: LCSSAPass
179 ; CHECK-LOOP-INV-NEXT: Finished {{.*}}Function pass manager run
180 ; CHECK-LOOP-INV-NEXT: Running analysis: ScalarEvolutionAnalysis
181 ; CHECK-LOOP-INV-NEXT: Running analysis: InnerAnalysisManagerProxy<{{.*}}Loop
182 ; CHECK-LOOP-INV-NEXT: Starting {{.*}}Loop pass manager run.
183 ; CHECK-LOOP-INV-NEXT: Running analysis: PassInstrumentationAnalysis
184 ; CHECK-LOOP-INV-NEXT: Running pass: NoOpLoopPass
185 ; CHECK-LOOP-INV-NEXT: Finished {{.*}}Loop pass manager run.
186 ; CHECK-LOOP-INV-NEXT: Starting {{.*}}Loop pass manager run.
187 ; CHECK-LOOP-INV-NEXT: Running analysis: PassInstrumentationAnalysis
188 ; CHECK-LOOP-INV-NEXT: Running pass: NoOpLoopPass
189 ; CHECK-LOOP-INV: Finished {{.*}}Loop pass manager run.
190 ; CHECK-LOOP-INV-NEXT: Finished {{.*}}Function pass manager run.
192 ; CHECK-SCEV-INV-LABEL: Running pass: FunctionToLoopPassAdaptor<{{.*}}> on nested_loops
193 ; CHECK-SCEV-INV-NEXT: Starting {{.*}}Function pass manager run
194 ; CHECK-SCEV-INV-NEXT: Running pass: LoopSimplifyPass
195 ; CHECK-SCEV-INV-NEXT: Running analysis: LoopAnalysis
196 ; CHECK-SCEV-INV-NEXT: Running analysis: DominatorTreeAnalysis
197 ; CHECK-SCEV-INV-NEXT: Running analysis: AssumptionAnalysis
198 ; CHECK-SCEV-INV-NEXT: Running pass: LCSSAPass
199 ; CHECK-SCEV-INV-NEXT: Finished {{.*}}Function pass manager run
200 ; CHECK-SCEV-INV-NEXT: Running analysis: AAManager
201 ; CHECK-SCEV-INV-NEXT: Running analysis: TargetLibraryAnalysis
202 ; CHECK-SCEV-INV-NEXT: Running analysis: ScalarEvolutionAnalysis
203 ; CHECK-SCEV-INV-NEXT: Running analysis: TargetIRAnalysis
204 ; CHECK-SCEV-INV-NEXT: Running analysis: InnerAnalysisManagerProxy<{{.*}}Loop
205 ; CHECK-SCEV-INV-NEXT: Starting {{.*}}Loop pass manager run.
206 ; CHECK-SCEV-INV-NEXT: Running analysis: PassInstrumentationAnalysis
207 ; CHECK-SCEV-INV-NEXT: Running pass: NoOpLoopPass
208 ; CHECK-SCEV-INV-NEXT: Finished {{.*}}Loop pass manager run.
209 ; CHECK-SCEV-INV-NEXT: Starting {{.*}}Loop pass manager run.
210 ; CHECK-SCEV-INV-NEXT: Running analysis: PassInstrumentationAnalysis
211 ; CHECK-SCEV-INV-NEXT: Running pass: NoOpLoopPass
212 ; CHECK-SCEV-INV: Finished {{.*}}Loop pass manager run.
213 ; CHECK-SCEV-INV-NEXT: Running pass: InvalidateAnalysisPass<{{.*}}ScalarEvolutionAnalysis
214 ; CHECK-SCEV-INV-NEXT: Invalidating all non-preserved analyses
215 ; CHECK-SCEV-INV-NEXT: Clearing all analysis results for: <possibly invalidated loop>
216 ; CHECK-SCEV-INV-NEXT: Clearing all analysis results for: <possibly invalidated loop>
217 ; CHECK-SCEV-INV-NEXT: Invalidating analysis: ScalarEvolutionAnalysis
218 ; CHECK-SCEV-INV-NEXT: Invalidating analysis: InnerAnalysisManagerProxy<{{.*}}Loop
219 ; CHECK-SCEV-INV-NEXT: Running pass: FunctionToLoopPassAdaptor<{{.*}}> on nested_loops
220 ; CHECK-SCEV-INV-NEXT: Starting {{.*}}Function pass manager run
221 ; CHECK-SCEV-INV-NEXT: Running pass: LoopSimplifyPass
222 ; CHECK-SCEV-INV-NEXT: Running pass: LCSSAPass
223 ; CHECK-SCEV-INV-NEXT: Finished {{.*}}Function pass manager run
224 ; CHECK-SCEV-INV-NEXT: Running analysis: ScalarEvolutionAnalysis
225 ; CHECK-SCEV-INV-NEXT: Running analysis: InnerAnalysisManagerProxy<{{.*}}Loop
226 ; CHECK-SCEV-INV-NEXT: Starting {{.*}}Loop pass manager run.
227 ; CHECK-SCEV-INV-NEXT: Running analysis: PassInstrumentationAnalysis
228 ; CHECK-SCEV-INV-NEXT: Running pass: NoOpLoopPass
229 ; CHECK-SCEV-INV-NEXT: Finished {{.*}}Loop pass manager run.
230 ; CHECK-SCEV-INV-NEXT: Starting {{.*}}Loop pass manager run.
231 ; CHECK-SCEV-INV-NEXT: Running analysis: PassInstrumentationAnalysis
232 ; CHECK-SCEV-INV-NEXT: Running pass: NoOpLoopPass
233 ; CHECK-SCEV-INV: Finished {{.*}}Loop pass manager run.
234 ; CHECK-SCEV-INV-NEXT: Finished {{.*}}Function pass manager run.
236 entry:
237   br label %l.0.header
239 l.0.header:
240   br label %l.0.0.header
242 l.0.0.header:
243   %flag.0.0 = load volatile i1, i1* %ptr
244   br i1 %flag.0.0, label %l.0.0.header, label %l.0.latch
246 l.0.latch:
247   %flag.0 = load volatile i1, i1* %ptr
248   br i1 %flag.0, label %l.0.header, label %exit
250 exit:
251   ret void
254 define void @dead_loop() {
255 ; CHECK-LOOP-INV-LABEL: Running pass: FunctionToLoopPassAdaptor<{{.*}}> on dead_loop
256 ; CHECK-LOOP-INV-NEXT: Starting {{.*}}Function pass manager run
257 ; CHECK-LOOP-INV-NEXT: Running pass: LoopSimplifyPass
258 ; CHECK-LOOP-INV-NEXT: Running analysis: LoopAnalysis
259 ; CHECK-LOOP-INV-NEXT: Running analysis: DominatorTreeAnalysis
260 ; CHECK-LOOP-INV-NEXT: Running analysis: AssumptionAnalysis
261 ; CHECK-LOOP-INV-NEXT: Running pass: LCSSAPass
262 ; CHECK-LOOP-INV-NEXT: Finished {{.*}}Function pass manager run
263 ; CHECK-LOOP-INV-NEXT: Running analysis: AAManager
264 ; CHECK-LOOP-INV-NEXT: Running analysis: TargetLibraryAnalysis
265 ; CHECK-LOOP-INV-NEXT: Running analysis: ScalarEvolutionAnalysis
266 ; CHECK-LOOP-INV-NEXT: Running analysis: TargetIRAnalysis
267 ; CHECK-LOOP-INV-NEXT: Running analysis: InnerAnalysisManagerProxy<{{.*}}Loop
268 ; CHECK-LOOP-INV-NEXT: Starting {{.*}}Loop pass manager run.
269 ; CHECK-LOOP-INV-NEXT: Running analysis: PassInstrumentationAnalysis
270 ; CHECK-LOOP-INV-NEXT: Running pass: NoOpLoopPass
271 ; CHECK-LOOP-INV-NEXT: Finished {{.*}}Loop pass manager run.
272 ; CHECK-LOOP-INV-NEXT: Running pass: InvalidateAnalysisPass<{{.*}}LoopAnalysis
273 ; CHECK-LOOP-INV-NEXT: Invalidating all non-preserved analyses
274 ; CHECK-LOOP-INV-NEXT: Clearing all analysis results for: <possibly invalidated loop>
275 ; CHECK-LOOP-INV-NEXT: Invalidating analysis: LoopAnalysis
276 ; CHECK-LOOP-INV-NEXT: Invalidating analysis: ScalarEvolutionAnalysis
277 ; CHECK-LOOP-INV-NEXT: Invalidating analysis: InnerAnalysisManagerProxy<{{.*}}Loop
278 ; CHECK-LOOP-INV-NEXT: Running pass: FunctionToLoopPassAdaptor<{{.*}}> on dead_loop
279 ; CHECK-LOOP-INV-NEXT: Starting {{.*}}Function pass manager run
280 ; CHECK-LOOP-INV-NEXT: Running pass: LoopSimplifyPass
281 ; CHECK-LOOP-INV-NEXT: Running analysis: LoopAnalysis
282 ; CHECK-LOOP-INV-NEXT: Running pass: LCSSAPass
283 ; CHECK-LOOP-INV-NEXT: Finished {{.*}}Function pass manager run
284 ; CHECK-LOOP-INV-NEXT: Running analysis: ScalarEvolutionAnalysis
285 ; CHECK-LOOP-INV-NEXT: Running analysis: InnerAnalysisManagerProxy<{{.*}}Loop
286 ; CHECK-LOOP-INV-NEXT: Starting {{.*}}Loop pass manager run.
287 ; CHECK-LOOP-INV-NEXT: Running analysis: PassInstrumentationAnalysis
288 ; CHECK-LOOP-INV-NEXT: Running pass: NoOpLoopPass
289 ; CHECK-LOOP-INV-NEXT: Finished {{.*}}Loop pass manager run.
290 ; CHECK-LOOP-INV-NEXT: Finished {{.*}}Function pass manager run.
292 ; CHECK-SCEV-INV-LABEL: Running pass: FunctionToLoopPassAdaptor<{{.*}}> on dead_loop
293 ; CHECK-SCEV-INV-NEXT: Starting {{.*}}Function pass manager run
294 ; CHECK-SCEV-INV-NEXT: Running pass: LoopSimplifyPass
295 ; CHECK-SCEV-INV-NEXT: Running analysis: LoopAnalysis
296 ; CHECK-SCEV-INV-NEXT: Running analysis: DominatorTreeAnalysis
297 ; CHECK-SCEV-INV-NEXT: Running analysis: AssumptionAnalysis
298 ; CHECK-SCEV-INV-NEXT: Running pass: LCSSAPass
299 ; CHECK-SCEV-INV-NEXT: Finished {{.*}}Function pass manager run
300 ; CHECK-SCEV-INV-NEXT: Running analysis: AAManager
301 ; CHECK-SCEV-INV-NEXT: Running analysis: TargetLibraryAnalysis
302 ; CHECK-SCEV-INV-NEXT: Running analysis: ScalarEvolutionAnalysis
303 ; CHECK-SCEV-INV-NEXT: Running analysis: TargetIRAnalysis
304 ; CHECK-SCEV-INV-NEXT: Running analysis: InnerAnalysisManagerProxy<{{.*}}Loop
305 ; CHECK-SCEV-INV-NEXT: Starting {{.*}}Loop pass manager run.
306 ; CHECK-SCEV-INV-NEXT: Running analysis: PassInstrumentationAnalysis
307 ; CHECK-SCEV-INV-NEXT: Running pass: NoOpLoopPass
308 ; CHECK-SCEV-INV-NEXT: Finished {{.*}}Loop pass manager run.
309 ; CHECK-SCEV-INV-NEXT: Running pass: InvalidateAnalysisPass<{{.*}}ScalarEvolutionAnalysis
310 ; CHECK-SCEV-INV-NEXT: Invalidating all non-preserved analyses
311 ; CHECK-SCEV-INV-NEXT: Clearing all analysis results for: <possibly invalidated loop>
312 ; CHECK-SCEV-INV-NEXT: Invalidating analysis: ScalarEvolutionAnalysis
313 ; CHECK-SCEV-INV-NEXT: Invalidating analysis: InnerAnalysisManagerProxy<{{.*}}Loop
314 ; CHECK-SCEV-INV-NEXT: Running pass: FunctionToLoopPassAdaptor<{{.*}}> on dead_loop
315 ; CHECK-SCEV-INV-NEXT: Starting {{.*}}Function pass manager run
316 ; CHECK-SCEV-INV-NEXT: Running pass: LoopSimplifyPass
317 ; CHECK-SCEV-INV-NEXT: Running pass: LCSSAPass
318 ; CHECK-SCEV-INV-NEXT: Finished {{.*}}Function pass manager run
319 ; CHECK-SCEV-INV-NEXT: Running analysis: ScalarEvolutionAnalysis
320 ; CHECK-SCEV-INV-NEXT: Running analysis: InnerAnalysisManagerProxy<{{.*}}Loop
321 ; CHECK-SCEV-INV-NEXT: Starting {{.*}}Loop pass manager run.
322 ; CHECK-SCEV-INV-NEXT: Running analysis: PassInstrumentationAnalysis
323 ; CHECK-SCEV-INV-NEXT: Running pass: NoOpLoopPass
324 ; CHECK-SCEV-INV-NEXT: Finished {{.*}}Loop pass manager run.
325 ; CHECK-SCEV-INV-NEXT: Finished {{.*}}Function pass manager run.
327 ; CHECK-SCEV-INV-AFTER-DELETE-LABEL: Running pass: FunctionToLoopPassAdaptor<{{.*}}> on dead_loop
328 ; CHECK-SCEV-INV-AFTER-DELETE-NEXT: Starting {{.*}}Function pass manager run
329 ; CHECK-SCEV-INV-AFTER-DELETE-NEXT: Running pass: LoopSimplifyPass
330 ; CHECK-SCEV-INV-AFTER-DELETE-NEXT: Running analysis: LoopAnalysis
331 ; CHECK-SCEV-INV-AFTER-DELETE-NEXT: Running analysis: DominatorTreeAnalysis
332 ; CHECK-SCEV-INV-AFTER-DELETE-NEXT: Running analysis: AssumptionAnalysis
333 ; CHECK-SCEV-INV-AFTER-DELETE-NEXT: Running pass: LCSSAPass
334 ; CHECK-SCEV-INV-AFTER-DELETE-NEXT: Finished {{.*}}Function pass manager run
335 ; CHECK-SCEV-INV-AFTER-DELETE-NEXT: Running analysis: AAManager
336 ; CHECK-SCEV-INV-AFTER-DELETE-NEXT: Running analysis: TargetLibraryAnalysis
337 ; CHECK-SCEV-INV-AFTER-DELETE-NEXT: Running analysis: ScalarEvolutionAnalysis
338 ; CHECK-SCEV-INV-AFTER-DELETE-NEXT: Running analysis: TargetIRAnalysis
339 ; CHECK-SCEV-INV-AFTER-DELETE-NEXT: Running analysis: InnerAnalysisManagerProxy<{{.*}}Loop
340 ; CHECK-SCEV-INV-AFTER-DELETE-NEXT: Starting {{.*}}Loop pass manager run.
341 ; CHECK-SCEV-INV-AFTER-DELETE-NEXT: Running analysis: PassInstrumentationAnalysis
342 ; CHECK-SCEV-INV-AFTER-DELETE-NEXT: Running pass: NoOpLoopPass
343 ; CHECK-SCEV-INV-AFTER-DELETE-NEXT: Running pass: LoopDeletionPass
344 ; CHECK-SCEV-INV-AFTER-DELETE-NEXT: Clearing all analysis results for:
345 ; CHECK-SCEV-INV-AFTER-DELETE-NEXT: Finished {{.*}}Loop pass manager run.
346 ; CHECK-SCEV-INV-AFTER-DELETE-NEXT: Invalidating all non-preserved analyses
347 ; CHECK-SCEV-INV-AFTER-DELETE-NEXT: Running pass: InvalidateAnalysisPass<{{.*}}ScalarEvolutionAnalysis
348 ; CHECK-SCEV-INV-AFTER-DELETE-NEXT: Invalidating all non-preserved analyses
349 ; CHECK-SCEV-INV-AFTER-DELETE-NEXT: Invalidating analysis: ScalarEvolutionAnalysis
350 ; CHECK-SCEV-INV-AFTER-DELETE-NEXT: Invalidating analysis: InnerAnalysisManagerProxy<{{.*}}Loop
351 ; CHECK-SCEV-INV-AFTER-DELETE-NEXT: Running pass: FunctionToLoopPassAdaptor<{{.*}}> on dead_loop
352 ; CHECK-SCEV-INV-AFTER-DELETE-NEXT: Starting {{.*}}Function pass manager run
353 ; CHECK-SCEV-INV-AFTER-DELETE-NEXT: Running pass: LoopSimplifyPass
354 ; CHECK-SCEV-INV-AFTER-DELETE-NEXT: Running pass: LCSSAPass
355 ; CHECK-SCEV-INV-AFTER-DELETE-NEXT: Finished {{.*}}Function pass manager run
356 ; CHECK-SCEV-INV-AFTER-DELETE-NEXT: Finished {{.*}}Function pass manager run.
358 entry:
359   br label %l0.header
361 l0.header:
362   br i1 false, label %l0.header, label %exit
364 exit:
365   ret void