@@ -134,11 +134,10 @@ define i1 @ult_rem_zero(i8 %x) {
134
134
}
135
135
136
136
; Same as above, but with nsw flag too.
137
- ; FIXME: This should be optimized like above .
137
+ ; This used to not optimize due to nsw being prioritized too much .
138
138
define i1 @ult_rem_zero_nsw (i8 %x ) {
139
139
; CHECK-LABEL: @ult_rem_zero_nsw(
140
- ; CHECK-NEXT: [[A:%.*]] = mul nuw nsw i8 [[X:%.*]], 7
141
- ; CHECK-NEXT: [[B:%.*]] = icmp ult i8 [[A]], 21
140
+ ; CHECK-NEXT: [[B:%.*]] = icmp ult i8 [[X:%.*]], 3
142
141
; CHECK-NEXT: ret i1 [[B]]
143
142
;
144
143
%a = mul nuw nsw i8 %x , 7
@@ -157,11 +156,10 @@ define i1 @ult_rem_nz(i8 %x) {
157
156
}
158
157
159
158
; Same as above, but with nsw flag too.
160
- ; FIXME: This should be optimized like above .
159
+ ; This used to not optimize due to nsw being prioritized too much .
161
160
define i1 @ult_rem_nz_nsw (i8 %x ) {
162
161
; CHECK-LABEL: @ult_rem_nz_nsw(
163
- ; CHECK-NEXT: [[A:%.*]] = mul nuw nsw i8 [[X:%.*]], 5
164
- ; CHECK-NEXT: [[B:%.*]] = icmp ult i8 [[A]], 21
162
+ ; CHECK-NEXT: [[B:%.*]] = icmp ult i8 [[X:%.*]], 5
165
163
; CHECK-NEXT: ret i1 [[B]]
166
164
;
167
165
%a = mul nuw nsw i8 %x , 5
@@ -212,11 +210,10 @@ define i1 @ugt_rem_zero(i8 %x) {
212
210
}
213
211
214
212
; Same as above, but with nsw flag too.
215
- ; FIXME: This should be optimized like above .
213
+ ; This used to not optimize due to nsw being prioritized too much .
216
214
define i1 @ugt_rem_zero_nsw (i8 %x ) {
217
215
; CHECK-LABEL: @ugt_rem_zero_nsw(
218
- ; CHECK-NEXT: [[A:%.*]] = mul nuw nsw i8 [[X:%.*]], 7
219
- ; CHECK-NEXT: [[B:%.*]] = icmp ugt i8 [[A]], 21
216
+ ; CHECK-NEXT: [[B:%.*]] = icmp ugt i8 [[X:%.*]], 3
220
217
; CHECK-NEXT: ret i1 [[B]]
221
218
;
222
219
%a = mul nuw nsw i8 %x , 7
@@ -235,11 +232,10 @@ define i1 @ugt_rem_nz(i8 %x) {
235
232
}
236
233
237
234
; Same as above, but with nsw flag too.
238
- ; FIXME: This should be optimized like above .
235
+ ; This used to not optimize due to nsw being prioritized too much .
239
236
define i1 @ugt_rem_nz_nsw (i8 %x ) {
240
237
; CHECK-LABEL: @ugt_rem_nz_nsw(
241
- ; CHECK-NEXT: [[A:%.*]] = mul nuw nsw i8 [[X:%.*]], 5
242
- ; CHECK-NEXT: [[B:%.*]] = icmp ugt i8 [[A]], 21
238
+ ; CHECK-NEXT: [[B:%.*]] = icmp ugt i8 [[X:%.*]], 4
243
239
; CHECK-NEXT: ret i1 [[B]]
244
240
;
245
241
%a = mul nuw nsw i8 %x , 5
@@ -998,9 +994,7 @@ define i1 @splat_mul_known_lz(i32 %x) {
998
994
999
995
define i1 @splat_mul_unknown_lz (i32 %x ) {
1000
996
; CHECK-LABEL: @splat_mul_unknown_lz(
1001
- ; CHECK-NEXT: [[Z:%.*]] = zext i32 [[X:%.*]] to i128
1002
- ; CHECK-NEXT: [[M:%.*]] = mul nuw nsw i128 [[Z]], 18446744078004518913
1003
- ; CHECK-NEXT: [[R:%.*]] = icmp ult i128 [[M]], 39614081257132168796771975168
997
+ ; CHECK-NEXT: [[R:%.*]] = icmp sgt i32 [[X:%.*]], -1
1004
998
; CHECK-NEXT: ret i1 [[R]]
1005
999
;
1006
1000
%z = zext i32 %x to i128
0 commit comments