• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1; Test that the loop PM infrastructure is invalidated appropriately.
2;
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
8;
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
14;
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
19
20define 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.
39;
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.
56
57entry:
58  ret void
59}
60
61define 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 pass: NoOpLoopPass
77; CHECK-LOOP-INV-NEXT: Finished {{.*}}Loop pass manager run.
78; CHECK-LOOP-INV-NEXT: Running pass: InvalidateAnalysisPass<{{.*}}LoopAnalysis
79; CHECK-LOOP-INV-NEXT: Invalidating all non-preserved analyses
80; CHECK-LOOP-INV-NEXT: Clearing all analysis results for: <possibly invalidated loop>
81; CHECK-LOOP-INV-NEXT: Invalidating analysis: LoopAnalysis
82; CHECK-LOOP-INV-NEXT: Invalidating analysis: ScalarEvolutionAnalysis
83; CHECK-LOOP-INV-NEXT: Invalidating analysis: InnerAnalysisManagerProxy<{{.*}}Loop
84; CHECK-LOOP-INV-NEXT: Running pass: FunctionToLoopPassAdaptor<{{.*}}> on one_loop
85; CHECK-LOOP-INV-NEXT: Starting {{.*}}Function pass manager run
86; CHECK-LOOP-INV-NEXT: Running pass: LoopSimplifyPass
87; CHECK-LOOP-INV-NEXT: Running analysis: LoopAnalysis
88; CHECK-LOOP-INV-NEXT: Running pass: LCSSAPass
89; CHECK-LOOP-INV-NEXT: Finished {{.*}}Function pass manager run
90; CHECK-LOOP-INV-NEXT: Running analysis: ScalarEvolutionAnalysis
91; CHECK-LOOP-INV-NEXT: Running analysis: InnerAnalysisManagerProxy<{{.*}}Loop
92; CHECK-LOOP-INV-NEXT: Starting {{.*}}Loop pass manager run.
93; CHECK-LOOP-INV-NEXT: Running pass: NoOpLoopPass
94; CHECK-LOOP-INV-NEXT: Finished {{.*}}Loop pass manager run.
95; CHECK-LOOP-INV-NEXT: Finished {{.*}}Function pass manager run.
96;
97; CHECK-SCEV-INV-LABEL: Running pass: FunctionToLoopPassAdaptor<{{.*}}> on one_loop
98; CHECK-SCEV-INV-NEXT: Starting {{.*}}Function pass manager run
99; CHECK-SCEV-INV-NEXT: Running pass: LoopSimplifyPass
100; CHECK-SCEV-INV-NEXT: Running analysis: LoopAnalysis
101; CHECK-SCEV-INV-NEXT: Running analysis: DominatorTreeAnalysis
102; CHECK-SCEV-INV-NEXT: Running analysis: AssumptionAnalysis
103; CHECK-SCEV-INV-NEXT: Running pass: LCSSAPass
104; CHECK-SCEV-INV-NEXT: Finished {{.*}}Function pass manager run
105; CHECK-SCEV-INV-NEXT: Running analysis: AAManager
106; CHECK-SCEV-INV-NEXT: Running analysis: TargetLibraryAnalysis
107; CHECK-SCEV-INV-NEXT: Running analysis: ScalarEvolutionAnalysis
108; CHECK-SCEV-INV-NEXT: Running analysis: TargetIRAnalysis
109; CHECK-SCEV-INV-NEXT: Running analysis: InnerAnalysisManagerProxy<{{.*}}Loop
110; CHECK-SCEV-INV-NEXT: Starting {{.*}}Loop pass manager run.
111; CHECK-SCEV-INV-NEXT: Running pass: NoOpLoopPass
112; CHECK-SCEV-INV-NEXT: Finished {{.*}}Loop pass manager run.
113; CHECK-SCEV-INV-NEXT: Running pass: InvalidateAnalysisPass<{{.*}}ScalarEvolutionAnalysis
114; CHECK-SCEV-INV-NEXT: Invalidating all non-preserved analyses
115; CHECK-SCEV-INV-NEXT: Clearing all analysis results for: <possibly invalidated loop>
116; CHECK-SCEV-INV-NEXT: Invalidating analysis: ScalarEvolutionAnalysis
117; CHECK-SCEV-INV-NEXT: Invalidating analysis: InnerAnalysisManagerProxy<{{.*}}Loop
118; CHECK-SCEV-INV-NEXT: Running pass: FunctionToLoopPassAdaptor<{{.*}}> on one_loop
119; CHECK-SCEV-INV-NEXT: Starting {{.*}}Function pass manager run
120; CHECK-SCEV-INV-NEXT: Running pass: LoopSimplifyPass
121; CHECK-SCEV-INV-NEXT: Running pass: LCSSAPass
122; CHECK-SCEV-INV-NEXT: Finished {{.*}}Function pass manager run
123; CHECK-SCEV-INV-NEXT: Running analysis: ScalarEvolutionAnalysis
124; CHECK-SCEV-INV-NEXT: Running analysis: InnerAnalysisManagerProxy<{{.*}}Loop
125; CHECK-SCEV-INV-NEXT: Starting {{.*}}Loop pass manager run.
126; CHECK-SCEV-INV-NEXT: Running pass: NoOpLoopPass
127; CHECK-SCEV-INV-NEXT: Finished {{.*}}Loop pass manager run.
128; CHECK-SCEV-INV-NEXT: Finished {{.*}}Function pass manager run.
129
130entry:
131  br label %l0.header
132
133l0.header:
134  %flag0 = load volatile i1, i1* %ptr
135  br i1 %flag0, label %l0.header, label %exit
136
137exit:
138  ret void
139}
140
141define void @nested_loops(i1* %ptr) {
142; CHECK-LOOP-INV-LABEL: Running pass: FunctionToLoopPassAdaptor<{{.*}}> on nested_loops
143; CHECK-LOOP-INV-NEXT: Starting {{.*}}Function pass manager run
144; CHECK-LOOP-INV-NEXT: Running pass: LoopSimplifyPass
145; CHECK-LOOP-INV-NEXT: Running analysis: LoopAnalysis
146; CHECK-LOOP-INV-NEXT: Running analysis: DominatorTreeAnalysis
147; CHECK-LOOP-INV-NEXT: Running analysis: AssumptionAnalysis
148; CHECK-LOOP-INV-NEXT: Running pass: LCSSAPass
149; CHECK-LOOP-INV-NEXT: Finished {{.*}}Function pass manager run
150; CHECK-LOOP-INV-NEXT: Running analysis: AAManager
151; CHECK-LOOP-INV-NEXT: Running analysis: TargetLibraryAnalysis
152; CHECK-LOOP-INV-NEXT: Running analysis: ScalarEvolutionAnalysis
153; CHECK-LOOP-INV-NEXT: Running analysis: TargetIRAnalysis
154; CHECK-LOOP-INV-NEXT: Running analysis: InnerAnalysisManagerProxy<{{.*}}Loop
155; CHECK-LOOP-INV-NEXT: Starting {{.*}}Loop pass manager run.
156; CHECK-LOOP-INV-NEXT: Running pass: NoOpLoopPass
157; CHECK-LOOP-INV-NEXT: Finished {{.*}}Loop pass manager run.
158; CHECK-LOOP-INV-NEXT: Starting {{.*}}Loop pass manager run.
159; CHECK-LOOP-INV-NEXT: Running pass: NoOpLoopPass
160; CHECK-LOOP-INV: Finished {{.*}}Loop pass manager run.
161; CHECK-LOOP-INV-NEXT: Running pass: InvalidateAnalysisPass<{{.*}}LoopAnalysis
162; CHECK-LOOP-INV-NEXT: Invalidating all non-preserved analyses
163; CHECK-LOOP-INV-NEXT: Clearing all analysis results for: <possibly invalidated loop>
164; CHECK-LOOP-INV-NEXT: Clearing all analysis results for: <possibly invalidated loop>
165; CHECK-LOOP-INV-NEXT: Invalidating analysis: LoopAnalysis
166; CHECK-LOOP-INV-NEXT: Invalidating analysis: ScalarEvolutionAnalysis
167; CHECK-LOOP-INV-NEXT: Invalidating analysis: InnerAnalysisManagerProxy<{{.*}}Loop
168; CHECK-LOOP-INV-NEXT: Running pass: FunctionToLoopPassAdaptor<{{.*}}> on nested_loops
169; CHECK-LOOP-INV-NEXT: Starting {{.*}}Function pass manager run
170; CHECK-LOOP-INV-NEXT: Running pass: LoopSimplifyPass
171; CHECK-LOOP-INV-NEXT: Running analysis: LoopAnalysis
172; CHECK-LOOP-INV-NEXT: Running pass: LCSSAPass
173; CHECK-LOOP-INV-NEXT: Finished {{.*}}Function pass manager run
174; CHECK-LOOP-INV-NEXT: Running analysis: ScalarEvolutionAnalysis
175; CHECK-LOOP-INV-NEXT: Running analysis: InnerAnalysisManagerProxy<{{.*}}Loop
176; CHECK-LOOP-INV-NEXT: Starting {{.*}}Loop pass manager run.
177; CHECK-LOOP-INV-NEXT: Running pass: NoOpLoopPass
178; CHECK-LOOP-INV-NEXT: Finished {{.*}}Loop pass manager run.
179; CHECK-LOOP-INV-NEXT: Starting {{.*}}Loop pass manager run.
180; CHECK-LOOP-INV-NEXT: Running pass: NoOpLoopPass
181; CHECK-LOOP-INV: Finished {{.*}}Loop pass manager run.
182; CHECK-LOOP-INV-NEXT: Finished {{.*}}Function pass manager run.
183;
184; CHECK-SCEV-INV-LABEL: Running pass: FunctionToLoopPassAdaptor<{{.*}}> on nested_loops
185; CHECK-SCEV-INV-NEXT: Starting {{.*}}Function pass manager run
186; CHECK-SCEV-INV-NEXT: Running pass: LoopSimplifyPass
187; CHECK-SCEV-INV-NEXT: Running analysis: LoopAnalysis
188; CHECK-SCEV-INV-NEXT: Running analysis: DominatorTreeAnalysis
189; CHECK-SCEV-INV-NEXT: Running analysis: AssumptionAnalysis
190; CHECK-SCEV-INV-NEXT: Running pass: LCSSAPass
191; CHECK-SCEV-INV-NEXT: Finished {{.*}}Function pass manager run
192; CHECK-SCEV-INV-NEXT: Running analysis: AAManager
193; CHECK-SCEV-INV-NEXT: Running analysis: TargetLibraryAnalysis
194; CHECK-SCEV-INV-NEXT: Running analysis: ScalarEvolutionAnalysis
195; CHECK-SCEV-INV-NEXT: Running analysis: TargetIRAnalysis
196; CHECK-SCEV-INV-NEXT: Running analysis: InnerAnalysisManagerProxy<{{.*}}Loop
197; CHECK-SCEV-INV-NEXT: Starting {{.*}}Loop pass manager run.
198; CHECK-SCEV-INV-NEXT: Running pass: NoOpLoopPass
199; CHECK-SCEV-INV-NEXT: Finished {{.*}}Loop pass manager run.
200; CHECK-SCEV-INV-NEXT: Starting {{.*}}Loop pass manager run.
201; CHECK-SCEV-INV-NEXT: Running pass: NoOpLoopPass
202; CHECK-SCEV-INV: Finished {{.*}}Loop pass manager run.
203; CHECK-SCEV-INV-NEXT: Running pass: InvalidateAnalysisPass<{{.*}}ScalarEvolutionAnalysis
204; CHECK-SCEV-INV-NEXT: Invalidating all non-preserved analyses
205; CHECK-SCEV-INV-NEXT: Clearing all analysis results for: <possibly invalidated loop>
206; CHECK-SCEV-INV-NEXT: Clearing all analysis results for: <possibly invalidated loop>
207; CHECK-SCEV-INV-NEXT: Invalidating analysis: ScalarEvolutionAnalysis
208; CHECK-SCEV-INV-NEXT: Invalidating analysis: InnerAnalysisManagerProxy<{{.*}}Loop
209; CHECK-SCEV-INV-NEXT: Running pass: FunctionToLoopPassAdaptor<{{.*}}> on nested_loops
210; CHECK-SCEV-INV-NEXT: Starting {{.*}}Function pass manager run
211; CHECK-SCEV-INV-NEXT: Running pass: LoopSimplifyPass
212; CHECK-SCEV-INV-NEXT: Running pass: LCSSAPass
213; CHECK-SCEV-INV-NEXT: Finished {{.*}}Function pass manager run
214; CHECK-SCEV-INV-NEXT: Running analysis: ScalarEvolutionAnalysis
215; CHECK-SCEV-INV-NEXT: Running analysis: InnerAnalysisManagerProxy<{{.*}}Loop
216; CHECK-SCEV-INV-NEXT: Starting {{.*}}Loop pass manager run.
217; CHECK-SCEV-INV-NEXT: Running pass: NoOpLoopPass
218; CHECK-SCEV-INV-NEXT: Finished {{.*}}Loop pass manager run.
219; CHECK-SCEV-INV-NEXT: Starting {{.*}}Loop pass manager run.
220; CHECK-SCEV-INV-NEXT: Running pass: NoOpLoopPass
221; CHECK-SCEV-INV: Finished {{.*}}Loop pass manager run.
222; CHECK-SCEV-INV-NEXT: Finished {{.*}}Function pass manager run.
223
224entry:
225  br label %l.0.header
226
227l.0.header:
228  br label %l.0.0.header
229
230l.0.0.header:
231  %flag.0.0 = load volatile i1, i1* %ptr
232  br i1 %flag.0.0, label %l.0.0.header, label %l.0.latch
233
234l.0.latch:
235  %flag.0 = load volatile i1, i1* %ptr
236  br i1 %flag.0, label %l.0.header, label %exit
237
238exit:
239  ret void
240}
241
242define void @dead_loop() {
243; CHECK-LOOP-INV-LABEL: Running pass: FunctionToLoopPassAdaptor<{{.*}}> on dead_loop
244; CHECK-LOOP-INV-NEXT: Starting {{.*}}Function pass manager run
245; CHECK-LOOP-INV-NEXT: Running pass: LoopSimplifyPass
246; CHECK-LOOP-INV-NEXT: Running analysis: LoopAnalysis
247; CHECK-LOOP-INV-NEXT: Running analysis: DominatorTreeAnalysis
248; CHECK-LOOP-INV-NEXT: Running analysis: AssumptionAnalysis
249; CHECK-LOOP-INV-NEXT: Running pass: LCSSAPass
250; CHECK-LOOP-INV-NEXT: Finished {{.*}}Function pass manager run
251; CHECK-LOOP-INV-NEXT: Running analysis: AAManager
252; CHECK-LOOP-INV-NEXT: Running analysis: TargetLibraryAnalysis
253; CHECK-LOOP-INV-NEXT: Running analysis: ScalarEvolutionAnalysis
254; CHECK-LOOP-INV-NEXT: Running analysis: TargetIRAnalysis
255; CHECK-LOOP-INV-NEXT: Running analysis: InnerAnalysisManagerProxy<{{.*}}Loop
256; CHECK-LOOP-INV-NEXT: Starting {{.*}}Loop pass manager run.
257; CHECK-LOOP-INV-NEXT: Running pass: NoOpLoopPass
258; CHECK-LOOP-INV-NEXT: Finished {{.*}}Loop pass manager run.
259; CHECK-LOOP-INV-NEXT: Running pass: InvalidateAnalysisPass<{{.*}}LoopAnalysis
260; CHECK-LOOP-INV-NEXT: Invalidating all non-preserved analyses
261; CHECK-LOOP-INV-NEXT: Clearing all analysis results for: <possibly invalidated loop>
262; CHECK-LOOP-INV-NEXT: Invalidating analysis: LoopAnalysis
263; CHECK-LOOP-INV-NEXT: Invalidating analysis: ScalarEvolutionAnalysis
264; CHECK-LOOP-INV-NEXT: Invalidating analysis: InnerAnalysisManagerProxy<{{.*}}Loop
265; CHECK-LOOP-INV-NEXT: Running pass: FunctionToLoopPassAdaptor<{{.*}}> on dead_loop
266; CHECK-LOOP-INV-NEXT: Starting {{.*}}Function pass manager run
267; CHECK-LOOP-INV-NEXT: Running pass: LoopSimplifyPass
268; CHECK-LOOP-INV-NEXT: Running analysis: LoopAnalysis
269; CHECK-LOOP-INV-NEXT: Running pass: LCSSAPass
270; CHECK-LOOP-INV-NEXT: Finished {{.*}}Function pass manager run
271; CHECK-LOOP-INV-NEXT: Running analysis: ScalarEvolutionAnalysis
272; CHECK-LOOP-INV-NEXT: Running analysis: InnerAnalysisManagerProxy<{{.*}}Loop
273; CHECK-LOOP-INV-NEXT: Starting {{.*}}Loop pass manager run.
274; CHECK-LOOP-INV-NEXT: Running pass: NoOpLoopPass
275; CHECK-LOOP-INV-NEXT: Finished {{.*}}Loop pass manager run.
276; CHECK-LOOP-INV-NEXT: Finished {{.*}}Function pass manager run.
277;
278; CHECK-SCEV-INV-LABEL: Running pass: FunctionToLoopPassAdaptor<{{.*}}> on dead_loop
279; CHECK-SCEV-INV-NEXT: Starting {{.*}}Function pass manager run
280; CHECK-SCEV-INV-NEXT: Running pass: LoopSimplifyPass
281; CHECK-SCEV-INV-NEXT: Running analysis: LoopAnalysis
282; CHECK-SCEV-INV-NEXT: Running analysis: DominatorTreeAnalysis
283; CHECK-SCEV-INV-NEXT: Running analysis: AssumptionAnalysis
284; CHECK-SCEV-INV-NEXT: Running pass: LCSSAPass
285; CHECK-SCEV-INV-NEXT: Finished {{.*}}Function pass manager run
286; CHECK-SCEV-INV-NEXT: Running analysis: AAManager
287; CHECK-SCEV-INV-NEXT: Running analysis: TargetLibraryAnalysis
288; CHECK-SCEV-INV-NEXT: Running analysis: ScalarEvolutionAnalysis
289; CHECK-SCEV-INV-NEXT: Running analysis: TargetIRAnalysis
290; CHECK-SCEV-INV-NEXT: Running analysis: InnerAnalysisManagerProxy<{{.*}}Loop
291; CHECK-SCEV-INV-NEXT: Starting {{.*}}Loop pass manager run.
292; CHECK-SCEV-INV-NEXT: Running pass: NoOpLoopPass
293; CHECK-SCEV-INV-NEXT: Finished {{.*}}Loop pass manager run.
294; CHECK-SCEV-INV-NEXT: Running pass: InvalidateAnalysisPass<{{.*}}ScalarEvolutionAnalysis
295; CHECK-SCEV-INV-NEXT: Invalidating all non-preserved analyses
296; CHECK-SCEV-INV-NEXT: Clearing all analysis results for: <possibly invalidated loop>
297; CHECK-SCEV-INV-NEXT: Invalidating analysis: ScalarEvolutionAnalysis
298; CHECK-SCEV-INV-NEXT: Invalidating analysis: InnerAnalysisManagerProxy<{{.*}}Loop
299; CHECK-SCEV-INV-NEXT: Running pass: FunctionToLoopPassAdaptor<{{.*}}> on dead_loop
300; CHECK-SCEV-INV-NEXT: Starting {{.*}}Function pass manager run
301; CHECK-SCEV-INV-NEXT: Running pass: LoopSimplifyPass
302; CHECK-SCEV-INV-NEXT: Running pass: LCSSAPass
303; CHECK-SCEV-INV-NEXT: Finished {{.*}}Function pass manager run
304; CHECK-SCEV-INV-NEXT: Running analysis: ScalarEvolutionAnalysis
305; CHECK-SCEV-INV-NEXT: Running analysis: InnerAnalysisManagerProxy<{{.*}}Loop
306; CHECK-SCEV-INV-NEXT: Starting {{.*}}Loop pass manager run.
307; CHECK-SCEV-INV-NEXT: Running pass: NoOpLoopPass
308; CHECK-SCEV-INV-NEXT: Finished {{.*}}Loop pass manager run.
309; CHECK-SCEV-INV-NEXT: Finished {{.*}}Function pass manager run.
310;
311; CHECK-SCEV-INV-AFTER-DELETE-LABEL: Running pass: FunctionToLoopPassAdaptor<{{.*}}> on dead_loop
312; CHECK-SCEV-INV-AFTER-DELETE-NEXT: Starting {{.*}}Function pass manager run
313; CHECK-SCEV-INV-AFTER-DELETE-NEXT: Running pass: LoopSimplifyPass
314; CHECK-SCEV-INV-AFTER-DELETE-NEXT: Running analysis: LoopAnalysis
315; CHECK-SCEV-INV-AFTER-DELETE-NEXT: Running analysis: DominatorTreeAnalysis
316; CHECK-SCEV-INV-AFTER-DELETE-NEXT: Running analysis: AssumptionAnalysis
317; CHECK-SCEV-INV-AFTER-DELETE-NEXT: Running pass: LCSSAPass
318; CHECK-SCEV-INV-AFTER-DELETE-NEXT: Finished {{.*}}Function pass manager run
319; CHECK-SCEV-INV-AFTER-DELETE-NEXT: Running analysis: AAManager
320; CHECK-SCEV-INV-AFTER-DELETE-NEXT: Running analysis: TargetLibraryAnalysis
321; CHECK-SCEV-INV-AFTER-DELETE-NEXT: Running analysis: ScalarEvolutionAnalysis
322; CHECK-SCEV-INV-AFTER-DELETE-NEXT: Running analysis: TargetIRAnalysis
323; CHECK-SCEV-INV-AFTER-DELETE-NEXT: Running analysis: InnerAnalysisManagerProxy<{{.*}}Loop
324; CHECK-SCEV-INV-AFTER-DELETE-NEXT: Starting {{.*}}Loop pass manager run.
325; CHECK-SCEV-INV-AFTER-DELETE-NEXT: Running pass: NoOpLoopPass
326; CHECK-SCEV-INV-AFTER-DELETE-NEXT: Running pass: LoopDeletionPass
327; CHECK-SCEV-INV-AFTER-DELETE-NEXT: Clearing all analysis results for:
328; CHECK-SCEV-INV-AFTER-DELETE-NEXT: Finished {{.*}}Loop pass manager run.
329; CHECK-SCEV-INV-AFTER-DELETE-NEXT: Invalidating all non-preserved analyses
330; CHECK-SCEV-INV-AFTER-DELETE-NEXT: Running pass: InvalidateAnalysisPass<{{.*}}ScalarEvolutionAnalysis
331; CHECK-SCEV-INV-AFTER-DELETE-NEXT: Invalidating all non-preserved analyses
332; CHECK-SCEV-INV-AFTER-DELETE-NEXT: Invalidating analysis: ScalarEvolutionAnalysis
333; CHECK-SCEV-INV-AFTER-DELETE-NEXT: Invalidating analysis: InnerAnalysisManagerProxy<{{.*}}Loop
334; CHECK-SCEV-INV-AFTER-DELETE-NEXT: Running pass: FunctionToLoopPassAdaptor<{{.*}}> on dead_loop
335; CHECK-SCEV-INV-AFTER-DELETE-NEXT: Starting {{.*}}Function pass manager run
336; CHECK-SCEV-INV-AFTER-DELETE-NEXT: Running pass: LoopSimplifyPass
337; CHECK-SCEV-INV-AFTER-DELETE-NEXT: Running pass: LCSSAPass
338; CHECK-SCEV-INV-AFTER-DELETE-NEXT: Finished {{.*}}Function pass manager run
339; CHECK-SCEV-INV-AFTER-DELETE-NEXT: Finished {{.*}}Function pass manager run.
340
341entry:
342  br label %l0.header
343
344l0.header:
345  br i1 false, label %l0.header, label %exit
346
347exit:
348  ret void
349}
350