Skip to content

Commit 4b8bc6b

Browse files
committed
[SCEV] Add additional tests for finite loop trip counts (NFC)
Add post-inc variations of tests.
1 parent 33c4421 commit 4b8bc6b

File tree

1 file changed

+120
-24
lines changed

1 file changed

+120
-24
lines changed

llvm/test/Analysis/ScalarEvolution/finite-trip-count.ll

Lines changed: 120 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@ target triple = "x86_64-unknown-linux-gnu"
66

77
declare void @non_exit_use(i32 %i) #0
88

9-
define void @SLE(i32 %len) willreturn {
10-
; CHECK-LABEL: 'SLE'
11-
; CHECK-NEXT: Determining loop execution counts for: @SLE
9+
define void @sle_pre_inc(i32 %len) willreturn {
10+
; CHECK-LABEL: 'sle_pre_inc'
11+
; CHECK-NEXT: Determining loop execution counts for: @sle_pre_inc
1212
; CHECK-NEXT: Loop %for.body: backedge-taken count is (0 smax (1 + %len))
1313
; CHECK-NEXT: Loop %for.body: constant max backedge-taken count is 2147483647
1414
; CHECK-NEXT: Loop %for.body: symbolic max backedge-taken count is (0 smax (1 + %len))
@@ -30,9 +30,33 @@ for.end:
3030
ret void
3131
}
3232

33-
define void @SLE_infinite(i32 %len) {
34-
; CHECK-LABEL: 'SLE_infinite'
35-
; CHECK-NEXT: Determining loop execution counts for: @SLE_infinite
33+
define void @sle_post_inc(i32 %len) willreturn {
34+
; CHECK-LABEL: 'sle_post_inc'
35+
; CHECK-NEXT: Determining loop execution counts for: @sle_post_inc
36+
; CHECK-NEXT: Loop %for.body: backedge-taken count is (-1 + (1 smax (1 + %len)))<nsw>
37+
; CHECK-NEXT: Loop %for.body: constant max backedge-taken count is 2147483646
38+
; CHECK-NEXT: Loop %for.body: symbolic max backedge-taken count is (-1 + (1 smax (1 + %len)))<nsw>
39+
; CHECK-NEXT: Loop %for.body: Predicated backedge-taken count is (-1 + (1 smax (1 + %len)))<nsw>
40+
; CHECK-NEXT: Predicates:
41+
; CHECK: Loop %for.body: Trip multiple is 1
42+
;
43+
entry:
44+
br label %for.body
45+
46+
for.body:
47+
%iv = phi i32 [ %inc, %for.body ], [ 0, %entry ]
48+
call void @non_exit_use(i32 %iv) nounwind willreturn
49+
%inc = add i32 %iv, 1
50+
%cmp = icmp sle i32 %inc, %len
51+
br i1 %cmp, label %for.body, label %for.end
52+
53+
for.end:
54+
ret void
55+
}
56+
57+
define void @sle_pre_inc_infinite(i32 %len) {
58+
; CHECK-LABEL: 'sle_pre_inc_infinite'
59+
; CHECK-NEXT: Determining loop execution counts for: @sle_pre_inc_infinite
3660
; CHECK-NEXT: Loop %for.body: Unpredictable backedge-taken count.
3761
; CHECK-NEXT: Loop %for.body: Unpredictable constant max backedge-taken count.
3862
; CHECK-NEXT: Loop %for.body: Unpredictable symbolic max backedge-taken count.
@@ -52,9 +76,9 @@ for.end:
5276
ret void
5377
}
5478

55-
define void @ULE(i32 %len) willreturn {
56-
; CHECK-LABEL: 'ULE'
57-
; CHECK-NEXT: Determining loop execution counts for: @ULE
79+
define void @ule_pre_inc(i32 %len) willreturn {
80+
; CHECK-LABEL: 'ule_pre_inc'
81+
; CHECK-NEXT: Determining loop execution counts for: @ule_pre_inc
5882
; CHECK-NEXT: Loop %for.body: backedge-taken count is (1 + %len)
5983
; CHECK-NEXT: Loop %for.body: constant max backedge-taken count is -1
6084
; CHECK-NEXT: Loop %for.body: symbolic max backedge-taken count is (1 + %len)
@@ -76,9 +100,33 @@ for.end:
76100
ret void
77101
}
78102

79-
define void @ULE_infinite(i32 %len) {
80-
; CHECK-LABEL: 'ULE_infinite'
81-
; CHECK-NEXT: Determining loop execution counts for: @ULE_infinite
103+
define void @ule_post_inc(i32 %len) willreturn {
104+
; CHECK-LABEL: 'ule_post_inc'
105+
; CHECK-NEXT: Determining loop execution counts for: @ule_post_inc
106+
; CHECK-NEXT: Loop %for.body: backedge-taken count is (-1 + (1 umax (1 + %len)))
107+
; CHECK-NEXT: Loop %for.body: constant max backedge-taken count is -2
108+
; CHECK-NEXT: Loop %for.body: symbolic max backedge-taken count is (-1 + (1 umax (1 + %len)))
109+
; CHECK-NEXT: Loop %for.body: Predicated backedge-taken count is (-1 + (1 umax (1 + %len)))
110+
; CHECK-NEXT: Predicates:
111+
; CHECK: Loop %for.body: Trip multiple is 1
112+
;
113+
entry:
114+
br label %for.body
115+
116+
for.body:
117+
%iv = phi i32 [ %inc, %for.body ], [ 0, %entry ]
118+
call void @non_exit_use(i32 %iv) nounwind willreturn
119+
%inc = add i32 %iv, 1
120+
%cmp = icmp ule i32 %inc, %len
121+
br i1 %cmp, label %for.body, label %for.end
122+
123+
for.end:
124+
ret void
125+
}
126+
127+
define void @ule_pre_inc_infinite(i32 %len) {
128+
; CHECK-LABEL: 'ule_pre_inc_infinite'
129+
; CHECK-NEXT: Determining loop execution counts for: @ule_pre_inc_infinite
82130
; CHECK-NEXT: Loop %for.body: Unpredictable backedge-taken count.
83131
; CHECK-NEXT: Loop %for.body: Unpredictable constant max backedge-taken count.
84132
; CHECK-NEXT: Loop %for.body: Unpredictable symbolic max backedge-taken count.
@@ -98,9 +146,9 @@ for.end:
98146
ret void
99147
}
100148

101-
define void @SGE(i32 %end) willreturn {
102-
; CHECK-LABEL: 'SGE'
103-
; CHECK-NEXT: Determining loop execution counts for: @SGE
149+
define void @sge_pre_inc(i32 %end) willreturn {
150+
; CHECK-LABEL: 'sge_pre_inc'
151+
; CHECK-NEXT: Determining loop execution counts for: @sge_pre_inc
104152
; CHECK-NEXT: Loop %for.body: backedge-taken count is (100 + (-1 * (100 smin (-1 + %end))))
105153
; CHECK-NEXT: Loop %for.body: constant max backedge-taken count is -2147483548
106154
; CHECK-NEXT: Loop %for.body: symbolic max backedge-taken count is (100 + (-1 * (100 smin (-1 + %end))))
@@ -122,9 +170,33 @@ for.end:
122170
ret void
123171
}
124172

125-
define void @SGE_infinite(i32 %end) {
126-
; CHECK-LABEL: 'SGE_infinite'
127-
; CHECK-NEXT: Determining loop execution counts for: @SGE_infinite
173+
define void @sge_post_inc(i32 %end) willreturn {
174+
; CHECK-LABEL: 'sge_post_inc'
175+
; CHECK-NEXT: Determining loop execution counts for: @sge_post_inc
176+
; CHECK-NEXT: Loop %for.body: backedge-taken count is (100 + (-1 * (100 smin (-1 + %end))))
177+
; CHECK-NEXT: Loop %for.body: constant max backedge-taken count is -2147483548
178+
; CHECK-NEXT: Loop %for.body: symbolic max backedge-taken count is (100 + (-1 * (100 smin (-1 + %end))))
179+
; CHECK-NEXT: Loop %for.body: Predicated backedge-taken count is (100 + (-1 * (100 smin (-1 + %end))))
180+
; CHECK-NEXT: Predicates:
181+
; CHECK: Loop %for.body: Trip multiple is 1
182+
;
183+
entry:
184+
br label %for.body
185+
186+
for.body:
187+
%iv = phi i32 [ %inc, %for.body ], [ 100, %entry ]
188+
call void @non_exit_use(i32 %iv) nounwind willreturn
189+
%inc = add i32 %iv, -1
190+
%cmp = icmp sge i32 %iv, %end
191+
br i1 %cmp, label %for.body, label %for.end
192+
193+
for.end:
194+
ret void
195+
}
196+
197+
define void @sge_pre_inc_infinite(i32 %end) {
198+
; CHECK-LABEL: 'sge_pre_inc_infinite'
199+
; CHECK-NEXT: Determining loop execution counts for: @sge_pre_inc_infinite
128200
; CHECK-NEXT: Loop %for.body: Unpredictable backedge-taken count.
129201
; CHECK-NEXT: Loop %for.body: Unpredictable constant max backedge-taken count.
130202
; CHECK-NEXT: Loop %for.body: Unpredictable symbolic max backedge-taken count.
@@ -144,9 +216,9 @@ for.end:
144216
ret void
145217
}
146218

147-
define void @UGE(i32 %end) willreturn {
148-
; CHECK-LABEL: 'UGE'
149-
; CHECK-NEXT: Determining loop execution counts for: @UGE
219+
define void @use_pre_inc(i32 %end) willreturn {
220+
; CHECK-LABEL: 'use_pre_inc'
221+
; CHECK-NEXT: Determining loop execution counts for: @use_pre_inc
150222
; CHECK-NEXT: Loop %for.body: backedge-taken count is (100 + (-1 * (100 umin (-1 + %end)))<nsw>)<nsw>
151223
; CHECK-NEXT: Loop %for.body: constant max backedge-taken count is 100
152224
; CHECK-NEXT: Loop %for.body: symbolic max backedge-taken count is (100 + (-1 * (100 umin (-1 + %end)))<nsw>)<nsw>
@@ -168,9 +240,33 @@ for.end:
168240
ret void
169241
}
170242

171-
define void @UGE_infinite(i32 %end) {
172-
; CHECK-LABEL: 'UGE_infinite'
173-
; CHECK-NEXT: Determining loop execution counts for: @UGE_infinite
243+
define void @use_post_inc(i32 %end) willreturn {
244+
; CHECK-LABEL: 'use_post_inc'
245+
; CHECK-NEXT: Determining loop execution counts for: @use_post_inc
246+
; CHECK-NEXT: Loop %for.body: backedge-taken count is (99 + (-1 * (99 umin (-1 + %end)))<nsw>)<nsw>
247+
; CHECK-NEXT: Loop %for.body: constant max backedge-taken count is 99
248+
; CHECK-NEXT: Loop %for.body: symbolic max backedge-taken count is (99 + (-1 * (99 umin (-1 + %end)))<nsw>)<nsw>
249+
; CHECK-NEXT: Loop %for.body: Predicated backedge-taken count is (99 + (-1 * (99 umin (-1 + %end)))<nsw>)<nsw>
250+
; CHECK-NEXT: Predicates:
251+
; CHECK: Loop %for.body: Trip multiple is 1
252+
;
253+
entry:
254+
br label %for.body
255+
256+
for.body:
257+
%iv = phi i32 [ %inc, %for.body ], [ 100, %entry ]
258+
call void @non_exit_use(i32 %iv) nounwind willreturn
259+
%inc = add i32 %iv, -1
260+
%cmp = icmp uge i32 %inc, %end
261+
br i1 %cmp, label %for.body, label %for.end
262+
263+
for.end:
264+
ret void
265+
}
266+
267+
define void @uge_pre_inc_infinite(i32 %end) {
268+
; CHECK-LABEL: 'uge_pre_inc_infinite'
269+
; CHECK-NEXT: Determining loop execution counts for: @uge_pre_inc_infinite
174270
; CHECK-NEXT: Loop %for.body: Unpredictable backedge-taken count.
175271
; CHECK-NEXT: Loop %for.body: Unpredictable constant max backedge-taken count.
176272
; CHECK-NEXT: Loop %for.body: Unpredictable symbolic max backedge-taken count.

0 commit comments

Comments
 (0)