Skip to content

Commit 4190d6c

Browse files
authored
[NFC][RISCV] Add more test cases for multiplication (#139195)
1 parent 78cc822 commit 4190d6c

File tree

1 file changed

+131
-5
lines changed

1 file changed

+131
-5
lines changed

llvm/test/CodeGen/RISCV/mul.ll

Lines changed: 131 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -494,6 +494,37 @@ define i32 @muli32_p14(i32 %a) nounwind {
494494
ret i32 %1
495495
}
496496

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+
497528
define i32 @muli32_p28(i32 %a) nounwind {
498529
; RV32I-LABEL: muli32_p28:
499530
; RV32I: # %bb.0:
@@ -554,6 +585,68 @@ define i32 @muli32_p30(i32 %a) nounwind {
554585
ret i32 %1
555586
}
556587

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+
557650
define i32 @muli32_p56(i32 %a) nounwind {
558651
; RV32I-LABEL: muli32_p56:
559652
; RV32I: # %bb.0:
@@ -778,7 +871,40 @@ define i64 @muli64_p63(i64 %a) nounwind {
778871
ret i64 %1
779872
}
780873

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+
}
782908

783909
define i32 @muli32_m63(i32 %a) nounwind {
784910
; RV32I-LABEL: muli32_m63:
@@ -1327,10 +1453,10 @@ define i128 @muli128_m3840(i128 %a) nounwind {
13271453
; RV32I-NEXT: sltu a7, a5, a4
13281454
; RV32I-NEXT: sub a6, a6, t2
13291455
; RV32I-NEXT: mv t1, a7
1330-
; RV32I-NEXT: beq t0, a3, .LBB36_2
1456+
; RV32I-NEXT: beq t0, a3, .LBB40_2
13311457
; RV32I-NEXT: # %bb.1:
13321458
; RV32I-NEXT: sltu t1, t0, a3
1333-
; RV32I-NEXT: .LBB36_2:
1459+
; RV32I-NEXT: .LBB40_2:
13341460
; RV32I-NEXT: sub a2, a2, a1
13351461
; RV32I-NEXT: sub a1, t0, a3
13361462
; RV32I-NEXT: sub a5, a5, a4
@@ -1441,10 +1567,10 @@ define i128 @muli128_m63(i128 %a) nounwind {
14411567
; RV32I-NEXT: sltu a7, a3, a6
14421568
; RV32I-NEXT: or t0, t0, a5
14431569
; RV32I-NEXT: mv a5, a7
1444-
; RV32I-NEXT: beq a4, t0, .LBB37_2
1570+
; RV32I-NEXT: beq a4, t0, .LBB41_2
14451571
; RV32I-NEXT: # %bb.1:
14461572
; RV32I-NEXT: sltu a5, a4, t0
1447-
; RV32I-NEXT: .LBB37_2:
1573+
; RV32I-NEXT: .LBB41_2:
14481574
; RV32I-NEXT: srli t1, a4, 26
14491575
; RV32I-NEXT: slli t2, a2, 6
14501576
; RV32I-NEXT: srli t3, a2, 26

0 commit comments

Comments
 (0)