xref: /llvm-project/llvm/test/Analysis/ScalarEvolution/trip-count-andor.ll (revision 0d38f21e4ab7fe7cebe76a9d7c218ec54dba1e98)
1; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py
2; RUN: opt < %s -disable-output "-passes=print<scalar-evolution>" -scalar-evolution-classify-expressions=0 2>&1 2>&1 | FileCheck %s
3
4target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
5target triple = "x86_64-unknown-linux-gnu"
6
7define void @unsimplified_and1(i32 %n) {
8; CHECK-LABEL: 'unsimplified_and1'
9; CHECK-NEXT:  Determining loop execution counts for: @unsimplified_and1
10; CHECK-NEXT:  Loop %loop: backedge-taken count is %n
11; CHECK-NEXT:  Loop %loop: constant max backedge-taken count is i32 -1
12; CHECK-NEXT:  Loop %loop: symbolic max backedge-taken count is %n
13; CHECK-NEXT:  Loop %loop: Trip multiple is 1
14;
15entry:
16  br label %loop
17
18loop:
19  %iv = phi i32 [ 0, %entry ], [ %iv.inc, %loop ]
20  %iv.inc = add nsw i32 %iv, 1
21  %becond = icmp ule i32 %iv.inc, %n
22  %and = and i1 %becond, true
23  br i1 %and, label %loop, label %leave
24
25leave:
26  ret void
27}
28
29define void @unsimplified_and2(i32 %n) {
30; CHECK-LABEL: 'unsimplified_and2'
31; CHECK-NEXT:  Determining loop execution counts for: @unsimplified_and2
32; CHECK-NEXT:  Loop %loop: backedge-taken count is %n
33; CHECK-NEXT:  Loop %loop: constant max backedge-taken count is i32 -1
34; CHECK-NEXT:  Loop %loop: symbolic max backedge-taken count is %n
35; CHECK-NEXT:  Loop %loop: Trip multiple is 1
36;
37entry:
38  br label %loop
39
40loop:
41  %iv = phi i32 [ 0, %entry ], [ %iv.inc, %loop ]
42  %iv.inc = add nsw i32 %iv, 1
43  %becond = icmp ule i32 %iv.inc, %n
44  %and = and i1 true, %becond
45  br i1 %and, label %loop, label %leave
46
47leave:
48  ret void
49}
50
51define void @unsimplified_and3(i32 %n) {
52; CHECK-LABEL: 'unsimplified_and3'
53; CHECK-NEXT:  Determining loop execution counts for: @unsimplified_and3
54; CHECK-NEXT:  Loop %loop: backedge-taken count is i1 false
55; CHECK-NEXT:  Loop %loop: constant max backedge-taken count is i1 false
56; CHECK-NEXT:  Loop %loop: symbolic max backedge-taken count is i1 false
57; CHECK-NEXT:  Loop %loop: Trip multiple is 1
58;
59entry:
60  br label %loop
61
62loop:
63  %iv = phi i32 [ 0, %entry ], [ %iv.inc, %loop ]
64  %iv.inc = add nsw i32 %iv, 1
65  %becond = icmp ule i32 %iv.inc, %n
66  %and = and i1 false, %becond
67  br i1 %and, label %loop, label %leave
68
69leave:
70  ret void
71}
72
73define void @unsimplified_and4(i32 %n) {
74; CHECK-LABEL: 'unsimplified_and4'
75; CHECK-NEXT:  Determining loop execution counts for: @unsimplified_and4
76; CHECK-NEXT:  Loop %loop: backedge-taken count is i1 false
77; CHECK-NEXT:  Loop %loop: constant max backedge-taken count is i1 false
78; CHECK-NEXT:  Loop %loop: symbolic max backedge-taken count is i1 false
79; CHECK-NEXT:  Loop %loop: Trip multiple is 1
80;
81entry:
82  br label %loop
83
84loop:
85  %iv = phi i32 [ 0, %entry ], [ %iv.inc, %loop ]
86  %iv.inc = add nsw i32 %iv, 1
87  %becond = icmp ule i32 %iv.inc, %n
88  %and = and i1 %becond, false
89  br i1 %and, label %loop, label %leave
90
91leave:
92  ret void
93}
94
95define void @unsimplified_or1(i32 %n) {
96; CHECK-LABEL: 'unsimplified_or1'
97; CHECK-NEXT:  Determining loop execution counts for: @unsimplified_or1
98; CHECK-NEXT:  Loop %loop: Unpredictable backedge-taken count.
99; CHECK-NEXT:  Loop %loop: Unpredictable constant max backedge-taken count.
100; CHECK-NEXT:  Loop %loop: Unpredictable symbolic max backedge-taken count.
101;
102entry:
103  br label %loop
104
105loop:
106  %iv = phi i32 [ 0, %entry ], [ %iv.inc, %loop ]
107  %iv.inc = add nsw i32 %iv, 1
108  %becond = icmp ule i32 %iv.inc, %n
109  %or = or i1 %becond, true
110  br i1 %or, label %loop, label %leave
111
112leave:
113  ret void
114}
115
116define void @unsimplified_or2(i32 %n) {
117; CHECK-LABEL: 'unsimplified_or2'
118; CHECK-NEXT:  Determining loop execution counts for: @unsimplified_or2
119; CHECK-NEXT:  Loop %loop: Unpredictable backedge-taken count.
120; CHECK-NEXT:  Loop %loop: Unpredictable constant max backedge-taken count.
121; CHECK-NEXT:  Loop %loop: Unpredictable symbolic max backedge-taken count.
122;
123entry:
124  br label %loop
125
126loop:
127  %iv = phi i32 [ 0, %entry ], [ %iv.inc, %loop ]
128  %iv.inc = add nsw i32 %iv, 1
129  %becond = icmp ule i32 %iv.inc, %n
130  %or = or i1 true, %becond
131  br i1 %or, label %loop, label %leave
132
133leave:
134  ret void
135}
136
137define void @unsimplified_or3(i32 %n) {
138; CHECK-LABEL: 'unsimplified_or3'
139; CHECK-NEXT:  Determining loop execution counts for: @unsimplified_or3
140; CHECK-NEXT:  Loop %loop: backedge-taken count is %n
141; CHECK-NEXT:  Loop %loop: constant max backedge-taken count is i32 -1
142; CHECK-NEXT:  Loop %loop: symbolic max backedge-taken count is %n
143; CHECK-NEXT:  Loop %loop: Trip multiple is 1
144;
145entry:
146  br label %loop
147
148loop:
149  %iv = phi i32 [ 0, %entry ], [ %iv.inc, %loop ]
150  %iv.inc = add nsw i32 %iv, 1
151  %becond = icmp ule i32 %iv.inc, %n
152  %or = or i1 false, %becond
153  br i1 %or, label %loop, label %leave
154
155leave:
156  ret void
157}
158
159define void @unsimplified_or4(i32 %n) {
160; CHECK-LABEL: 'unsimplified_or4'
161; CHECK-NEXT:  Determining loop execution counts for: @unsimplified_or4
162; CHECK-NEXT:  Loop %loop: backedge-taken count is %n
163; CHECK-NEXT:  Loop %loop: constant max backedge-taken count is i32 -1
164; CHECK-NEXT:  Loop %loop: symbolic max backedge-taken count is %n
165; CHECK-NEXT:  Loop %loop: Trip multiple is 1
166;
167entry:
168  br label %loop
169
170loop:
171  %iv = phi i32 [ 0, %entry ], [ %iv.inc, %loop ]
172  %iv.inc = add nsw i32 %iv, 1
173  %becond = icmp ule i32 %iv.inc, %n
174  %or = or i1 %becond, false
175  br i1 %or, label %loop, label %leave
176
177leave:
178  ret void
179}
180
181define void @reversed_and1(i32 %n) {
182; CHECK-LABEL: 'reversed_and1'
183; CHECK-NEXT:  Determining loop execution counts for: @reversed_and1
184; CHECK-NEXT:  Loop %loop: backedge-taken count is %n
185; CHECK-NEXT:  Loop %loop: constant max backedge-taken count is i32 -1
186; CHECK-NEXT:  Loop %loop: symbolic max backedge-taken count is %n
187; CHECK-NEXT:  Loop %loop: Trip multiple is 1
188;
189entry:
190  br label %loop
191
192loop:
193  %iv = phi i32 [ 0, %entry ], [ %iv.inc, %loop ]
194  %iv.inc = add nsw i32 %iv, 1
195  %becond = icmp ugt i32 %iv.inc, %n
196  %and = and i1 %becond, true
197  br i1 %and, label %leave, label %loop
198
199leave:
200  ret void
201}
202
203define void @reversed_and2(i32 %n) {
204; CHECK-LABEL: 'reversed_and2'
205; CHECK-NEXT:  Determining loop execution counts for: @reversed_and2
206; CHECK-NEXT:  Loop %loop: backedge-taken count is %n
207; CHECK-NEXT:  Loop %loop: constant max backedge-taken count is i32 -1
208; CHECK-NEXT:  Loop %loop: symbolic max backedge-taken count is %n
209; CHECK-NEXT:  Loop %loop: Trip multiple is 1
210;
211entry:
212  br label %loop
213
214loop:
215  %iv = phi i32 [ 0, %entry ], [ %iv.inc, %loop ]
216  %iv.inc = add nsw i32 %iv, 1
217  %becond = icmp ugt i32 %iv.inc, %n
218  %and = and i1 true, %becond
219  br i1 %and, label %leave, label %loop
220
221leave:
222  ret void
223}
224
225define void @reversed_and3(i32 %n) {
226; CHECK-LABEL: 'reversed_and3'
227; CHECK-NEXT:  Determining loop execution counts for: @reversed_and3
228; CHECK-NEXT:  Loop %loop: Unpredictable backedge-taken count.
229; CHECK-NEXT:  Loop %loop: Unpredictable constant max backedge-taken count.
230; CHECK-NEXT:  Loop %loop: Unpredictable symbolic max backedge-taken count.
231;
232entry:
233  br label %loop
234
235loop:
236  %iv = phi i32 [ 0, %entry ], [ %iv.inc, %loop ]
237  %iv.inc = add nsw i32 %iv, 1
238  %becond = icmp ugt i32 %iv.inc, %n
239  %and = and i1 false, %becond
240  br i1 %and, label %leave, label %loop
241
242leave:
243  ret void
244}
245
246define void @reversed_and4(i32 %n) {
247; CHECK-LABEL: 'reversed_and4'
248; CHECK-NEXT:  Determining loop execution counts for: @reversed_and4
249; CHECK-NEXT:  Loop %loop: Unpredictable backedge-taken count.
250; CHECK-NEXT:  Loop %loop: Unpredictable constant max backedge-taken count.
251; CHECK-NEXT:  Loop %loop: Unpredictable symbolic max backedge-taken count.
252;
253entry:
254  br label %loop
255
256loop:
257  %iv = phi i32 [ 0, %entry ], [ %iv.inc, %loop ]
258  %iv.inc = add nsw i32 %iv, 1
259  %becond = icmp ugt i32 %iv.inc, %n
260  %and = and i1 %becond, false
261  br i1 %and, label %leave, label %loop
262
263leave:
264  ret void
265}
266
267define void @reversed_or1(i32 %n) {
268; CHECK-LABEL: 'reversed_or1'
269; CHECK-NEXT:  Determining loop execution counts for: @reversed_or1
270; CHECK-NEXT:  Loop %loop: backedge-taken count is i1 false
271; CHECK-NEXT:  Loop %loop: constant max backedge-taken count is i1 false
272; CHECK-NEXT:  Loop %loop: symbolic max backedge-taken count is i1 false
273; CHECK-NEXT:  Loop %loop: Trip multiple is 1
274;
275entry:
276  br label %loop
277
278loop:
279  %iv = phi i32 [ 0, %entry ], [ %iv.inc, %loop ]
280  %iv.inc = add nsw i32 %iv, 1
281  %becond = icmp ugt i32 %iv.inc, %n
282  %or = or i1 %becond, true
283  br i1 %or, label %leave, label %loop
284
285leave:
286  ret void
287}
288
289define void @reversed_or2(i32 %n) {
290; CHECK-LABEL: 'reversed_or2'
291; CHECK-NEXT:  Determining loop execution counts for: @reversed_or2
292; CHECK-NEXT:  Loop %loop: backedge-taken count is i1 false
293; CHECK-NEXT:  Loop %loop: constant max backedge-taken count is i1 false
294; CHECK-NEXT:  Loop %loop: symbolic max backedge-taken count is i1 false
295; CHECK-NEXT:  Loop %loop: Trip multiple is 1
296;
297entry:
298  br label %loop
299
300loop:
301  %iv = phi i32 [ 0, %entry ], [ %iv.inc, %loop ]
302  %iv.inc = add nsw i32 %iv, 1
303  %becond = icmp ugt i32 %iv.inc, %n
304  %or = or i1 true, %becond
305  br i1 %or, label %leave, label %loop
306
307leave:
308  ret void
309}
310
311define void @reversed_or3(i32 %n) {
312; CHECK-LABEL: 'reversed_or3'
313; CHECK-NEXT:  Determining loop execution counts for: @reversed_or3
314; CHECK-NEXT:  Loop %loop: backedge-taken count is %n
315; CHECK-NEXT:  Loop %loop: constant max backedge-taken count is i32 -1
316; CHECK-NEXT:  Loop %loop: symbolic max backedge-taken count is %n
317; CHECK-NEXT:  Loop %loop: Trip multiple is 1
318;
319entry:
320  br label %loop
321
322loop:
323  %iv = phi i32 [ 0, %entry ], [ %iv.inc, %loop ]
324  %iv.inc = add nsw i32 %iv, 1
325  %becond = icmp ugt i32 %iv.inc, %n
326  %or = or i1 false, %becond
327  br i1 %or, label %leave, label %loop
328
329leave:
330  ret void
331}
332
333define void @reversed_or4(i32 %n) {
334; CHECK-LABEL: 'reversed_or4'
335; CHECK-NEXT:  Determining loop execution counts for: @reversed_or4
336; CHECK-NEXT:  Loop %loop: backedge-taken count is %n
337; CHECK-NEXT:  Loop %loop: constant max backedge-taken count is i32 -1
338; CHECK-NEXT:  Loop %loop: symbolic max backedge-taken count is %n
339; CHECK-NEXT:  Loop %loop: Trip multiple is 1
340;
341entry:
342  br label %loop
343
344loop:
345  %iv = phi i32 [ 0, %entry ], [ %iv.inc, %loop ]
346  %iv.inc = add nsw i32 %iv, 1
347  %becond = icmp ugt i32 %iv.inc, %n
348  %or = or i1 %becond, false
349  br i1 %or, label %leave, label %loop
350
351leave:
352  ret void
353}
354