@@ -27,6 +27,24 @@ for.end: ; preds = %for.body, %entry
27
27
ret void
28
28
}
29
29
30
+ ; CHECK-LABEL: Determining loop execution counts for: @neg_nw_nuw
31
+ ; CHECK: Loop %for.body: Unpredictable backedge-taken count
32
+ ; CHECK: Loop %for.body: Unpredictable max backedge-taken count
33
+ define void @neg_nw_nuw (i16 %n ) mustprogress {
34
+ entry:
35
+ br label %for.body
36
+
37
+ for.body: ; preds = %entry, %for.body
38
+ %iv = phi i8 [ %iv.next , %for.body ], [ 0 , %entry ]
39
+ %iv.next = add i8 %iv , -1
40
+ %zext = zext i8 %iv to i16
41
+ %cmp = icmp ult i16 %zext , %n
42
+ br i1 %cmp , label %for.body , label %for.end
43
+
44
+ for.end: ; preds = %for.body, %entry
45
+ ret void
46
+ }
47
+
30
48
; CHECK-LABEL: Determining loop execution counts for: @nw_implies_nsw
31
49
; CHECK: Loop %for.body: Unpredictable backedge-taken count
32
50
; CHECK: Loop %for.body: Unpredictable max backedge-taken count
@@ -45,6 +63,24 @@ for.end: ; preds = %for.body, %entry
45
63
ret void
46
64
}
47
65
66
+ ; CHECK-LABEL: Determining loop execution counts for: @neg_nw_nsw
67
+ ; CHECK: Loop %for.body: Unpredictable backedge-taken count
68
+ ; CHECK: Loop %for.body: Unpredictable max backedge-taken count
69
+ define void @neg_nw_nsw (i16 %n ) mustprogress {
70
+ entry:
71
+ br label %for.body
72
+
73
+ for.body: ; preds = %entry, %for.body
74
+ %iv = phi i8 [ %iv.next , %for.body ], [ -128 , %entry ]
75
+ %iv.next = add i8 %iv , -1
76
+ %zext = sext i8 %iv to i16
77
+ %cmp = icmp slt i16 %zext , %n
78
+ br i1 %cmp , label %for.body , label %for.end
79
+
80
+ for.end: ; preds = %for.body, %entry
81
+ ret void
82
+ }
83
+
48
84
49
85
; CHECK-LABEL: Determining loop execution counts for: @actually_infinite
50
86
; CHECK: Loop %for.body: Unpredictable backedge-taken count
0 commit comments