@@ -464,6 +464,37 @@ define i32 @mulhu_constant(i32 %a) nounwind {
464464 ret i32 %4
465465}
466466
467+ define i32 @muli32_p10 (i32 %a ) nounwind {
468+ ; RV32I-LABEL: muli32_p10:
469+ ; RV32I: # %bb.0:
470+ ; RV32I-NEXT: li a1, 10
471+ ; RV32I-NEXT: tail __mulsi3
472+ ;
473+ ; RV32IM-LABEL: muli32_p10:
474+ ; RV32IM: # %bb.0:
475+ ; RV32IM-NEXT: li a1, 10
476+ ; RV32IM-NEXT: mul a0, a0, a1
477+ ; RV32IM-NEXT: ret
478+ ;
479+ ; RV64I-LABEL: muli32_p10:
480+ ; RV64I: # %bb.0:
481+ ; RV64I-NEXT: addi sp, sp, -16
482+ ; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
483+ ; RV64I-NEXT: li a1, 10
484+ ; RV64I-NEXT: call __muldi3
485+ ; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload
486+ ; RV64I-NEXT: addi sp, sp, 16
487+ ; RV64I-NEXT: ret
488+ ;
489+ ; RV64IM-LABEL: muli32_p10:
490+ ; RV64IM: # %bb.0:
491+ ; RV64IM-NEXT: li a1, 10
492+ ; RV64IM-NEXT: mulw a0, a0, a1
493+ ; RV64IM-NEXT: ret
494+ %1 = mul i32 %a , 10
495+ ret i32 %1
496+ }
497+
467498define i32 @muli32_p14 (i32 %a ) nounwind {
468499; RV32I-LABEL: muli32_p14:
469500; RV32I: # %bb.0:
@@ -494,6 +525,37 @@ define i32 @muli32_p14(i32 %a) nounwind {
494525 ret i32 %1
495526}
496527
528+ define i32 @muli32_p20 (i32 %a ) nounwind {
529+ ; RV32I-LABEL: muli32_p20:
530+ ; RV32I: # %bb.0:
531+ ; RV32I-NEXT: li a1, 20
532+ ; RV32I-NEXT: tail __mulsi3
533+ ;
534+ ; RV32IM-LABEL: muli32_p20:
535+ ; RV32IM: # %bb.0:
536+ ; RV32IM-NEXT: li a1, 20
537+ ; RV32IM-NEXT: mul a0, a0, a1
538+ ; RV32IM-NEXT: ret
539+ ;
540+ ; RV64I-LABEL: muli32_p20:
541+ ; RV64I: # %bb.0:
542+ ; RV64I-NEXT: addi sp, sp, -16
543+ ; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
544+ ; RV64I-NEXT: li a1, 20
545+ ; RV64I-NEXT: call __muldi3
546+ ; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload
547+ ; RV64I-NEXT: addi sp, sp, 16
548+ ; RV64I-NEXT: ret
549+ ;
550+ ; RV64IM-LABEL: muli32_p20:
551+ ; RV64IM: # %bb.0:
552+ ; RV64IM-NEXT: li a1, 20
553+ ; RV64IM-NEXT: mulw a0, a0, a1
554+ ; RV64IM-NEXT: ret
555+ %1 = mul i32 %a , 20
556+ ret i32 %1
557+ }
558+
497559define i32 @muli32_p28 (i32 %a ) nounwind {
498560; RV32I-LABEL: muli32_p28:
499561; RV32I: # %bb.0:
@@ -672,6 +734,34 @@ define i32 @muli32_p65(i32 %a) nounwind {
672734 ret i32 %1
673735}
674736
737+ define i32 @muli32_p66 (i32 %a ) nounwind {
738+ ; RV32I-LABEL: muli32_p66:
739+ ; RV32I: # %bb.0:
740+ ; RV32I-NEXT: slli a1, a0, 6
741+ ; RV32I-NEXT: add a0, a1, a0
742+ ; RV32I-NEXT: ret
743+ ;
744+ ; RV32IM-LABEL: muli32_p66:
745+ ; RV32IM: # %bb.0:
746+ ; RV32IM-NEXT: slli a1, a0, 6
747+ ; RV32IM-NEXT: add a0, a1, a0
748+ ; RV32IM-NEXT: ret
749+ ;
750+ ; RV64I-LABEL: muli32_p66:
751+ ; RV64I: # %bb.0:
752+ ; RV64I-NEXT: slli a1, a0, 6
753+ ; RV64I-NEXT: addw a0, a1, a0
754+ ; RV64I-NEXT: ret
755+ ;
756+ ; RV64IM-LABEL: muli32_p66:
757+ ; RV64IM: # %bb.0:
758+ ; RV64IM-NEXT: slli a1, a0, 6
759+ ; RV64IM-NEXT: addw a0, a1, a0
760+ ; RV64IM-NEXT: ret
761+ %1 = mul i32 %a , 65
762+ ret i32 %1
763+ }
764+
675765define i32 @muli32_p63 (i32 %a ) nounwind {
676766; RV32I-LABEL: muli32_p63:
677767; RV32I: # %bb.0:
@@ -778,7 +868,80 @@ define i64 @muli64_p63(i64 %a) nounwind {
778868 ret i64 %1
779869}
780870
871+ define i64 @muli64_p60 (i64 %a ) nounwind {
872+ ; RV32I-LABEL: muli64_p60:
873+ ; RV32I: # %bb.0:
874+ ; RV32I-NEXT: addi sp, sp, -16
875+ ; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
876+ ; RV32I-NEXT: li a2, 60
877+ ; RV32I-NEXT: li a3, 0
878+ ; RV32I-NEXT: call __muldi3
879+ ; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload
880+ ; RV32I-NEXT: addi sp, sp, 16
881+ ; RV32I-NEXT: ret
882+ ;
883+ ; RV32IM-LABEL: muli64_p60:
884+ ; RV32IM: # %bb.0:
885+ ; RV32IM-NEXT: li a2, 60
886+ ; RV32IM-NEXT: slli a3, a1, 2
887+ ; RV32IM-NEXT: slli a1, a1, 6
888+ ; RV32IM-NEXT: sub a1, a1, a3
889+ ; RV32IM-NEXT: slli a3, a0, 2
890+ ; RV32IM-NEXT: mulhu a2, a0, a2
891+ ; RV32IM-NEXT: slli a0, a0, 6
892+ ; RV32IM-NEXT: add a1, a2, a1
893+ ; RV32IM-NEXT: sub a0, a0, a3
894+ ; RV32IM-NEXT: ret
895+ ;
896+ ; RV64I-LABEL: muli64_p60:
897+ ; RV64I: # %bb.0:
898+ ; RV64I-NEXT: li a1, 60
899+ ; RV64I-NEXT: tail __muldi3
900+ ;
901+ ; RV64IM-LABEL: muli64_p60:
902+ ; RV64IM: # %bb.0:
903+ ; RV64IM-NEXT: slli a1, a0, 2
904+ ; RV64IM-NEXT: slli a0, a0, 6
905+ ; RV64IM-NEXT: sub a0, a0, a1
906+ ; RV64IM-NEXT: ret
907+ %1 = mul i64 %a , 60
908+ ret i64 %1
909+ }
781910
911+ define i64 @muli64_p68 (i64 %a ) nounwind {
912+ ; RV32I-LABEL: muli64_p68:
913+ ; RV32I: # %bb.0:
914+ ; RV32I-NEXT: addi sp, sp, -16
915+ ; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
916+ ; RV32I-NEXT: li a2, 68
917+ ; RV32I-NEXT: li a3, 0
918+ ; RV32I-NEXT: call __muldi3
919+ ; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload
920+ ; RV32I-NEXT: addi sp, sp, 16
921+ ; RV32I-NEXT: ret
922+ ;
923+ ; RV32IM-LABEL: muli64_p68:
924+ ; RV32IM: # %bb.0:
925+ ; RV32IM-NEXT: li a2, 68
926+ ; RV32IM-NEXT: mul a1, a1, a2
927+ ; RV32IM-NEXT: mulhu a3, a0, a2
928+ ; RV32IM-NEXT: add a1, a3, a1
929+ ; RV32IM-NEXT: mul a0, a0, a2
930+ ; RV32IM-NEXT: ret
931+ ;
932+ ; RV64I-LABEL: muli64_p68:
933+ ; RV64I: # %bb.0:
934+ ; RV64I-NEXT: li a1, 68
935+ ; RV64I-NEXT: tail __muldi3
936+ ;
937+ ; RV64IM-LABEL: muli64_p68:
938+ ; RV64IM: # %bb.0:
939+ ; RV64IM-NEXT: li a1, 68
940+ ; RV64IM-NEXT: mul a0, a0, a1
941+ ; RV64IM-NEXT: ret
942+ %1 = mul i64 %a , 68
943+ ret i64 %1
944+ }
782945
783946define i32 @muli32_m63 (i32 %a ) nounwind {
784947; RV32I-LABEL: muli32_m63:
@@ -1327,10 +1490,10 @@ define i128 @muli128_m3840(i128 %a) nounwind {
13271490; RV32I-NEXT: sltu a7, a5, a4
13281491; RV32I-NEXT: sub a6, a6, t2
13291492; RV32I-NEXT: mv t1, a7
1330- ; RV32I-NEXT: beq t0, a3, .LBB36_2
1493+ ; RV32I-NEXT: beq t0, a3, .LBB41_2
13311494; RV32I-NEXT: # %bb.1:
13321495; RV32I-NEXT: sltu t1, t0, a3
1333- ; RV32I-NEXT: .LBB36_2 :
1496+ ; RV32I-NEXT: .LBB41_2 :
13341497; RV32I-NEXT: sub a2, a2, a1
13351498; RV32I-NEXT: sub a1, t0, a3
13361499; RV32I-NEXT: sub a5, a5, a4
@@ -1441,10 +1604,10 @@ define i128 @muli128_m63(i128 %a) nounwind {
14411604; RV32I-NEXT: sltu a7, a3, a6
14421605; RV32I-NEXT: or t0, t0, a5
14431606; RV32I-NEXT: mv a5, a7
1444- ; RV32I-NEXT: beq a4, t0, .LBB37_2
1607+ ; RV32I-NEXT: beq a4, t0, .LBB42_2
14451608; RV32I-NEXT: # %bb.1:
14461609; RV32I-NEXT: sltu a5, a4, t0
1447- ; RV32I-NEXT: .LBB37_2 :
1610+ ; RV32I-NEXT: .LBB42_2 :
14481611; RV32I-NEXT: srli t1, a4, 26
14491612; RV32I-NEXT: slli t2, a2, 6
14501613; RV32I-NEXT: srli t3, a2, 26
0 commit comments