@@ -6,9 +6,9 @@ target triple = "x86_64-unknown-linux-gnu"
6
6
7
7
declare void @non_exit_use (i32 %i ) #0
8
8
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
12
12
; CHECK-NEXT: Loop %for.body: backedge-taken count is (0 smax (1 + %len))
13
13
; CHECK-NEXT: Loop %for.body: constant max backedge-taken count is 2147483647
14
14
; CHECK-NEXT: Loop %for.body: symbolic max backedge-taken count is (0 smax (1 + %len))
@@ -30,9 +30,33 @@ for.end:
30
30
ret void
31
31
}
32
32
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
36
60
; CHECK-NEXT: Loop %for.body: Unpredictable backedge-taken count.
37
61
; CHECK-NEXT: Loop %for.body: Unpredictable constant max backedge-taken count.
38
62
; CHECK-NEXT: Loop %for.body: Unpredictable symbolic max backedge-taken count.
@@ -52,9 +76,9 @@ for.end:
52
76
ret void
53
77
}
54
78
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
58
82
; CHECK-NEXT: Loop %for.body: backedge-taken count is (1 + %len)
59
83
; CHECK-NEXT: Loop %for.body: constant max backedge-taken count is -1
60
84
; CHECK-NEXT: Loop %for.body: symbolic max backedge-taken count is (1 + %len)
@@ -76,9 +100,33 @@ for.end:
76
100
ret void
77
101
}
78
102
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
82
130
; CHECK-NEXT: Loop %for.body: Unpredictable backedge-taken count.
83
131
; CHECK-NEXT: Loop %for.body: Unpredictable constant max backedge-taken count.
84
132
; CHECK-NEXT: Loop %for.body: Unpredictable symbolic max backedge-taken count.
@@ -98,9 +146,9 @@ for.end:
98
146
ret void
99
147
}
100
148
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
104
152
; CHECK-NEXT: Loop %for.body: backedge-taken count is (100 + (-1 * (100 smin (-1 + %end))))
105
153
; CHECK-NEXT: Loop %for.body: constant max backedge-taken count is -2147483548
106
154
; CHECK-NEXT: Loop %for.body: symbolic max backedge-taken count is (100 + (-1 * (100 smin (-1 + %end))))
@@ -122,9 +170,33 @@ for.end:
122
170
ret void
123
171
}
124
172
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
128
200
; CHECK-NEXT: Loop %for.body: Unpredictable backedge-taken count.
129
201
; CHECK-NEXT: Loop %for.body: Unpredictable constant max backedge-taken count.
130
202
; CHECK-NEXT: Loop %for.body: Unpredictable symbolic max backedge-taken count.
@@ -144,9 +216,9 @@ for.end:
144
216
ret void
145
217
}
146
218
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
150
222
; CHECK-NEXT: Loop %for.body: backedge-taken count is (100 + (-1 * (100 umin (-1 + %end)))<nsw>)<nsw>
151
223
; CHECK-NEXT: Loop %for.body: constant max backedge-taken count is 100
152
224
; 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:
168
240
ret void
169
241
}
170
242
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
174
270
; CHECK-NEXT: Loop %for.body: Unpredictable backedge-taken count.
175
271
; CHECK-NEXT: Loop %for.body: Unpredictable constant max backedge-taken count.
176
272
; CHECK-NEXT: Loop %for.body: Unpredictable symbolic max backedge-taken count.
0 commit comments