@@ -494,6 +494,37 @@ define i32 @muli32_p14(i32 %a) nounwind {
494
494
ret i32 %1
495
495
}
496
496
497
+ define i32 @muli32_p18 (i32 %a ) nounwind {
498
+ ; RV32I-LABEL: muli32_p18:
499
+ ; RV32I: # %bb.0:
500
+ ; RV32I-NEXT: li a1, 18
501
+ ; RV32I-NEXT: tail __mulsi3
502
+ ;
503
+ ; RV32IM-LABEL: muli32_p18:
504
+ ; RV32IM: # %bb.0:
505
+ ; RV32IM-NEXT: li a1, 18
506
+ ; RV32IM-NEXT: mul a0, a0, a1
507
+ ; RV32IM-NEXT: ret
508
+ ;
509
+ ; RV64I-LABEL: muli32_p18:
510
+ ; RV64I: # %bb.0:
511
+ ; RV64I-NEXT: addi sp, sp, -16
512
+ ; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
513
+ ; RV64I-NEXT: li a1, 18
514
+ ; RV64I-NEXT: call __muldi3
515
+ ; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload
516
+ ; RV64I-NEXT: addi sp, sp, 16
517
+ ; RV64I-NEXT: ret
518
+ ;
519
+ ; RV64IM-LABEL: muli32_p18:
520
+ ; RV64IM: # %bb.0:
521
+ ; RV64IM-NEXT: li a1, 18
522
+ ; RV64IM-NEXT: mulw a0, a0, a1
523
+ ; RV64IM-NEXT: ret
524
+ %1 = mul i32 %a , 18
525
+ ret i32 %1
526
+ }
527
+
497
528
define i32 @muli32_p28 (i32 %a ) nounwind {
498
529
; RV32I-LABEL: muli32_p28:
499
530
; RV32I: # %bb.0:
@@ -554,6 +585,68 @@ define i32 @muli32_p30(i32 %a) nounwind {
554
585
ret i32 %1
555
586
}
556
587
588
+ define i32 @muli32_p34 (i32 %a ) nounwind {
589
+ ; RV32I-LABEL: muli32_p34:
590
+ ; RV32I: # %bb.0:
591
+ ; RV32I-NEXT: li a1, 34
592
+ ; RV32I-NEXT: tail __mulsi3
593
+ ;
594
+ ; RV32IM-LABEL: muli32_p34:
595
+ ; RV32IM: # %bb.0:
596
+ ; RV32IM-NEXT: li a1, 34
597
+ ; RV32IM-NEXT: mul a0, a0, a1
598
+ ; RV32IM-NEXT: ret
599
+ ;
600
+ ; RV64I-LABEL: muli32_p34:
601
+ ; RV64I: # %bb.0:
602
+ ; RV64I-NEXT: addi sp, sp, -16
603
+ ; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
604
+ ; RV64I-NEXT: li a1, 34
605
+ ; RV64I-NEXT: call __muldi3
606
+ ; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload
607
+ ; RV64I-NEXT: addi sp, sp, 16
608
+ ; RV64I-NEXT: ret
609
+ ;
610
+ ; RV64IM-LABEL: muli32_p34:
611
+ ; RV64IM: # %bb.0:
612
+ ; RV64IM-NEXT: li a1, 34
613
+ ; RV64IM-NEXT: mulw a0, a0, a1
614
+ ; RV64IM-NEXT: ret
615
+ %1 = mul i32 %a , 34
616
+ ret i32 %1
617
+ }
618
+
619
+ define i32 @muli32_p36 (i32 %a ) nounwind {
620
+ ; RV32I-LABEL: muli32_p36:
621
+ ; RV32I: # %bb.0:
622
+ ; RV32I-NEXT: li a1, 36
623
+ ; RV32I-NEXT: tail __mulsi3
624
+ ;
625
+ ; RV32IM-LABEL: muli32_p36:
626
+ ; RV32IM: # %bb.0:
627
+ ; RV32IM-NEXT: li a1, 36
628
+ ; RV32IM-NEXT: mul a0, a0, a1
629
+ ; RV32IM-NEXT: ret
630
+ ;
631
+ ; RV64I-LABEL: muli32_p36:
632
+ ; RV64I: # %bb.0:
633
+ ; RV64I-NEXT: addi sp, sp, -16
634
+ ; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
635
+ ; RV64I-NEXT: li a1, 36
636
+ ; RV64I-NEXT: call __muldi3
637
+ ; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload
638
+ ; RV64I-NEXT: addi sp, sp, 16
639
+ ; RV64I-NEXT: ret
640
+ ;
641
+ ; RV64IM-LABEL: muli32_p36:
642
+ ; RV64IM: # %bb.0:
643
+ ; RV64IM-NEXT: li a1, 36
644
+ ; RV64IM-NEXT: mulw a0, a0, a1
645
+ ; RV64IM-NEXT: ret
646
+ %1 = mul i32 %a , 36
647
+ ret i32 %1
648
+ }
649
+
557
650
define i32 @muli32_p56 (i32 %a ) nounwind {
558
651
; RV32I-LABEL: muli32_p56:
559
652
; RV32I: # %bb.0:
@@ -778,7 +871,40 @@ define i64 @muli64_p63(i64 %a) nounwind {
778
871
ret i64 %1
779
872
}
780
873
781
-
874
+ define i64 @muli64_p72 (i64 %a ) nounwind {
875
+ ; RV32I-LABEL: muli64_p72:
876
+ ; RV32I: # %bb.0:
877
+ ; RV32I-NEXT: addi sp, sp, -16
878
+ ; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
879
+ ; RV32I-NEXT: li a2, 72
880
+ ; RV32I-NEXT: li a3, 0
881
+ ; RV32I-NEXT: call __muldi3
882
+ ; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload
883
+ ; RV32I-NEXT: addi sp, sp, 16
884
+ ; RV32I-NEXT: ret
885
+ ;
886
+ ; RV32IM-LABEL: muli64_p72:
887
+ ; RV32IM: # %bb.0:
888
+ ; RV32IM-NEXT: li a2, 72
889
+ ; RV32IM-NEXT: mul a1, a1, a2
890
+ ; RV32IM-NEXT: mulhu a3, a0, a2
891
+ ; RV32IM-NEXT: add a1, a3, a1
892
+ ; RV32IM-NEXT: mul a0, a0, a2
893
+ ; RV32IM-NEXT: ret
894
+ ;
895
+ ; RV64I-LABEL: muli64_p72:
896
+ ; RV64I: # %bb.0:
897
+ ; RV64I-NEXT: li a1, 72
898
+ ; RV64I-NEXT: tail __muldi3
899
+ ;
900
+ ; RV64IM-LABEL: muli64_p72:
901
+ ; RV64IM: # %bb.0:
902
+ ; RV64IM-NEXT: li a1, 72
903
+ ; RV64IM-NEXT: mul a0, a0, a1
904
+ ; RV64IM-NEXT: ret
905
+ %1 = mul i64 %a , 72
906
+ ret i64 %1
907
+ }
782
908
783
909
define i32 @muli32_m63 (i32 %a ) nounwind {
784
910
; RV32I-LABEL: muli32_m63:
@@ -1327,10 +1453,10 @@ define i128 @muli128_m3840(i128 %a) nounwind {
1327
1453
; RV32I-NEXT: sltu a7, a5, a4
1328
1454
; RV32I-NEXT: sub a6, a6, t2
1329
1455
; RV32I-NEXT: mv t1, a7
1330
- ; RV32I-NEXT: beq t0, a3, .LBB36_2
1456
+ ; RV32I-NEXT: beq t0, a3, .LBB40_2
1331
1457
; RV32I-NEXT: # %bb.1:
1332
1458
; RV32I-NEXT: sltu t1, t0, a3
1333
- ; RV32I-NEXT: .LBB36_2 :
1459
+ ; RV32I-NEXT: .LBB40_2 :
1334
1460
; RV32I-NEXT: sub a2, a2, a1
1335
1461
; RV32I-NEXT: sub a1, t0, a3
1336
1462
; RV32I-NEXT: sub a5, a5, a4
@@ -1441,10 +1567,10 @@ define i128 @muli128_m63(i128 %a) nounwind {
1441
1567
; RV32I-NEXT: sltu a7, a3, a6
1442
1568
; RV32I-NEXT: or t0, t0, a5
1443
1569
; RV32I-NEXT: mv a5, a7
1444
- ; RV32I-NEXT: beq a4, t0, .LBB37_2
1570
+ ; RV32I-NEXT: beq a4, t0, .LBB41_2
1445
1571
; RV32I-NEXT: # %bb.1:
1446
1572
; RV32I-NEXT: sltu a5, a4, t0
1447
- ; RV32I-NEXT: .LBB37_2 :
1573
+ ; RV32I-NEXT: .LBB41_2 :
1448
1574
; RV32I-NEXT: srli t1, a4, 26
1449
1575
; RV32I-NEXT: slli t2, a2, 6
1450
1576
; RV32I-NEXT: srli t3, a2, 26
0 commit comments