@@ -58,6 +58,12 @@ define void @test_well_defined_infinite_st(i32 %N) mustprogress {
58
58
; CHECK-NEXT: Loop %for.body: Unpredictable backedge-taken count.
59
59
; CHECK-NEXT: Loop %for.body: Unpredictable constant max backedge-taken count.
60
60
; CHECK-NEXT: Loop %for.body: Unpredictable symbolic max backedge-taken count.
61
+ ; CHECK-NEXT: Loop %for.body: Predicated backedge-taken count is ((-2 + %N) /u 2)
62
+ ; CHECK-NEXT: Predicates:
63
+ ; CHECK-NEXT: Equal predicate: (zext i1 (trunc i32 %N to i1) to i32) == 0
64
+ ; CHECK-NEXT: Loop %for.body: Predicated symbolic max backedge-taken count is ((-2 + %N) /u 2)
65
+ ; CHECK-NEXT: Predicates:
66
+ ; CHECK-NEXT: Equal predicate: (zext i1 (trunc i32 %N to i1) to i32) == 0
61
67
;
62
68
entry:
63
69
br label %for.body
@@ -79,6 +85,12 @@ define void @test_well_defined_infinite_ld(i32 %N) mustprogress {
79
85
; CHECK-NEXT: Loop %for.body: Unpredictable backedge-taken count.
80
86
; CHECK-NEXT: Loop %for.body: Unpredictable constant max backedge-taken count.
81
87
; CHECK-NEXT: Loop %for.body: Unpredictable symbolic max backedge-taken count.
88
+ ; CHECK-NEXT: Loop %for.body: Predicated backedge-taken count is ((-2 + %N) /u 2)
89
+ ; CHECK-NEXT: Predicates:
90
+ ; CHECK-NEXT: Equal predicate: (zext i1 (trunc i32 %N to i1) to i32) == 0
91
+ ; CHECK-NEXT: Loop %for.body: Predicated symbolic max backedge-taken count is ((-2 + %N) /u 2)
92
+ ; CHECK-NEXT: Predicates:
93
+ ; CHECK-NEXT: Equal predicate: (zext i1 (trunc i32 %N to i1) to i32) == 0
82
94
;
83
95
entry:
84
96
br label %for.body
@@ -100,6 +112,12 @@ define void @test_no_mustprogress(i32 %N) {
100
112
; CHECK-NEXT: Loop %for.body: Unpredictable backedge-taken count.
101
113
; CHECK-NEXT: Loop %for.body: Unpredictable constant max backedge-taken count.
102
114
; CHECK-NEXT: Loop %for.body: Unpredictable symbolic max backedge-taken count.
115
+ ; CHECK-NEXT: Loop %for.body: Predicated backedge-taken count is ((-2 + %N) /u 2)
116
+ ; CHECK-NEXT: Predicates:
117
+ ; CHECK-NEXT: Equal predicate: (zext i1 (trunc i32 %N to i1) to i32) == 0
118
+ ; CHECK-NEXT: Loop %for.body: Predicated symbolic max backedge-taken count is ((-2 + %N) /u 2)
119
+ ; CHECK-NEXT: Predicates:
120
+ ; CHECK-NEXT: Equal predicate: (zext i1 (trunc i32 %N to i1) to i32) == 0
103
121
;
104
122
entry:
105
123
br label %for.body
@@ -187,6 +205,12 @@ define void @test_abnormal_exit(i32 %N) mustprogress {
187
205
; CHECK-NEXT: Loop %for.body: Unpredictable backedge-taken count.
188
206
; CHECK-NEXT: Loop %for.body: Unpredictable constant max backedge-taken count.
189
207
; CHECK-NEXT: Loop %for.body: Unpredictable symbolic max backedge-taken count.
208
+ ; CHECK-NEXT: Loop %for.body: Predicated backedge-taken count is ((-2 + %N) /u 2)
209
+ ; CHECK-NEXT: Predicates:
210
+ ; CHECK-NEXT: Equal predicate: (zext i1 (trunc i32 %N to i1) to i32) == 0
211
+ ; CHECK-NEXT: Loop %for.body: Predicated symbolic max backedge-taken count is ((-2 + %N) /u 2)
212
+ ; CHECK-NEXT: Predicates:
213
+ ; CHECK-NEXT: Equal predicate: (zext i1 (trunc i32 %N to i1) to i32) == 0
190
214
;
191
215
entry:
192
216
br label %for.body
@@ -209,10 +233,24 @@ define void @test_other_exit(i32 %N) mustprogress {
209
233
; CHECK-NEXT: Loop %for.body: <multiple exits> Unpredictable backedge-taken count.
210
234
; CHECK-NEXT: exit count for for.body: i32 9
211
235
; CHECK-NEXT: exit count for for.latch: ***COULDNOTCOMPUTE***
236
+ ; CHECK-NEXT: predicated exit count for for.latch: ((-2 + %N) /u 2)
237
+ ; CHECK-NEXT: Predicates:
238
+ ; CHECK-NEXT: Equal predicate: (zext i1 (trunc i32 %N to i1) to i32) == 0
239
+ ; CHECK-EMPTY:
212
240
; CHECK-NEXT: Loop %for.body: constant max backedge-taken count is i32 9
213
241
; CHECK-NEXT: Loop %for.body: symbolic max backedge-taken count is i32 9
214
242
; CHECK-NEXT: symbolic max exit count for for.body: i32 9
215
243
; CHECK-NEXT: symbolic max exit count for for.latch: ***COULDNOTCOMPUTE***
244
+ ; CHECK-NEXT: predicated symbolic max exit count for for.latch: ((-2 + %N) /u 2)
245
+ ; CHECK-NEXT: Predicates:
246
+ ; CHECK-NEXT: Equal predicate: (zext i1 (trunc i32 %N to i1) to i32) == 0
247
+ ; CHECK-EMPTY:
248
+ ; CHECK-NEXT: Loop %for.body: Predicated backedge-taken count is (9 umin ((-2 + %N) /u 2))
249
+ ; CHECK-NEXT: Predicates:
250
+ ; CHECK-NEXT: Equal predicate: (zext i1 (trunc i32 %N to i1) to i32) == 0
251
+ ; CHECK-NEXT: Loop %for.body: Predicated symbolic max backedge-taken count is (9 umin ((-2 + %N) /u 2))
252
+ ; CHECK-NEXT: Predicates:
253
+ ; CHECK-NEXT: Equal predicate: (zext i1 (trunc i32 %N to i1) to i32) == 0
216
254
;
217
255
entry:
218
256
br label %for.body
@@ -264,6 +302,14 @@ define void @test_sext(i64 %N) mustprogress {
264
302
; CHECK-NEXT: Loop %for.body: Unpredictable backedge-taken count.
265
303
; CHECK-NEXT: Loop %for.body: Unpredictable constant max backedge-taken count.
266
304
; CHECK-NEXT: Loop %for.body: Unpredictable symbolic max backedge-taken count.
305
+ ; CHECK-NEXT: Loop %for.body: Predicated backedge-taken count is (%N /u 2)
306
+ ; CHECK-NEXT: Predicates:
307
+ ; CHECK-NEXT: {0,+,2}<%for.body> Added Flags: <nssw>
308
+ ; CHECK-NEXT: Equal predicate: (zext i1 (trunc i64 %N to i1) to i64) == 0
309
+ ; CHECK-NEXT: Loop %for.body: Predicated symbolic max backedge-taken count is (%N /u 2)
310
+ ; CHECK-NEXT: Predicates:
311
+ ; CHECK-NEXT: {0,+,2}<%for.body> Added Flags: <nssw>
312
+ ; CHECK-NEXT: Equal predicate: (zext i1 (trunc i64 %N to i1) to i64) == 0
267
313
;
268
314
entry:
269
315
br label %for.body
@@ -285,6 +331,16 @@ define void @test_zext_of_sext(i64 %N) mustprogress {
285
331
; CHECK-NEXT: Loop %for.body: Unpredictable backedge-taken count.
286
332
; CHECK-NEXT: Loop %for.body: Unpredictable constant max backedge-taken count.
287
333
; CHECK-NEXT: Loop %for.body: Unpredictable symbolic max backedge-taken count.
334
+ ; CHECK-NEXT: Loop %for.body: Predicated backedge-taken count is (%N /u 2)
335
+ ; CHECK-NEXT: Predicates:
336
+ ; CHECK-NEXT: {0,+,2}<%for.body> Added Flags: <nssw>
337
+ ; CHECK-NEXT: {0,+,2}<%for.body> Added Flags: <nusw>
338
+ ; CHECK-NEXT: Equal predicate: (zext i1 (trunc i64 %N to i1) to i64) == 0
339
+ ; CHECK-NEXT: Loop %for.body: Predicated symbolic max backedge-taken count is (%N /u 2)
340
+ ; CHECK-NEXT: Predicates:
341
+ ; CHECK-NEXT: {0,+,2}<%for.body> Added Flags: <nssw>
342
+ ; CHECK-NEXT: {0,+,2}<%for.body> Added Flags: <nusw>
343
+ ; CHECK-NEXT: Equal predicate: (zext i1 (trunc i64 %N to i1) to i64) == 0
288
344
;
289
345
entry:
290
346
br label %for.body
@@ -307,6 +363,14 @@ define void @test_zext_offset(i64 %N) mustprogress {
307
363
; CHECK-NEXT: Loop %for.body: Unpredictable backedge-taken count.
308
364
; CHECK-NEXT: Loop %for.body: Unpredictable constant max backedge-taken count.
309
365
; CHECK-NEXT: Loop %for.body: Unpredictable symbolic max backedge-taken count.
366
+ ; CHECK-NEXT: Loop %for.body: Predicated backedge-taken count is ((-21 + %N) /u 2)
367
+ ; CHECK-NEXT: Predicates:
368
+ ; CHECK-NEXT: {0,+,2}<%for.body> Added Flags: <nusw>
369
+ ; CHECK-NEXT: Equal predicate: (zext i1 (true + (trunc i64 %N to i1)) to i64) == 0
370
+ ; CHECK-NEXT: Loop %for.body: Predicated symbolic max backedge-taken count is ((-21 + %N) /u 2)
371
+ ; CHECK-NEXT: Predicates:
372
+ ; CHECK-NEXT: {0,+,2}<%for.body> Added Flags: <nusw>
373
+ ; CHECK-NEXT: Equal predicate: (zext i1 (true + (trunc i64 %N to i1)) to i64) == 0
310
374
;
311
375
entry:
312
376
br label %for.body
@@ -329,6 +393,14 @@ define void @test_sext_offset(i64 %N) mustprogress {
329
393
; CHECK-NEXT: Loop %for.body: Unpredictable backedge-taken count.
330
394
; CHECK-NEXT: Loop %for.body: Unpredictable constant max backedge-taken count.
331
395
; CHECK-NEXT: Loop %for.body: Unpredictable symbolic max backedge-taken count.
396
+ ; CHECK-NEXT: Loop %for.body: Predicated backedge-taken count is ((-21 + %N) /u 2)
397
+ ; CHECK-NEXT: Predicates:
398
+ ; CHECK-NEXT: {0,+,2}<%for.body> Added Flags: <nssw>
399
+ ; CHECK-NEXT: Equal predicate: (zext i1 (true + (trunc i64 %N to i1)) to i64) == 0
400
+ ; CHECK-NEXT: Loop %for.body: Predicated symbolic max backedge-taken count is ((-21 + %N) /u 2)
401
+ ; CHECK-NEXT: Predicates:
402
+ ; CHECK-NEXT: {0,+,2}<%for.body> Added Flags: <nssw>
403
+ ; CHECK-NEXT: Equal predicate: (zext i1 (true + (trunc i64 %N to i1)) to i64) == 0
332
404
;
333
405
entry:
334
406
br label %for.body
0 commit comments