@@ -464,6 +464,37 @@ define i32 @mulhu_constant(i32 %a) nounwind {
464
464
ret i32 %4
465
465
}
466
466
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
+
467
498
define i32 @muli32_p14 (i32 %a ) nounwind {
468
499
; RV32I-LABEL: muli32_p14:
469
500
; RV32I: # %bb.0:
@@ -494,6 +525,37 @@ define i32 @muli32_p14(i32 %a) nounwind {
494
525
ret i32 %1
495
526
}
496
527
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
+
497
559
define i32 @muli32_p28 (i32 %a ) nounwind {
498
560
; RV32I-LABEL: muli32_p28:
499
561
; RV32I: # %bb.0:
@@ -672,6 +734,34 @@ define i32 @muli32_p65(i32 %a) nounwind {
672
734
ret i32 %1
673
735
}
674
736
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
+
675
765
define i32 @muli32_p63 (i32 %a ) nounwind {
676
766
; RV32I-LABEL: muli32_p63:
677
767
; RV32I: # %bb.0:
@@ -778,7 +868,80 @@ define i64 @muli64_p63(i64 %a) nounwind {
778
868
ret i64 %1
779
869
}
780
870
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
+ }
781
910
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
+ }
782
945
783
946
define i32 @muli32_m63 (i32 %a ) nounwind {
784
947
; RV32I-LABEL: muli32_m63:
@@ -1327,10 +1490,10 @@ define i128 @muli128_m3840(i128 %a) nounwind {
1327
1490
; RV32I-NEXT: sltu a7, a5, a4
1328
1491
; RV32I-NEXT: sub a6, a6, t2
1329
1492
; RV32I-NEXT: mv t1, a7
1330
- ; RV32I-NEXT: beq t0, a3, .LBB36_2
1493
+ ; RV32I-NEXT: beq t0, a3, .LBB41_2
1331
1494
; RV32I-NEXT: # %bb.1:
1332
1495
; RV32I-NEXT: sltu t1, t0, a3
1333
- ; RV32I-NEXT: .LBB36_2 :
1496
+ ; RV32I-NEXT: .LBB41_2 :
1334
1497
; RV32I-NEXT: sub a2, a2, a1
1335
1498
; RV32I-NEXT: sub a1, t0, a3
1336
1499
; RV32I-NEXT: sub a5, a5, a4
@@ -1441,10 +1604,10 @@ define i128 @muli128_m63(i128 %a) nounwind {
1441
1604
; RV32I-NEXT: sltu a7, a3, a6
1442
1605
; RV32I-NEXT: or t0, t0, a5
1443
1606
; RV32I-NEXT: mv a5, a7
1444
- ; RV32I-NEXT: beq a4, t0, .LBB37_2
1607
+ ; RV32I-NEXT: beq a4, t0, .LBB42_2
1445
1608
; RV32I-NEXT: # %bb.1:
1446
1609
; RV32I-NEXT: sltu a5, a4, t0
1447
- ; RV32I-NEXT: .LBB37_2 :
1610
+ ; RV32I-NEXT: .LBB42_2 :
1448
1611
; RV32I-NEXT: srli t1, a4, 26
1449
1612
; RV32I-NEXT: slli t2, a2, 6
1450
1613
; RV32I-NEXT: srli t3, a2, 26
0 commit comments