@@ -488,21 +488,19 @@ define i8 @sdiv8_constant_no_srai(i8 %a) nounwind {
488
488
; RV32IM-NEXT: srai a0, a0, 24
489
489
; RV32IM-NEXT: li a1, 86
490
490
; RV32IM-NEXT: mul a0, a0, a1
491
- ; RV32IM-NEXT: srli a1, a0, 8
492
- ; RV32IM-NEXT: slli a0, a0, 16
493
- ; RV32IM-NEXT: srli a0, a0, 31
494
- ; RV32IM-NEXT: add a0, a1, a0
491
+ ; RV32IM-NEXT: srli a1, a0, 31
492
+ ; RV32IM-NEXT: srli a0, a0, 8
493
+ ; RV32IM-NEXT: add a0, a0, a1
495
494
; RV32IM-NEXT: ret
496
495
;
497
496
; RV32IMZB-LABEL: sdiv8_constant_no_srai:
498
497
; RV32IMZB: # %bb.0:
499
498
; RV32IMZB-NEXT: sext.b a0, a0
500
499
; RV32IMZB-NEXT: li a1, 86
501
500
; RV32IMZB-NEXT: mul a0, a0, a1
502
- ; RV32IMZB-NEXT: srli a1, a0, 8
503
- ; RV32IMZB-NEXT: slli a0, a0, 16
504
- ; RV32IMZB-NEXT: srli a0, a0, 31
505
- ; RV32IMZB-NEXT: add a0, a1, a0
501
+ ; RV32IMZB-NEXT: srli a1, a0, 31
502
+ ; RV32IMZB-NEXT: srli a0, a0, 8
503
+ ; RV32IMZB-NEXT: add a0, a0, a1
506
504
; RV32IMZB-NEXT: ret
507
505
;
508
506
; RV64IM-LABEL: sdiv8_constant_no_srai:
@@ -511,21 +509,19 @@ define i8 @sdiv8_constant_no_srai(i8 %a) nounwind {
511
509
; RV64IM-NEXT: srai a0, a0, 56
512
510
; RV64IM-NEXT: li a1, 86
513
511
; RV64IM-NEXT: mul a0, a0, a1
514
- ; RV64IM-NEXT: srli a1, a0, 8
515
- ; RV64IM-NEXT: slli a0, a0, 48
516
- ; RV64IM-NEXT: srli a0, a0, 63
517
- ; RV64IM-NEXT: add a0, a1, a0
512
+ ; RV64IM-NEXT: srli a1, a0, 63
513
+ ; RV64IM-NEXT: srli a0, a0, 8
514
+ ; RV64IM-NEXT: add a0, a0, a1
518
515
; RV64IM-NEXT: ret
519
516
;
520
517
; RV64IMZB-LABEL: sdiv8_constant_no_srai:
521
518
; RV64IMZB: # %bb.0:
522
519
; RV64IMZB-NEXT: sext.b a0, a0
523
520
; RV64IMZB-NEXT: li a1, 86
524
521
; RV64IMZB-NEXT: mul a0, a0, a1
525
- ; RV64IMZB-NEXT: srli a1, a0, 8
526
- ; RV64IMZB-NEXT: slli a0, a0, 48
527
- ; RV64IMZB-NEXT: srli a0, a0, 63
528
- ; RV64IMZB-NEXT: add a0, a1, a0
522
+ ; RV64IMZB-NEXT: srli a1, a0, 63
523
+ ; RV64IMZB-NEXT: srli a0, a0, 8
524
+ ; RV64IMZB-NEXT: add a0, a0, a1
529
525
; RV64IMZB-NEXT: ret
530
526
%1 = sdiv i8 %a , 3
531
527
ret i8 %1
@@ -538,21 +534,19 @@ define i8 @sdiv8_constant_srai(i8 %a) nounwind {
538
534
; RV32IM-NEXT: srai a0, a0, 24
539
535
; RV32IM-NEXT: li a1, 103
540
536
; RV32IM-NEXT: mul a0, a0, a1
541
- ; RV32IM-NEXT: srai a1, a0, 9
542
- ; RV32IM-NEXT: slli a0, a0, 16
543
- ; RV32IM-NEXT: srli a0, a0, 31
544
- ; RV32IM-NEXT: add a0, a1, a0
537
+ ; RV32IM-NEXT: srli a1, a0, 31
538
+ ; RV32IM-NEXT: srai a0, a0, 9
539
+ ; RV32IM-NEXT: add a0, a0, a1
545
540
; RV32IM-NEXT: ret
546
541
;
547
542
; RV32IMZB-LABEL: sdiv8_constant_srai:
548
543
; RV32IMZB: # %bb.0:
549
544
; RV32IMZB-NEXT: sext.b a0, a0
550
545
; RV32IMZB-NEXT: li a1, 103
551
546
; RV32IMZB-NEXT: mul a0, a0, a1
552
- ; RV32IMZB-NEXT: srai a1, a0, 9
553
- ; RV32IMZB-NEXT: slli a0, a0, 16
554
- ; RV32IMZB-NEXT: srli a0, a0, 31
555
- ; RV32IMZB-NEXT: add a0, a1, a0
547
+ ; RV32IMZB-NEXT: srli a1, a0, 31
548
+ ; RV32IMZB-NEXT: srai a0, a0, 9
549
+ ; RV32IMZB-NEXT: add a0, a0, a1
556
550
; RV32IMZB-NEXT: ret
557
551
;
558
552
; RV64IM-LABEL: sdiv8_constant_srai:
@@ -561,21 +555,19 @@ define i8 @sdiv8_constant_srai(i8 %a) nounwind {
561
555
; RV64IM-NEXT: srai a0, a0, 56
562
556
; RV64IM-NEXT: li a1, 103
563
557
; RV64IM-NEXT: mul a0, a0, a1
564
- ; RV64IM-NEXT: srai a1, a0, 9
565
- ; RV64IM-NEXT: slli a0, a0, 48
566
- ; RV64IM-NEXT: srli a0, a0, 63
567
- ; RV64IM-NEXT: add a0, a1, a0
558
+ ; RV64IM-NEXT: srli a1, a0, 63
559
+ ; RV64IM-NEXT: srai a0, a0, 9
560
+ ; RV64IM-NEXT: add a0, a0, a1
568
561
; RV64IM-NEXT: ret
569
562
;
570
563
; RV64IMZB-LABEL: sdiv8_constant_srai:
571
564
; RV64IMZB: # %bb.0:
572
565
; RV64IMZB-NEXT: sext.b a0, a0
573
566
; RV64IMZB-NEXT: li a1, 103
574
567
; RV64IMZB-NEXT: mul a0, a0, a1
575
- ; RV64IMZB-NEXT: srai a1, a0, 9
576
- ; RV64IMZB-NEXT: slli a0, a0, 48
577
- ; RV64IMZB-NEXT: srli a0, a0, 63
578
- ; RV64IMZB-NEXT: add a0, a1, a0
568
+ ; RV64IMZB-NEXT: srli a1, a0, 63
569
+ ; RV64IMZB-NEXT: srai a0, a0, 9
570
+ ; RV64IMZB-NEXT: add a0, a0, a1
579
571
; RV64IMZB-NEXT: ret
580
572
%1 = sdiv i8 %a , 5
581
573
ret i8 %1
@@ -728,7 +720,7 @@ define i16 @sdiv16_constant_no_srai(i16 %a) nounwind {
728
720
; RV64IM-NEXT: lui a1, 5
729
721
; RV64IM-NEXT: addiw a1, a1, 1366
730
722
; RV64IM-NEXT: mul a0, a0, a1
731
- ; RV64IM-NEXT: srliw a1, a0, 31
723
+ ; RV64IM-NEXT: srli a1, a0, 63
732
724
; RV64IM-NEXT: srli a0, a0, 16
733
725
; RV64IM-NEXT: add a0, a0, a1
734
726
; RV64IM-NEXT: ret
@@ -739,7 +731,7 @@ define i16 @sdiv16_constant_no_srai(i16 %a) nounwind {
739
731
; RV64IMZB-NEXT: lui a1, 5
740
732
; RV64IMZB-NEXT: addiw a1, a1, 1366
741
733
; RV64IMZB-NEXT: mul a0, a0, a1
742
- ; RV64IMZB-NEXT: srliw a1, a0, 31
734
+ ; RV64IMZB-NEXT: srli a1, a0, 63
743
735
; RV64IMZB-NEXT: srli a0, a0, 16
744
736
; RV64IMZB-NEXT: add a0, a0, a1
745
737
; RV64IMZB-NEXT: ret
@@ -778,7 +770,7 @@ define i16 @sdiv16_constant_srai(i16 %a) nounwind {
778
770
; RV64IM-NEXT: lui a1, 6
779
771
; RV64IM-NEXT: addiw a1, a1, 1639
780
772
; RV64IM-NEXT: mul a0, a0, a1
781
- ; RV64IM-NEXT: srliw a1, a0, 31
773
+ ; RV64IM-NEXT: srli a1, a0, 63
782
774
; RV64IM-NEXT: srai a0, a0, 17
783
775
; RV64IM-NEXT: add a0, a0, a1
784
776
; RV64IM-NEXT: ret
@@ -789,7 +781,7 @@ define i16 @sdiv16_constant_srai(i16 %a) nounwind {
789
781
; RV64IMZB-NEXT: lui a1, 6
790
782
; RV64IMZB-NEXT: addiw a1, a1, 1639
791
783
; RV64IMZB-NEXT: mul a0, a0, a1
792
- ; RV64IMZB-NEXT: srliw a1, a0, 31
784
+ ; RV64IMZB-NEXT: srli a1, a0, 63
793
785
; RV64IMZB-NEXT: srai a0, a0, 17
794
786
; RV64IMZB-NEXT: add a0, a0, a1
795
787
; RV64IMZB-NEXT: ret
0 commit comments