@@ -216,10 +216,7 @@ define i5 @urem_common_dividend_defined_cond(i1 noundef %b, i5 %x, i5 %y, i5 %z)
216
216
217
217
define i32 @rem_euclid_1 (i32 %0 ) {
218
218
; CHECK-LABEL: @rem_euclid_1(
219
- ; CHECK-NEXT: [[REM:%.*]] = srem i32 [[TMP0:%.*]], 8
220
- ; CHECK-NEXT: [[COND:%.*]] = icmp slt i32 [[REM]], 0
221
- ; CHECK-NEXT: [[ADD:%.*]] = add nsw i32 [[REM]], 8
222
- ; CHECK-NEXT: [[SEL:%.*]] = select i1 [[COND]], i32 [[ADD]], i32 [[REM]]
219
+ ; CHECK-NEXT: [[SEL:%.*]] = and i32 [[TMP0:%.*]], 7
223
220
; CHECK-NEXT: ret i32 [[SEL]]
224
221
;
225
222
%rem = srem i32 %0 , 8
@@ -231,10 +228,7 @@ define i32 @rem_euclid_1(i32 %0) {
231
228
232
229
define i32 @rem_euclid_2 (i32 %0 ) {
233
230
; CHECK-LABEL: @rem_euclid_2(
234
- ; CHECK-NEXT: [[REM:%.*]] = srem i32 [[TMP0:%.*]], 8
235
- ; CHECK-NEXT: [[ADD:%.*]] = add nsw i32 [[REM]], 8
236
- ; CHECK-NEXT: [[COND1:%.*]] = icmp slt i32 [[REM]], 0
237
- ; CHECK-NEXT: [[SEL:%.*]] = select i1 [[COND1]], i32 [[ADD]], i32 [[REM]]
231
+ ; CHECK-NEXT: [[SEL:%.*]] = and i32 [[TMP0:%.*]], 7
238
232
; CHECK-NEXT: ret i32 [[SEL]]
239
233
;
240
234
%rem = srem i32 %0 , 8
@@ -291,10 +285,7 @@ define i32 @rem_euclid_wrong_operands_select(i32 %0) {
291
285
292
286
define <2 x i32 > @rem_euclid_vec (<2 x i32 > %0 ) {
293
287
; CHECK-LABEL: @rem_euclid_vec(
294
- ; CHECK-NEXT: [[REM:%.*]] = srem <2 x i32> [[TMP0:%.*]], <i32 8, i32 8>
295
- ; CHECK-NEXT: [[COND:%.*]] = icmp slt <2 x i32> [[REM]], zeroinitializer
296
- ; CHECK-NEXT: [[ADD:%.*]] = add nsw <2 x i32> [[REM]], <i32 8, i32 8>
297
- ; CHECK-NEXT: [[SEL:%.*]] = select <2 x i1> [[COND]], <2 x i32> [[ADD]], <2 x i32> [[REM]]
288
+ ; CHECK-NEXT: [[SEL:%.*]] = and <2 x i32> [[TMP0:%.*]], <i32 7, i32 7>
298
289
; CHECK-NEXT: ret <2 x i32> [[SEL]]
299
290
;
300
291
%rem = srem <2 x i32 > %0 , <i32 8 , i32 8 >
@@ -306,10 +297,7 @@ define <2 x i32> @rem_euclid_vec(<2 x i32> %0) {
306
297
307
298
define i128 @rem_euclid_i128 (i128 %0 ) {
308
299
; CHECK-LABEL: @rem_euclid_i128(
309
- ; CHECK-NEXT: [[REM:%.*]] = srem i128 [[TMP0:%.*]], 8
310
- ; CHECK-NEXT: [[COND:%.*]] = icmp slt i128 [[REM]], 0
311
- ; CHECK-NEXT: [[ADD:%.*]] = add nsw i128 [[REM]], 8
312
- ; CHECK-NEXT: [[SEL:%.*]] = select i1 [[COND]], i128 [[ADD]], i128 [[REM]]
300
+ ; CHECK-NEXT: [[SEL:%.*]] = and i128 [[TMP0:%.*]], 7
313
301
; CHECK-NEXT: ret i128 [[SEL]]
314
302
;
315
303
%rem = srem i128 %0 , 8
@@ -321,11 +309,9 @@ define i128 @rem_euclid_i128(i128 %0) {
321
309
322
310
define i8 @rem_euclid_non_const_pow2 (i8 %0 , i8 %1 ) {
323
311
; CHECK-LABEL: @rem_euclid_non_const_pow2(
324
- ; CHECK-NEXT: [[POW2:%.*]] = shl nuw i8 1, [[TMP0:%.*]]
325
- ; CHECK-NEXT: [[REM:%.*]] = srem i8 [[TMP1:%.*]], [[POW2]]
326
- ; CHECK-NEXT: [[COND:%.*]] = icmp slt i8 [[REM]], 0
327
- ; CHECK-NEXT: [[ADD:%.*]] = select i1 [[COND]], i8 [[POW2]], i8 0
328
- ; CHECK-NEXT: [[SEL:%.*]] = add i8 [[REM]], [[ADD]]
312
+ ; CHECK-NEXT: [[NOTMASK:%.*]] = shl nsw i8 -1, [[TMP0:%.*]]
313
+ ; CHECK-NEXT: [[TMP3:%.*]] = xor i8 [[NOTMASK]], -1
314
+ ; CHECK-NEXT: [[SEL:%.*]] = and i8 [[TMP3]], [[TMP1:%.*]]
329
315
; CHECK-NEXT: ret i8 [[SEL]]
330
316
;
331
317
%pow2 = shl i8 1 , %0
0 commit comments