4
4
define void @ule_from_zero (i32 %M , i32 %N ) {
5
5
; CHECK-LABEL: 'ule_from_zero'
6
6
; CHECK-NEXT: Determining loop execution counts for: @ule_from_zero
7
- ; CHECK-NEXT: Loop %loop: <multiple exits> Unpredictable backedge-taken count.
8
- ; CHECK-NEXT: exit count for loop: ***COULDNOTCOMPUTE***
7
+ ; CHECK-NEXT: Loop %loop: <multiple exits> backedge-taken count is ((zext i32 %N to i64) umin (1 + (zext i32 %M to i64))<nuw><nsw>)
8
+ ; CHECK-NEXT: exit count for loop: (1 + (zext i32 %M to i64))<nuw><nsw>
9
9
; CHECK-NEXT: exit count for latch: %N
10
- ; CHECK-NEXT: Loop %loop: constant max backedge-taken count is i32 -1
11
- ; CHECK-NEXT: Loop %loop: symbolic max backedge-taken count is %N
12
- ; CHECK-NEXT: symbolic max exit count for loop: ***COULDNOTCOMPUTE***
10
+ ; CHECK-NEXT: Loop %loop: constant max backedge-taken count is i64 4294967295
11
+ ; CHECK-NEXT: Loop %loop: symbolic max backedge-taken count is ((zext i32 %N to i64) umin (1 + (zext i32 %M to i64))<nuw><nsw>)
12
+ ; CHECK-NEXT: symbolic max exit count for loop: (1 + (zext i32 %M to i64))<nuw><nsw>
13
13
; CHECK-NEXT: symbolic max exit count for latch: %N
14
+ ; CHECK-NEXT: Loop %loop: Trip multiple is 1
14
15
;
15
16
entry:
16
17
br label %loop
@@ -61,13 +62,14 @@ exit:
61
62
define void @ule_from_unknown (i32 %M , i32 %N , i32 %S ) {
62
63
; CHECK-LABEL: 'ule_from_unknown'
63
64
; CHECK-NEXT: Determining loop execution counts for: @ule_from_unknown
64
- ; CHECK-NEXT: Loop %loop: <multiple exits> Unpredictable backedge-taken count.
65
- ; CHECK-NEXT: exit count for loop: ***COULDNOTCOMPUTE***
65
+ ; CHECK-NEXT: Loop %loop: <multiple exits> backedge-taken count is (((-1 * (zext i32 %S to i64))<nsw> + ((zext i32 %S to i64) umax (1 + (zext i32 %M to i64))<nuw><nsw>)) umin_seq (zext i32 ((-1 * %S) + %N) to i64))
66
+ ; CHECK-NEXT: exit count for loop: ((-1 * (zext i32 %S to i64))<nsw> + ((zext i32 %S to i64) umax (1 + (zext i32 %M to i64))<nuw><nsw>))
66
67
; CHECK-NEXT: exit count for latch: ((-1 * %S) + %N)
67
- ; CHECK-NEXT: Loop %loop: constant max backedge-taken count is i32 -1
68
- ; CHECK-NEXT: Loop %loop: symbolic max backedge-taken count is ((-1 * %S) + %N )
69
- ; CHECK-NEXT: symbolic max exit count for loop: ***COULDNOTCOMPUTE***
68
+ ; CHECK-NEXT: Loop %loop: constant max backedge-taken count is i64 4294967295
69
+ ; CHECK-NEXT: Loop %loop: symbolic max backedge-taken count is ((( -1 * (zext i32 %S to i64))<nsw> + ((zext i32 %S to i64) umax (1 + (zext i32 %M to i64))<nuw><nsw>)) umin_seq (zext i32 ((-1 * %S) + %N) to i64) )
70
+ ; CHECK-NEXT: symbolic max exit count for loop: ((-1 * (zext i32 %S to i64))<nsw> + ((zext i32 %S to i64) umax (1 + (zext i32 %M to i64))<nuw><nsw>))
70
71
; CHECK-NEXT: symbolic max exit count for latch: ((-1 * %S) + %N)
72
+ ; CHECK-NEXT: Loop %loop: Trip multiple is 1
71
73
;
72
74
entry:
73
75
br label %loop
@@ -96,6 +98,9 @@ define void @ule_from_zero_no_nuw(i32 %M, i32 %N) {
96
98
; CHECK-NEXT: Loop %loop: symbolic max backedge-taken count is %N
97
99
; CHECK-NEXT: symbolic max exit count for loop: ***COULDNOTCOMPUTE***
98
100
; CHECK-NEXT: symbolic max exit count for latch: %N
101
+ ; CHECK-NEXT: Loop %loop: Predicated backedge-taken count is ((zext i32 %N to i64) umin (1 + (zext i32 %M to i64))<nuw><nsw>)
102
+ ; CHECK-NEXT: Predicates:
103
+ ; CHECK-NEXT: {0,+,1}<%loop> Added Flags: <nusw>
99
104
;
100
105
entry:
101
106
br label %loop
@@ -117,13 +122,14 @@ exit:
117
122
define void @sle_from_int_min (i32 %M , i32 %N ) {
118
123
; CHECK-LABEL: 'sle_from_int_min'
119
124
; CHECK-NEXT: Determining loop execution counts for: @sle_from_int_min
120
- ; CHECK-NEXT: Loop %loop: <multiple exits> Unpredictable backedge-taken count.
121
- ; CHECK-NEXT: exit count for loop: ***COULDNOTCOMPUTE***
125
+ ; CHECK-NEXT: Loop %loop: <multiple exits> backedge-taken count is ((zext i32 (-2147483648 + %N) to i64) umin (2147483649 + (sext i32 %M to i64))<nsw>)
126
+ ; CHECK-NEXT: exit count for loop: (2147483649 + (sext i32 %M to i64))<nsw>
122
127
; CHECK-NEXT: exit count for latch: (-2147483648 + %N)
123
- ; CHECK-NEXT: Loop %loop: constant max backedge-taken count is i32 -1
124
- ; CHECK-NEXT: Loop %loop: symbolic max backedge-taken count is (-2147483648 + %N)
125
- ; CHECK-NEXT: symbolic max exit count for loop: ***COULDNOTCOMPUTE***
128
+ ; CHECK-NEXT: Loop %loop: constant max backedge-taken count is i64 4294967295
129
+ ; CHECK-NEXT: Loop %loop: symbolic max backedge-taken count is ((zext i32 ( -2147483648 + %N) to i64) umin (2147483649 + (sext i32 %M to i64))<nsw> )
130
+ ; CHECK-NEXT: symbolic max exit count for loop: (2147483649 + (sext i32 %M to i64))<nsw>
126
131
; CHECK-NEXT: symbolic max exit count for latch: (-2147483648 + %N)
132
+ ; CHECK-NEXT: Loop %loop: Trip multiple is 1
127
133
;
128
134
entry:
129
135
br label %loop
@@ -174,13 +180,14 @@ exit:
174
180
define void @sle_from_unknown (i32 %M , i32 %N , i32 %S ) {
175
181
; CHECK-LABEL: 'sle_from_unknown'
176
182
; CHECK-NEXT: Determining loop execution counts for: @sle_from_unknown
177
- ; CHECK-NEXT: Loop %loop: <multiple exits> Unpredictable backedge-taken count.
178
- ; CHECK-NEXT: exit count for loop: ***COULDNOTCOMPUTE***
183
+ ; CHECK-NEXT: Loop %loop: <multiple exits> backedge-taken count is (((-1 * (sext i32 %S to i64))<nsw> + ((sext i32 %S to i64) smax (1 + (sext i32 %M to i64))<nsw>)) umin_seq (zext i32 ((-1 * %S) + %N) to i64))
184
+ ; CHECK-NEXT: exit count for loop: ((-1 * (sext i32 %S to i64))<nsw> + ((sext i32 %S to i64) smax (1 + (sext i32 %M to i64))<nsw>))
179
185
; CHECK-NEXT: exit count for latch: ((-1 * %S) + %N)
180
- ; CHECK-NEXT: Loop %loop: constant max backedge-taken count is i32 -1
181
- ; CHECK-NEXT: Loop %loop: symbolic max backedge-taken count is ((-1 * %S) + %N )
182
- ; CHECK-NEXT: symbolic max exit count for loop: ***COULDNOTCOMPUTE***
186
+ ; CHECK-NEXT: Loop %loop: constant max backedge-taken count is i64 4294967295
187
+ ; CHECK-NEXT: Loop %loop: symbolic max backedge-taken count is ((( -1 * (sext i32 %S to i64))<nsw> + ((sext i32 %S to i64) smax (1 + (sext i32 %M to i64))<nsw>)) umin_seq (zext i32 ((-1 * %S) + %N) to i64) )
188
+ ; CHECK-NEXT: symbolic max exit count for loop: ((-1 * (sext i32 %S to i64))<nsw> + ((sext i32 %S to i64) smax (1 + (sext i32 %M to i64))<nsw>))
183
189
; CHECK-NEXT: symbolic max exit count for latch: ((-1 * %S) + %N)
190
+ ; CHECK-NEXT: Loop %loop: Trip multiple is 1
184
191
;
185
192
entry:
186
193
br label %loop
@@ -209,6 +216,9 @@ define void @sle_from_int_min_no_nsw(i32 %M, i32 %N) {
209
216
; CHECK-NEXT: Loop %loop: symbolic max backedge-taken count is (-2147483648 + %N)
210
217
; CHECK-NEXT: symbolic max exit count for loop: ***COULDNOTCOMPUTE***
211
218
; CHECK-NEXT: symbolic max exit count for latch: (-2147483648 + %N)
219
+ ; CHECK-NEXT: Loop %loop: Predicated backedge-taken count is ((zext i32 (-2147483648 + %N) to i64) umin (2147483649 + (sext i32 %M to i64))<nsw>)
220
+ ; CHECK-NEXT: Predicates:
221
+ ; CHECK-NEXT: {-2147483648,+,1}<%loop> Added Flags: <nssw>
212
222
;
213
223
entry:
214
224
br label %loop
0 commit comments