@@ -488,21 +488,19 @@ define i8 @sdiv8_constant_no_srai(i8 %a) nounwind {
488488; RV32IM-NEXT: srai a0, a0, 24
489489; RV32IM-NEXT: li a1, 86
490490; 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
495494; RV32IM-NEXT: ret
496495;
497496; RV32IMZB-LABEL: sdiv8_constant_no_srai:
498497; RV32IMZB: # %bb.0:
499498; RV32IMZB-NEXT: sext.b a0, a0
500499; RV32IMZB-NEXT: li a1, 86
501500; 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
506504; RV32IMZB-NEXT: ret
507505;
508506; RV64IM-LABEL: sdiv8_constant_no_srai:
@@ -511,21 +509,19 @@ define i8 @sdiv8_constant_no_srai(i8 %a) nounwind {
511509; RV64IM-NEXT: srai a0, a0, 56
512510; RV64IM-NEXT: li a1, 86
513511; 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
518515; RV64IM-NEXT: ret
519516;
520517; RV64IMZB-LABEL: sdiv8_constant_no_srai:
521518; RV64IMZB: # %bb.0:
522519; RV64IMZB-NEXT: sext.b a0, a0
523520; RV64IMZB-NEXT: li a1, 86
524521; 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
529525; RV64IMZB-NEXT: ret
530526 %1 = sdiv i8 %a , 3
531527 ret i8 %1
@@ -538,21 +534,19 @@ define i8 @sdiv8_constant_srai(i8 %a) nounwind {
538534; RV32IM-NEXT: srai a0, a0, 24
539535; RV32IM-NEXT: li a1, 103
540536; 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
545540; RV32IM-NEXT: ret
546541;
547542; RV32IMZB-LABEL: sdiv8_constant_srai:
548543; RV32IMZB: # %bb.0:
549544; RV32IMZB-NEXT: sext.b a0, a0
550545; RV32IMZB-NEXT: li a1, 103
551546; 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
556550; RV32IMZB-NEXT: ret
557551;
558552; RV64IM-LABEL: sdiv8_constant_srai:
@@ -561,21 +555,19 @@ define i8 @sdiv8_constant_srai(i8 %a) nounwind {
561555; RV64IM-NEXT: srai a0, a0, 56
562556; RV64IM-NEXT: li a1, 103
563557; 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
568561; RV64IM-NEXT: ret
569562;
570563; RV64IMZB-LABEL: sdiv8_constant_srai:
571564; RV64IMZB: # %bb.0:
572565; RV64IMZB-NEXT: sext.b a0, a0
573566; RV64IMZB-NEXT: li a1, 103
574567; 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
579571; RV64IMZB-NEXT: ret
580572 %1 = sdiv i8 %a , 5
581573 ret i8 %1
@@ -728,7 +720,7 @@ define i16 @sdiv16_constant_no_srai(i16 %a) nounwind {
728720; RV64IM-NEXT: lui a1, 5
729721; RV64IM-NEXT: addiw a1, a1, 1366
730722; RV64IM-NEXT: mul a0, a0, a1
731- ; RV64IM-NEXT: srliw a1, a0, 31
723+ ; RV64IM-NEXT: srli a1, a0, 63
732724; RV64IM-NEXT: srli a0, a0, 16
733725; RV64IM-NEXT: add a0, a0, a1
734726; RV64IM-NEXT: ret
@@ -739,7 +731,7 @@ define i16 @sdiv16_constant_no_srai(i16 %a) nounwind {
739731; RV64IMZB-NEXT: lui a1, 5
740732; RV64IMZB-NEXT: addiw a1, a1, 1366
741733; RV64IMZB-NEXT: mul a0, a0, a1
742- ; RV64IMZB-NEXT: srliw a1, a0, 31
734+ ; RV64IMZB-NEXT: srli a1, a0, 63
743735; RV64IMZB-NEXT: srli a0, a0, 16
744736; RV64IMZB-NEXT: add a0, a0, a1
745737; RV64IMZB-NEXT: ret
@@ -778,7 +770,7 @@ define i16 @sdiv16_constant_srai(i16 %a) nounwind {
778770; RV64IM-NEXT: lui a1, 6
779771; RV64IM-NEXT: addiw a1, a1, 1639
780772; RV64IM-NEXT: mul a0, a0, a1
781- ; RV64IM-NEXT: srliw a1, a0, 31
773+ ; RV64IM-NEXT: srli a1, a0, 63
782774; RV64IM-NEXT: srai a0, a0, 17
783775; RV64IM-NEXT: add a0, a0, a1
784776; RV64IM-NEXT: ret
@@ -789,7 +781,7 @@ define i16 @sdiv16_constant_srai(i16 %a) nounwind {
789781; RV64IMZB-NEXT: lui a1, 6
790782; RV64IMZB-NEXT: addiw a1, a1, 1639
791783; RV64IMZB-NEXT: mul a0, a0, a1
792- ; RV64IMZB-NEXT: srliw a1, a0, 31
784+ ; RV64IMZB-NEXT: srli a1, a0, 63
793785; RV64IMZB-NEXT: srai a0, a0, 17
794786; RV64IMZB-NEXT: add a0, a0, a1
795787; RV64IMZB-NEXT: ret
0 commit comments