@@ -58,6 +58,15 @@ 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 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
6170;
6271entry:
6372 br label %for.body
@@ -79,6 +88,15 @@ define void @test_well_defined_infinite_ld(i32 %N) mustprogress {
7988; CHECK-NEXT: Loop %for.body: Unpredictable backedge-taken count.
8089; CHECK-NEXT: Loop %for.body: Unpredictable constant max backedge-taken count.
8190; 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
82100;
83101entry:
84102 br label %for.body
@@ -100,6 +118,15 @@ define void @test_no_mustprogress(i32 %N) {
100118; CHECK-NEXT: Loop %for.body: Unpredictable backedge-taken count.
101119; CHECK-NEXT: Loop %for.body: Unpredictable constant max backedge-taken count.
102120; 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
103130;
104131entry:
105132 br label %for.body
@@ -187,6 +214,15 @@ define void @test_abnormal_exit(i32 %N) mustprogress {
187214; CHECK-NEXT: Loop %for.body: Unpredictable backedge-taken count.
188215; CHECK-NEXT: Loop %for.body: Unpredictable constant max backedge-taken count.
189216; 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
190226;
191227entry:
192228 br label %for.body
@@ -209,10 +245,24 @@ define void @test_other_exit(i32 %N) mustprogress {
209245; CHECK-NEXT: Loop %for.body: <multiple exits> Unpredictable backedge-taken count.
210246; CHECK-NEXT: exit count for for.body: i32 9
211247; 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:
212252; CHECK-NEXT: Loop %for.body: constant max backedge-taken count is i32 9
213253; CHECK-NEXT: Loop %for.body: symbolic max backedge-taken count is i32 9
214254; CHECK-NEXT: symbolic max exit count for for.body: i32 9
215255; 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
216266;
217267entry:
218268 br label %for.body
@@ -267,6 +317,18 @@ define void @test_sext(i64 %N) mustprogress {
267317; CHECK-NEXT: Loop %for.body: Unpredictable backedge-taken count.
268318; CHECK-NEXT: Loop %for.body: Unpredictable constant max backedge-taken count.
269319; 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
270332;
271333entry:
272334 br label %for.body
@@ -288,6 +350,21 @@ define void @test_zext_of_sext(i64 %N) mustprogress {
288350; CHECK-NEXT: Loop %for.body: Unpredictable backedge-taken count.
289351; CHECK-NEXT: Loop %for.body: Unpredictable constant max backedge-taken count.
290352; 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
291368;
292369entry:
293370 br label %for.body
@@ -310,6 +387,18 @@ define void @test_zext_offset(i64 %N) mustprogress {
310387; CHECK-NEXT: Loop %for.body: Unpredictable backedge-taken count.
311388; CHECK-NEXT: Loop %for.body: Unpredictable constant max backedge-taken count.
312389; 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
313402;
314403entry:
315404 br label %for.body
@@ -332,6 +421,18 @@ define void @test_sext_offset(i64 %N) mustprogress {
332421; CHECK-NEXT: Loop %for.body: Unpredictable backedge-taken count.
333422; CHECK-NEXT: Loop %for.body: Unpredictable constant max backedge-taken count.
334423; 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
335436;
336437entry:
337438 br label %for.body
0 commit comments