@@ -265,7 +265,7 @@ define i32 @rem4() {
265
265
; CHECK-NEXT: [[CALL:%.*]] = call i32 @external(), !range [[RNG0:![0-9]+]]
266
266
; CHECK-NEXT: ret i32 [[CALL]]
267
267
;
268
- %call = call i32 @external (), !range !0
268
+ %call = call i32 @external () , !range !0
269
269
%urem = urem i32 %call , 3
270
270
ret i32 %urem
271
271
}
@@ -488,3 +488,58 @@ define i8 @urem_mul_sdiv(i8 %x, i8 %y) {
488
488
%mod = urem i8 %mul , %y
489
489
ret i8 %mod
490
490
}
491
+
492
+ define <2 x i8 > @simplfy_srem_of_mul (<2 x i8 > %x ) {
493
+ ; CHECK-LABEL: @simplfy_srem_of_mul(
494
+ ; CHECK-NEXT: [[MUL:%.*]] = mul nsw <2 x i8> [[X:%.*]], <i8 20, i8 10>
495
+ ; CHECK-NEXT: [[R:%.*]] = srem <2 x i8> [[MUL]], <i8 5, i8 5>
496
+ ; CHECK-NEXT: ret <2 x i8> [[R]]
497
+ ;
498
+ %mul = mul nsw <2 x i8 > %x , <i8 20 , i8 10 >
499
+ %r = srem <2 x i8 > %mul , <i8 5 , i8 5 >
500
+ ret <2 x i8 > %r
501
+ }
502
+
503
+ define <2 x i8 > @simplfy_srem_of_mul_fail_bad_mod (<2 x i8 > %x ) {
504
+ ; CHECK-LABEL: @simplfy_srem_of_mul_fail_bad_mod(
505
+ ; CHECK-NEXT: [[MUL:%.*]] = mul nsw <2 x i8> [[X:%.*]], <i8 20, i8 11>
506
+ ; CHECK-NEXT: [[R:%.*]] = srem <2 x i8> [[MUL]], <i8 5, i8 5>
507
+ ; CHECK-NEXT: ret <2 x i8> [[R]]
508
+ ;
509
+ %mul = mul nsw <2 x i8 > %x , <i8 20 , i8 11 >
510
+ %r = srem <2 x i8 > %mul , <i8 5 , i8 5 >
511
+ ret <2 x i8 > %r
512
+ }
513
+
514
+ define i8 @simplfy_urem_of_mul (i8 %x ) {
515
+ ; CHECK-LABEL: @simplfy_urem_of_mul(
516
+ ; CHECK-NEXT: [[MUL:%.*]] = mul nuw i8 [[X:%.*]], 30
517
+ ; CHECK-NEXT: [[R:%.*]] = urem i8 [[MUL]], 10
518
+ ; CHECK-NEXT: ret i8 [[R]]
519
+ ;
520
+ %mul = mul nuw i8 %x , 30
521
+ %r = urem i8 %mul , 10
522
+ ret i8 %r
523
+ }
524
+
525
+ define i8 @simplfy_urem_of_mul_fail_bad_flag (i8 %x ) {
526
+ ; CHECK-LABEL: @simplfy_urem_of_mul_fail_bad_flag(
527
+ ; CHECK-NEXT: [[MUL:%.*]] = mul nsw i8 [[X:%.*]], 30
528
+ ; CHECK-NEXT: [[R:%.*]] = urem i8 [[MUL]], 10
529
+ ; CHECK-NEXT: ret i8 [[R]]
530
+ ;
531
+ %mul = mul nsw i8 %x , 30
532
+ %r = urem i8 %mul , 10
533
+ ret i8 %r
534
+ }
535
+
536
+ define i8 @simplfy_urem_of_mul_fail_bad_mod (i8 %x ) {
537
+ ; CHECK-LABEL: @simplfy_urem_of_mul_fail_bad_mod(
538
+ ; CHECK-NEXT: [[MUL:%.*]] = mul nuw i8 [[X:%.*]], 31
539
+ ; CHECK-NEXT: [[R:%.*]] = urem i8 [[MUL]], 10
540
+ ; CHECK-NEXT: ret i8 [[R]]
541
+ ;
542
+ %mul = mul nuw i8 %x , 31
543
+ %r = urem i8 %mul , 10
544
+ ret i8 %r
545
+ }
0 commit comments