@@ -58,6 +58,12 @@ define void @test_well_defined_infinite_st(i32 %N) mustprogress {
5858; CHECK-NEXT: Loop %for.body: Unpredictable backedge-taken count.
5959; CHECK-NEXT: Loop %for.body: Unpredictable constant max backedge-taken count.
6060; 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
6167;
6268entry:
6369 br label %for.body
@@ -79,6 +85,12 @@ define void @test_well_defined_infinite_ld(i32 %N) mustprogress {
7985; CHECK-NEXT: Loop %for.body: Unpredictable backedge-taken count.
8086; CHECK-NEXT: Loop %for.body: Unpredictable constant max backedge-taken count.
8187; 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
8294;
8395entry:
8496 br label %for.body
@@ -100,6 +112,12 @@ define void @test_no_mustprogress(i32 %N) {
100112; CHECK-NEXT: Loop %for.body: Unpredictable backedge-taken count.
101113; CHECK-NEXT: Loop %for.body: Unpredictable constant max backedge-taken count.
102114; 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
103121;
104122entry:
105123 br label %for.body
@@ -187,6 +205,12 @@ define void @test_abnormal_exit(i32 %N) mustprogress {
187205; CHECK-NEXT: Loop %for.body: Unpredictable backedge-taken count.
188206; CHECK-NEXT: Loop %for.body: Unpredictable constant max backedge-taken count.
189207; 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
190214;
191215entry:
192216 br label %for.body
@@ -209,10 +233,24 @@ define void @test_other_exit(i32 %N) mustprogress {
209233; CHECK-NEXT: Loop %for.body: <multiple exits> Unpredictable backedge-taken count.
210234; CHECK-NEXT: exit count for for.body: i32 9
211235; 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:
212240; CHECK-NEXT: Loop %for.body: constant max backedge-taken count is i32 9
213241; CHECK-NEXT: Loop %for.body: symbolic max backedge-taken count is i32 9
214242; CHECK-NEXT: symbolic max exit count for for.body: i32 9
215243; 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
216254;
217255entry:
218256 br label %for.body
@@ -264,6 +302,14 @@ define void @test_sext(i64 %N) mustprogress {
264302; CHECK-NEXT: Loop %for.body: Unpredictable backedge-taken count.
265303; CHECK-NEXT: Loop %for.body: Unpredictable constant max backedge-taken count.
266304; 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
267313;
268314entry:
269315 br label %for.body
@@ -285,6 +331,16 @@ define void @test_zext_of_sext(i64 %N) mustprogress {
285331; CHECK-NEXT: Loop %for.body: Unpredictable backedge-taken count.
286332; CHECK-NEXT: Loop %for.body: Unpredictable constant max backedge-taken count.
287333; 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
288344;
289345entry:
290346 br label %for.body
@@ -307,6 +363,14 @@ define void @test_zext_offset(i64 %N) mustprogress {
307363; CHECK-NEXT: Loop %for.body: Unpredictable backedge-taken count.
308364; CHECK-NEXT: Loop %for.body: Unpredictable constant max backedge-taken count.
309365; 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
310374;
311375entry:
312376 br label %for.body
@@ -329,6 +393,14 @@ define void @test_sext_offset(i64 %N) mustprogress {
329393; CHECK-NEXT: Loop %for.body: Unpredictable backedge-taken count.
330394; CHECK-NEXT: Loop %for.body: Unpredictable constant max backedge-taken count.
331395; 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
332404;
333405entry:
334406 br label %for.body
0 commit comments