blob: bafb75486a8c1643831165b359ab0cacfae80fec [file] [log] [blame]
Philip Reames3a8104a2019-11-19 11:48:51 -08001; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py
Arthur Eubanks9adbb5c2020-07-16 11:09:47 -07002; RUN: opt < %s -analyze -enable-new-pm=0 -scalar-evolution -scalar-evolution-classify-expressions=0 2>&1 | FileCheck %s
3; RUN: opt < %s -disable-output "-passes=print<scalar-evolution>" -scalar-evolution-classify-expressions=0 2>&1 2>&1 | FileCheck %s
Philip Reames3a8104a2019-11-19 11:48:51 -08004
5target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
6target triple = "x86_64-unknown-linux-gnu"
7
8define void @unsimplified_and1(i32 %n) {
9; CHECK-LABEL: 'unsimplified_and1'
Philip Reames3a8104a2019-11-19 11:48:51 -080010; CHECK-NEXT: Determining loop execution counts for: @unsimplified_and1
Philip Reamesf1a9a832019-11-21 09:52:38 -080011; CHECK-NEXT: Loop %loop: backedge-taken count is %n
Philip Reames3a8104a2019-11-19 11:48:51 -080012; CHECK-NEXT: Loop %loop: max backedge-taken count is -1
Philip Reamesf1a9a832019-11-21 09:52:38 -080013; CHECK-NEXT: Loop %loop: Predicated backedge-taken count is %n
14; CHECK-NEXT: Predicates:
15; CHECK: Loop %loop: Trip multiple is 1
Philip Reames3a8104a2019-11-19 11:48:51 -080016;
17entry:
18 br label %loop
19
20loop:
21 %iv = phi i32 [ 0, %entry ], [ %iv.inc, %loop ]
22 %iv.inc = add nsw i32 %iv, 1
23 %becond = icmp ule i32 %iv.inc, %n
24 %and = and i1 %becond, true
25 br i1 %and, label %loop, label %leave
26
27leave:
28 ret void
29}
30
31define void @unsimplified_and2(i32 %n) {
32; CHECK-LABEL: 'unsimplified_and2'
Philip Reames3a8104a2019-11-19 11:48:51 -080033; CHECK-NEXT: Determining loop execution counts for: @unsimplified_and2
Philip Reamesf1a9a832019-11-21 09:52:38 -080034; CHECK-NEXT: Loop %loop: backedge-taken count is %n
Philip Reames3a8104a2019-11-19 11:48:51 -080035; CHECK-NEXT: Loop %loop: max backedge-taken count is -1
Philip Reamesf1a9a832019-11-21 09:52:38 -080036; CHECK-NEXT: Loop %loop: Predicated backedge-taken count is %n
37; CHECK-NEXT: Predicates:
38; CHECK: Loop %loop: Trip multiple is 1
Philip Reames3a8104a2019-11-19 11:48:51 -080039;
40entry:
41 br label %loop
42
43loop:
44 %iv = phi i32 [ 0, %entry ], [ %iv.inc, %loop ]
45 %iv.inc = add nsw i32 %iv, 1
46 %becond = icmp ule i32 %iv.inc, %n
47 %and = and i1 true, %becond
48 br i1 %and, label %loop, label %leave
49
50leave:
51 ret void
52}
53
54define void @unsimplified_and3(i32 %n) {
55; CHECK-LABEL: 'unsimplified_and3'
Philip Reames3a8104a2019-11-19 11:48:51 -080056; CHECK-NEXT: Determining loop execution counts for: @unsimplified_and3
Philip Reamesf1a9a832019-11-21 09:52:38 -080057; CHECK-NEXT: Loop %loop: backedge-taken count is false
58; CHECK-NEXT: Loop %loop: max backedge-taken count is false
59; CHECK-NEXT: Loop %loop: Predicated backedge-taken count is false
Philip Reames3a8104a2019-11-19 11:48:51 -080060; CHECK-NEXT: Predicates:
61; CHECK: Loop %loop: Trip multiple is 1
62;
63entry:
64 br label %loop
65
66loop:
67 %iv = phi i32 [ 0, %entry ], [ %iv.inc, %loop ]
68 %iv.inc = add nsw i32 %iv, 1
69 %becond = icmp ule i32 %iv.inc, %n
70 %and = and i1 false, %becond
71 br i1 %and, label %loop, label %leave
72
73leave:
74 ret void
75}
76
77define void @unsimplified_and4(i32 %n) {
78; CHECK-LABEL: 'unsimplified_and4'
Philip Reames3a8104a2019-11-19 11:48:51 -080079; CHECK-NEXT: Determining loop execution counts for: @unsimplified_and4
Philip Reamesf1a9a832019-11-21 09:52:38 -080080; CHECK-NEXT: Loop %loop: backedge-taken count is false
81; CHECK-NEXT: Loop %loop: max backedge-taken count is false
82; CHECK-NEXT: Loop %loop: Predicated backedge-taken count is false
Philip Reames3a8104a2019-11-19 11:48:51 -080083; CHECK-NEXT: Predicates:
84; CHECK: Loop %loop: Trip multiple is 1
85;
86entry:
87 br label %loop
88
89loop:
90 %iv = phi i32 [ 0, %entry ], [ %iv.inc, %loop ]
91 %iv.inc = add nsw i32 %iv, 1
92 %becond = icmp ule i32 %iv.inc, %n
93 %and = and i1 %becond, false
94 br i1 %and, label %loop, label %leave
95
96leave:
97 ret void
98}
99
100define void @unsimplified_or1(i32 %n) {
101; CHECK-LABEL: 'unsimplified_or1'
Philip Reames3a8104a2019-11-19 11:48:51 -0800102; CHECK-NEXT: Determining loop execution counts for: @unsimplified_or1
103; CHECK-NEXT: Loop %loop: Unpredictable backedge-taken count.
104; CHECK-NEXT: Loop %loop: Unpredictable max backedge-taken count.
105; CHECK-NEXT: Loop %loop: Unpredictable predicated backedge-taken count.
106;
107entry:
108 br label %loop
109
110loop:
111 %iv = phi i32 [ 0, %entry ], [ %iv.inc, %loop ]
112 %iv.inc = add nsw i32 %iv, 1
113 %becond = icmp ule i32 %iv.inc, %n
114 %or = or i1 %becond, true
115 br i1 %or, label %loop, label %leave
116
117leave:
118 ret void
119}
120
121define void @unsimplified_or2(i32 %n) {
122; CHECK-LABEL: 'unsimplified_or2'
Philip Reames3a8104a2019-11-19 11:48:51 -0800123; CHECK-NEXT: Determining loop execution counts for: @unsimplified_or2
124; CHECK-NEXT: Loop %loop: Unpredictable backedge-taken count.
125; CHECK-NEXT: Loop %loop: Unpredictable max backedge-taken count.
126; CHECK-NEXT: Loop %loop: Unpredictable predicated backedge-taken count.
127;
128entry:
129 br label %loop
130
131loop:
132 %iv = phi i32 [ 0, %entry ], [ %iv.inc, %loop ]
133 %iv.inc = add nsw i32 %iv, 1
134 %becond = icmp ule i32 %iv.inc, %n
135 %or = or i1 true, %becond
136 br i1 %or, label %loop, label %leave
137
138leave:
139 ret void
140}
141
142define void @unsimplified_or3(i32 %n) {
143; CHECK-LABEL: 'unsimplified_or3'
Philip Reames3a8104a2019-11-19 11:48:51 -0800144; CHECK-NEXT: Determining loop execution counts for: @unsimplified_or3
Philip Reamesf1a9a832019-11-21 09:52:38 -0800145; CHECK-NEXT: Loop %loop: backedge-taken count is %n
146; CHECK-NEXT: Loop %loop: max backedge-taken count is -1
147; CHECK-NEXT: Loop %loop: Predicated backedge-taken count is %n
148; CHECK-NEXT: Predicates:
149; CHECK: Loop %loop: Trip multiple is 1
Philip Reames3a8104a2019-11-19 11:48:51 -0800150;
151entry:
152 br label %loop
153
154loop:
155 %iv = phi i32 [ 0, %entry ], [ %iv.inc, %loop ]
156 %iv.inc = add nsw i32 %iv, 1
157 %becond = icmp ule i32 %iv.inc, %n
158 %or = or i1 false, %becond
159 br i1 %or, label %loop, label %leave
160
161leave:
162 ret void
163}
164
165define void @unsimplified_or4(i32 %n) {
166; CHECK-LABEL: 'unsimplified_or4'
Philip Reames3a8104a2019-11-19 11:48:51 -0800167; CHECK-NEXT: Determining loop execution counts for: @unsimplified_or4
Philip Reamesf1a9a832019-11-21 09:52:38 -0800168; CHECK-NEXT: Loop %loop: backedge-taken count is %n
169; CHECK-NEXT: Loop %loop: max backedge-taken count is -1
170; CHECK-NEXT: Loop %loop: Predicated backedge-taken count is %n
171; CHECK-NEXT: Predicates:
172; CHECK: Loop %loop: Trip multiple is 1
Philip Reames3a8104a2019-11-19 11:48:51 -0800173;
174entry:
175 br label %loop
176
177loop:
178 %iv = phi i32 [ 0, %entry ], [ %iv.inc, %loop ]
179 %iv.inc = add nsw i32 %iv, 1
180 %becond = icmp ule i32 %iv.inc, %n
181 %or = or i1 %becond, false
182 br i1 %or, label %loop, label %leave
183
184leave:
185 ret void
186}
187
188define void @reversed_and1(i32 %n) {
189; CHECK-LABEL: 'reversed_and1'
Philip Reames3a8104a2019-11-19 11:48:51 -0800190; CHECK-NEXT: Determining loop execution counts for: @reversed_and1
Philip Reamesf1a9a832019-11-21 09:52:38 -0800191; CHECK-NEXT: Loop %loop: backedge-taken count is %n
192; CHECK-NEXT: Loop %loop: max backedge-taken count is -1
193; CHECK-NEXT: Loop %loop: Predicated backedge-taken count is %n
194; CHECK-NEXT: Predicates:
195; CHECK: Loop %loop: Trip multiple is 1
Philip Reames3a8104a2019-11-19 11:48:51 -0800196;
197entry:
198 br label %loop
199
200loop:
201 %iv = phi i32 [ 0, %entry ], [ %iv.inc, %loop ]
202 %iv.inc = add nsw i32 %iv, 1
203 %becond = icmp ugt i32 %iv.inc, %n
204 %and = and i1 %becond, true
205 br i1 %and, label %leave, label %loop
206
207leave:
208 ret void
209}
210
211define void @reversed_and2(i32 %n) {
212; CHECK-LABEL: 'reversed_and2'
Philip Reames3a8104a2019-11-19 11:48:51 -0800213; CHECK-NEXT: Determining loop execution counts for: @reversed_and2
Philip Reamesf1a9a832019-11-21 09:52:38 -0800214; CHECK-NEXT: Loop %loop: backedge-taken count is %n
215; CHECK-NEXT: Loop %loop: max backedge-taken count is -1
216; CHECK-NEXT: Loop %loop: Predicated backedge-taken count is %n
217; CHECK-NEXT: Predicates:
218; CHECK: Loop %loop: Trip multiple is 1
Philip Reames3a8104a2019-11-19 11:48:51 -0800219;
220entry:
221 br label %loop
222
223loop:
224 %iv = phi i32 [ 0, %entry ], [ %iv.inc, %loop ]
225 %iv.inc = add nsw i32 %iv, 1
226 %becond = icmp ugt i32 %iv.inc, %n
227 %and = and i1 true, %becond
228 br i1 %and, label %leave, label %loop
229
230leave:
231 ret void
232}
233
234define void @reversed_and3(i32 %n) {
235; CHECK-LABEL: 'reversed_and3'
Philip Reames3a8104a2019-11-19 11:48:51 -0800236; CHECK-NEXT: Determining loop execution counts for: @reversed_and3
237; CHECK-NEXT: Loop %loop: Unpredictable backedge-taken count.
238; CHECK-NEXT: Loop %loop: Unpredictable max backedge-taken count.
239; CHECK-NEXT: Loop %loop: Unpredictable predicated backedge-taken count.
240;
241entry:
242 br label %loop
243
244loop:
245 %iv = phi i32 [ 0, %entry ], [ %iv.inc, %loop ]
246 %iv.inc = add nsw i32 %iv, 1
247 %becond = icmp ugt i32 %iv.inc, %n
248 %and = and i1 false, %becond
249 br i1 %and, label %leave, label %loop
250
251leave:
252 ret void
253}
254
255define void @reversed_and4(i32 %n) {
256; CHECK-LABEL: 'reversed_and4'
Philip Reames3a8104a2019-11-19 11:48:51 -0800257; CHECK-NEXT: Determining loop execution counts for: @reversed_and4
258; CHECK-NEXT: Loop %loop: Unpredictable backedge-taken count.
259; CHECK-NEXT: Loop %loop: Unpredictable max backedge-taken count.
260; CHECK-NEXT: Loop %loop: Unpredictable predicated backedge-taken count.
261;
262entry:
263 br label %loop
264
265loop:
266 %iv = phi i32 [ 0, %entry ], [ %iv.inc, %loop ]
267 %iv.inc = add nsw i32 %iv, 1
268 %becond = icmp ugt i32 %iv.inc, %n
269 %and = and i1 %becond, false
270 br i1 %and, label %leave, label %loop
271
272leave:
273 ret void
274}
275
276define void @reversed_or1(i32 %n) {
277; CHECK-LABEL: 'reversed_or1'
Philip Reames3a8104a2019-11-19 11:48:51 -0800278; CHECK-NEXT: Determining loop execution counts for: @reversed_or1
Philip Reamesf1a9a832019-11-21 09:52:38 -0800279; CHECK-NEXT: Loop %loop: backedge-taken count is false
280; CHECK-NEXT: Loop %loop: max backedge-taken count is false
281; CHECK-NEXT: Loop %loop: Predicated backedge-taken count is false
Philip Reames3a8104a2019-11-19 11:48:51 -0800282; CHECK-NEXT: Predicates:
283; CHECK: Loop %loop: Trip multiple is 1
284;
285entry:
286 br label %loop
287
288loop:
289 %iv = phi i32 [ 0, %entry ], [ %iv.inc, %loop ]
290 %iv.inc = add nsw i32 %iv, 1
291 %becond = icmp ugt i32 %iv.inc, %n
292 %or = or i1 %becond, true
293 br i1 %or, label %leave, label %loop
294
295leave:
296 ret void
297}
298
299define void @reversed_or2(i32 %n) {
300; CHECK-LABEL: 'reversed_or2'
Philip Reames3a8104a2019-11-19 11:48:51 -0800301; CHECK-NEXT: Determining loop execution counts for: @reversed_or2
Philip Reamesf1a9a832019-11-21 09:52:38 -0800302; CHECK-NEXT: Loop %loop: backedge-taken count is false
303; CHECK-NEXT: Loop %loop: max backedge-taken count is false
304; CHECK-NEXT: Loop %loop: Predicated backedge-taken count is false
Philip Reames3a8104a2019-11-19 11:48:51 -0800305; CHECK-NEXT: Predicates:
306; CHECK: Loop %loop: Trip multiple is 1
307;
308entry:
309 br label %loop
310
311loop:
312 %iv = phi i32 [ 0, %entry ], [ %iv.inc, %loop ]
313 %iv.inc = add nsw i32 %iv, 1
314 %becond = icmp ugt i32 %iv.inc, %n
315 %or = or i1 true, %becond
316 br i1 %or, label %leave, label %loop
317
318leave:
319 ret void
320}
321
322define void @reversed_or3(i32 %n) {
323; CHECK-LABEL: 'reversed_or3'
Philip Reames3a8104a2019-11-19 11:48:51 -0800324; CHECK-NEXT: Determining loop execution counts for: @reversed_or3
Philip Reamesf1a9a832019-11-21 09:52:38 -0800325; CHECK-NEXT: Loop %loop: backedge-taken count is %n
Philip Reames3a8104a2019-11-19 11:48:51 -0800326; CHECK-NEXT: Loop %loop: max backedge-taken count is -1
Philip Reamesf1a9a832019-11-21 09:52:38 -0800327; CHECK-NEXT: Loop %loop: Predicated backedge-taken count is %n
328; CHECK-NEXT: Predicates:
329; CHECK: Loop %loop: Trip multiple is 1
Philip Reames3a8104a2019-11-19 11:48:51 -0800330;
331entry:
332 br label %loop
333
334loop:
335 %iv = phi i32 [ 0, %entry ], [ %iv.inc, %loop ]
336 %iv.inc = add nsw i32 %iv, 1
337 %becond = icmp ugt i32 %iv.inc, %n
338 %or = or i1 false, %becond
339 br i1 %or, label %leave, label %loop
340
341leave:
342 ret void
343}
344
345define void @reversed_or4(i32 %n) {
346; CHECK-LABEL: 'reversed_or4'
Philip Reames3a8104a2019-11-19 11:48:51 -0800347; CHECK-NEXT: Determining loop execution counts for: @reversed_or4
Philip Reamesf1a9a832019-11-21 09:52:38 -0800348; CHECK-NEXT: Loop %loop: backedge-taken count is %n
Philip Reames3a8104a2019-11-19 11:48:51 -0800349; CHECK-NEXT: Loop %loop: max backedge-taken count is -1
Philip Reamesf1a9a832019-11-21 09:52:38 -0800350; CHECK-NEXT: Loop %loop: Predicated backedge-taken count is %n
351; CHECK-NEXT: Predicates:
352; CHECK: Loop %loop: Trip multiple is 1
Philip Reames3a8104a2019-11-19 11:48:51 -0800353;
354entry:
355 br label %loop
356
357loop:
358 %iv = phi i32 [ 0, %entry ], [ %iv.inc, %loop ]
359 %iv.inc = add nsw i32 %iv, 1
360 %becond = icmp ugt i32 %iv.inc, %n
361 %or = or i1 %becond, false
362 br i1 %or, label %leave, label %loop
363
364leave:
365 ret void
366}