@@ -58,6 +58,15 @@ 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 constant max backedge-taken count is i32 2147483647
65
+ ; CHECK-NEXT: Predicates:
66
+ ; CHECK-NEXT: Equal predicate: (zext i1 (trunc i32 %N to i1) to i32) == 0
67
+ ; CHECK-NEXT: Loop %for.body: Predicated symbolic max backedge-taken count is ((-2 + %N) /u 2)
68
+ ; CHECK-NEXT: Predicates:
69
+ ; CHECK-NEXT: Equal predicate: (zext i1 (trunc i32 %N to i1) to i32) == 0
61
70
;
62
71
entry:
63
72
br label %for.body
@@ -79,6 +88,15 @@ define void @test_well_defined_infinite_ld(i32 %N) mustprogress {
79
88
; CHECK-NEXT: Loop %for.body: Unpredictable backedge-taken count.
80
89
; CHECK-NEXT: Loop %for.body: Unpredictable constant max backedge-taken count.
81
90
; CHECK-NEXT: Loop %for.body: Unpredictable symbolic max backedge-taken count.
91
+ ; CHECK-NEXT: Loop %for.body: Predicated 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
94
+ ; CHECK-NEXT: Loop %for.body: Predicated constant max backedge-taken count is i32 2147483647
95
+ ; CHECK-NEXT: Predicates:
96
+ ; CHECK-NEXT: Equal predicate: (zext i1 (trunc i32 %N to i1) to i32) == 0
97
+ ; CHECK-NEXT: Loop %for.body: Predicated symbolic max backedge-taken count is ((-2 + %N) /u 2)
98
+ ; CHECK-NEXT: Predicates:
99
+ ; CHECK-NEXT: Equal predicate: (zext i1 (trunc i32 %N to i1) to i32) == 0
82
100
;
83
101
entry:
84
102
br label %for.body
@@ -100,6 +118,15 @@ define void @test_no_mustprogress(i32 %N) {
100
118
; CHECK-NEXT: Loop %for.body: Unpredictable backedge-taken count.
101
119
; CHECK-NEXT: Loop %for.body: Unpredictable constant max backedge-taken count.
102
120
; CHECK-NEXT: Loop %for.body: Unpredictable symbolic max backedge-taken count.
121
+ ; CHECK-NEXT: Loop %for.body: Predicated backedge-taken count is ((-2 + %N) /u 2)
122
+ ; CHECK-NEXT: Predicates:
123
+ ; CHECK-NEXT: Equal predicate: (zext i1 (trunc i32 %N to i1) to i32) == 0
124
+ ; CHECK-NEXT: Loop %for.body: Predicated constant max backedge-taken count is i32 2147483647
125
+ ; CHECK-NEXT: Predicates:
126
+ ; CHECK-NEXT: Equal predicate: (zext i1 (trunc i32 %N to i1) to i32) == 0
127
+ ; CHECK-NEXT: Loop %for.body: Predicated symbolic max backedge-taken count is ((-2 + %N) /u 2)
128
+ ; CHECK-NEXT: Predicates:
129
+ ; CHECK-NEXT: Equal predicate: (zext i1 (trunc i32 %N to i1) to i32) == 0
103
130
;
104
131
entry:
105
132
br label %for.body
@@ -187,6 +214,15 @@ define void @test_abnormal_exit(i32 %N) mustprogress {
187
214
; CHECK-NEXT: Loop %for.body: Unpredictable backedge-taken count.
188
215
; CHECK-NEXT: Loop %for.body: Unpredictable constant max backedge-taken count.
189
216
; CHECK-NEXT: Loop %for.body: Unpredictable symbolic max backedge-taken count.
217
+ ; CHECK-NEXT: Loop %for.body: Predicated backedge-taken count is ((-2 + %N) /u 2)
218
+ ; CHECK-NEXT: Predicates:
219
+ ; CHECK-NEXT: Equal predicate: (zext i1 (trunc i32 %N to i1) to i32) == 0
220
+ ; CHECK-NEXT: Loop %for.body: Predicated constant max backedge-taken count is i32 2147483647
221
+ ; CHECK-NEXT: Predicates:
222
+ ; CHECK-NEXT: Equal predicate: (zext i1 (trunc i32 %N to i1) to i32) == 0
223
+ ; CHECK-NEXT: Loop %for.body: Predicated symbolic max backedge-taken count is ((-2 + %N) /u 2)
224
+ ; CHECK-NEXT: Predicates:
225
+ ; CHECK-NEXT: Equal predicate: (zext i1 (trunc i32 %N to i1) to i32) == 0
190
226
;
191
227
entry:
192
228
br label %for.body
@@ -209,10 +245,24 @@ define void @test_other_exit(i32 %N) mustprogress {
209
245
; CHECK-NEXT: Loop %for.body: <multiple exits> Unpredictable backedge-taken count.
210
246
; CHECK-NEXT: exit count for for.body: i32 9
211
247
; CHECK-NEXT: exit count for for.latch: ***COULDNOTCOMPUTE***
248
+ ; CHECK-NEXT: predicated exit count for for.latch: ((-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-EMPTY:
212
252
; CHECK-NEXT: Loop %for.body: constant max backedge-taken count is i32 9
213
253
; CHECK-NEXT: Loop %for.body: symbolic max backedge-taken count is i32 9
214
254
; CHECK-NEXT: symbolic max exit count for for.body: i32 9
215
255
; CHECK-NEXT: symbolic max exit count for for.latch: ***COULDNOTCOMPUTE***
256
+ ; CHECK-NEXT: predicated symbolic max exit count for for.latch: ((-2 + %N) /u 2)
257
+ ; CHECK-NEXT: Predicates:
258
+ ; CHECK-NEXT: Equal predicate: (zext i1 (trunc i32 %N to i1) to i32) == 0
259
+ ; CHECK-EMPTY:
260
+ ; CHECK-NEXT: Loop %for.body: Predicated backedge-taken count is (9 umin ((-2 + %N) /u 2))
261
+ ; CHECK-NEXT: Predicates:
262
+ ; CHECK-NEXT: Equal predicate: (zext i1 (trunc i32 %N to i1) to i32) == 0
263
+ ; CHECK-NEXT: Loop %for.body: Predicated symbolic max backedge-taken count is (9 umin ((-2 + %N) /u 2))
264
+ ; CHECK-NEXT: Predicates:
265
+ ; CHECK-NEXT: Equal predicate: (zext i1 (trunc i32 %N to i1) to i32) == 0
216
266
;
217
267
entry:
218
268
br label %for.body
@@ -267,6 +317,18 @@ define void @test_sext(i64 %N) mustprogress {
267
317
; CHECK-NEXT: Loop %for.body: Unpredictable backedge-taken count.
268
318
; CHECK-NEXT: Loop %for.body: Unpredictable constant max backedge-taken count.
269
319
; CHECK-NEXT: Loop %for.body: Unpredictable symbolic max backedge-taken count.
320
+ ; CHECK-NEXT: Loop %for.body: Predicated backedge-taken count is (%N /u 2)
321
+ ; CHECK-NEXT: Predicates:
322
+ ; CHECK-NEXT: {0,+,2}<%for.body> Added Flags: <nssw>
323
+ ; CHECK-NEXT: Equal predicate: (zext i1 (trunc i64 %N to i1) to i64) == 0
324
+ ; CHECK-NEXT: Loop %for.body: Predicated constant max backedge-taken count is i64 9223372036854775807
325
+ ; CHECK-NEXT: Predicates:
326
+ ; CHECK-NEXT: {0,+,2}<%for.body> Added Flags: <nssw>
327
+ ; CHECK-NEXT: Equal predicate: (zext i1 (trunc i64 %N to i1) to i64) == 0
328
+ ; CHECK-NEXT: Loop %for.body: Predicated symbolic max backedge-taken count is (%N /u 2)
329
+ ; CHECK-NEXT: Predicates:
330
+ ; CHECK-NEXT: {0,+,2}<%for.body> Added Flags: <nssw>
331
+ ; CHECK-NEXT: Equal predicate: (zext i1 (trunc i64 %N to i1) to i64) == 0
270
332
;
271
333
entry:
272
334
br label %for.body
@@ -288,6 +350,21 @@ define void @test_zext_of_sext(i64 %N) mustprogress {
288
350
; CHECK-NEXT: Loop %for.body: Unpredictable backedge-taken count.
289
351
; CHECK-NEXT: Loop %for.body: Unpredictable constant max backedge-taken count.
290
352
; CHECK-NEXT: Loop %for.body: Unpredictable symbolic max backedge-taken count.
353
+ ; CHECK-NEXT: Loop %for.body: Predicated backedge-taken count is (%N /u 2)
354
+ ; CHECK-NEXT: Predicates:
355
+ ; CHECK-NEXT: {0,+,2}<%for.body> Added Flags: <nssw>
356
+ ; CHECK-NEXT: {0,+,2}<%for.body> Added Flags: <nusw>
357
+ ; CHECK-NEXT: Equal predicate: (zext i1 (trunc i64 %N to i1) to i64) == 0
358
+ ; CHECK-NEXT: Loop %for.body: Predicated constant max backedge-taken count is i64 9223372036854775807
359
+ ; CHECK-NEXT: Predicates:
360
+ ; CHECK-NEXT: {0,+,2}<%for.body> Added Flags: <nssw>
361
+ ; CHECK-NEXT: {0,+,2}<%for.body> Added Flags: <nusw>
362
+ ; CHECK-NEXT: Equal predicate: (zext i1 (trunc i64 %N to i1) to i64) == 0
363
+ ; CHECK-NEXT: Loop %for.body: Predicated symbolic max backedge-taken count is (%N /u 2)
364
+ ; CHECK-NEXT: Predicates:
365
+ ; CHECK-NEXT: {0,+,2}<%for.body> Added Flags: <nssw>
366
+ ; CHECK-NEXT: {0,+,2}<%for.body> Added Flags: <nusw>
367
+ ; CHECK-NEXT: Equal predicate: (zext i1 (trunc i64 %N to i1) to i64) == 0
291
368
;
292
369
entry:
293
370
br label %for.body
@@ -310,6 +387,18 @@ define void @test_zext_offset(i64 %N) mustprogress {
310
387
; CHECK-NEXT: Loop %for.body: Unpredictable backedge-taken count.
311
388
; CHECK-NEXT: Loop %for.body: Unpredictable constant max backedge-taken count.
312
389
; CHECK-NEXT: Loop %for.body: Unpredictable symbolic max backedge-taken count.
390
+ ; CHECK-NEXT: Loop %for.body: Predicated backedge-taken count is ((-21 + %N) /u 2)
391
+ ; CHECK-NEXT: Predicates:
392
+ ; CHECK-NEXT: {0,+,2}<%for.body> Added Flags: <nusw>
393
+ ; CHECK-NEXT: Equal predicate: (zext i1 (true + (trunc i64 %N to i1)) to i64) == 0
394
+ ; CHECK-NEXT: Loop %for.body: Predicated constant max backedge-taken count is i64 9223372036854775807
395
+ ; CHECK-NEXT: Predicates:
396
+ ; CHECK-NEXT: {0,+,2}<%for.body> Added Flags: <nusw>
397
+ ; CHECK-NEXT: Equal predicate: (zext i1 (true + (trunc i64 %N to i1)) to i64) == 0
398
+ ; CHECK-NEXT: Loop %for.body: Predicated symbolic max backedge-taken count is ((-21 + %N) /u 2)
399
+ ; CHECK-NEXT: Predicates:
400
+ ; CHECK-NEXT: {0,+,2}<%for.body> Added Flags: <nusw>
401
+ ; CHECK-NEXT: Equal predicate: (zext i1 (true + (trunc i64 %N to i1)) to i64) == 0
313
402
;
314
403
entry:
315
404
br label %for.body
@@ -332,6 +421,18 @@ define void @test_sext_offset(i64 %N) mustprogress {
332
421
; CHECK-NEXT: Loop %for.body: Unpredictable backedge-taken count.
333
422
; CHECK-NEXT: Loop %for.body: Unpredictable constant max backedge-taken count.
334
423
; CHECK-NEXT: Loop %for.body: Unpredictable symbolic max backedge-taken count.
424
+ ; CHECK-NEXT: Loop %for.body: Predicated backedge-taken count is ((-21 + %N) /u 2)
425
+ ; CHECK-NEXT: Predicates:
426
+ ; CHECK-NEXT: {0,+,2}<%for.body> Added Flags: <nssw>
427
+ ; CHECK-NEXT: Equal predicate: (zext i1 (true + (trunc i64 %N to i1)) to i64) == 0
428
+ ; CHECK-NEXT: Loop %for.body: Predicated constant max backedge-taken count is i64 9223372036854775807
429
+ ; CHECK-NEXT: Predicates:
430
+ ; CHECK-NEXT: {0,+,2}<%for.body> Added Flags: <nssw>
431
+ ; CHECK-NEXT: Equal predicate: (zext i1 (true + (trunc i64 %N to i1)) to i64) == 0
432
+ ; CHECK-NEXT: Loop %for.body: Predicated symbolic max backedge-taken count is ((-21 + %N) /u 2)
433
+ ; CHECK-NEXT: Predicates:
434
+ ; CHECK-NEXT: {0,+,2}<%for.body> Added Flags: <nssw>
435
+ ; CHECK-NEXT: Equal predicate: (zext i1 (true + (trunc i64 %N to i1)) to i64) == 0
335
436
;
336
437
entry:
337
438
br label %for.body
0 commit comments