130 changes: 98 additions & 32 deletions llvm/test/CodeGen/RISCV/rv64zba.ll
Original file line number Diff line number Diff line change
Expand Up @@ -943,14 +943,14 @@ define i64 @mul11(i64 %a) {
;
; RV64IB-LABEL: mul11:
; RV64IB: # %bb.0:
; RV64IB-NEXT: addi a1, zero, 11
; RV64IB-NEXT: mul a0, a0, a1
; RV64IB-NEXT: sh2add a1, a0, a0
; RV64IB-NEXT: sh1add a0, a1, a0
; RV64IB-NEXT: ret
;
; RV64IBA-LABEL: mul11:
; RV64IBA: # %bb.0:
; RV64IBA-NEXT: addi a1, zero, 11
; RV64IBA-NEXT: mul a0, a0, a1
; RV64IBA-NEXT: sh2add a1, a0, a0
; RV64IBA-NEXT: sh1add a0, a1, a0
; RV64IBA-NEXT: ret
%c = mul i64 %a, 11
ret i64 %c
Expand All @@ -965,14 +965,14 @@ define i64 @mul19(i64 %a) {
;
; RV64IB-LABEL: mul19:
; RV64IB: # %bb.0:
; RV64IB-NEXT: addi a1, zero, 19
; RV64IB-NEXT: mul a0, a0, a1
; RV64IB-NEXT: sh3add a1, a0, a0
; RV64IB-NEXT: sh1add a0, a1, a0
; RV64IB-NEXT: ret
;
; RV64IBA-LABEL: mul19:
; RV64IBA: # %bb.0:
; RV64IBA-NEXT: addi a1, zero, 19
; RV64IBA-NEXT: mul a0, a0, a1
; RV64IBA-NEXT: sh3add a1, a0, a0
; RV64IBA-NEXT: sh1add a0, a1, a0
; RV64IBA-NEXT: ret
%c = mul i64 %a, 19
ret i64 %c
Expand All @@ -987,14 +987,14 @@ define i64 @mul13(i64 %a) {
;
; RV64IB-LABEL: mul13:
; RV64IB: # %bb.0:
; RV64IB-NEXT: addi a1, zero, 13
; RV64IB-NEXT: mul a0, a0, a1
; RV64IB-NEXT: sh1add a1, a0, a0
; RV64IB-NEXT: sh2add a0, a1, a0
; RV64IB-NEXT: ret
;
; RV64IBA-LABEL: mul13:
; RV64IBA: # %bb.0:
; RV64IBA-NEXT: addi a1, zero, 13
; RV64IBA-NEXT: mul a0, a0, a1
; RV64IBA-NEXT: sh1add a1, a0, a0
; RV64IBA-NEXT: sh2add a0, a1, a0
; RV64IBA-NEXT: ret
%c = mul i64 %a, 13
ret i64 %c
Expand All @@ -1009,14 +1009,14 @@ define i64 @mul21(i64 %a) {
;
; RV64IB-LABEL: mul21:
; RV64IB: # %bb.0:
; RV64IB-NEXT: addi a1, zero, 21
; RV64IB-NEXT: mul a0, a0, a1
; RV64IB-NEXT: sh2add a1, a0, a0
; RV64IB-NEXT: sh2add a0, a1, a0
; RV64IB-NEXT: ret
;
; RV64IBA-LABEL: mul21:
; RV64IBA: # %bb.0:
; RV64IBA-NEXT: addi a1, zero, 21
; RV64IBA-NEXT: mul a0, a0, a1
; RV64IBA-NEXT: sh2add a1, a0, a0
; RV64IBA-NEXT: sh2add a0, a1, a0
; RV64IBA-NEXT: ret
%c = mul i64 %a, 21
ret i64 %c
Expand All @@ -1031,14 +1031,14 @@ define i64 @mul37(i64 %a) {
;
; RV64IB-LABEL: mul37:
; RV64IB: # %bb.0:
; RV64IB-NEXT: addi a1, zero, 37
; RV64IB-NEXT: mul a0, a0, a1
; RV64IB-NEXT: sh3add a1, a0, a0
; RV64IB-NEXT: sh2add a0, a1, a0
; RV64IB-NEXT: ret
;
; RV64IBA-LABEL: mul37:
; RV64IBA: # %bb.0:
; RV64IBA-NEXT: addi a1, zero, 37
; RV64IBA-NEXT: mul a0, a0, a1
; RV64IBA-NEXT: sh3add a1, a0, a0
; RV64IBA-NEXT: sh2add a0, a1, a0
; RV64IBA-NEXT: ret
%c = mul i64 %a, 37
ret i64 %c
Expand All @@ -1053,14 +1053,14 @@ define i64 @mul25(i64 %a) {
;
; RV64IB-LABEL: mul25:
; RV64IB: # %bb.0:
; RV64IB-NEXT: addi a1, zero, 25
; RV64IB-NEXT: mul a0, a0, a1
; RV64IB-NEXT: sh1add a1, a0, a0
; RV64IB-NEXT: sh3add a0, a1, a0
; RV64IB-NEXT: ret
;
; RV64IBA-LABEL: mul25:
; RV64IBA: # %bb.0:
; RV64IBA-NEXT: addi a1, zero, 25
; RV64IBA-NEXT: mul a0, a0, a1
; RV64IBA-NEXT: sh1add a1, a0, a0
; RV64IBA-NEXT: sh3add a0, a1, a0
; RV64IBA-NEXT: ret
%c = mul i64 %a, 25
ret i64 %c
Expand All @@ -1075,14 +1075,14 @@ define i64 @mul41(i64 %a) {
;
; RV64IB-LABEL: mul41:
; RV64IB: # %bb.0:
; RV64IB-NEXT: addi a1, zero, 41
; RV64IB-NEXT: mul a0, a0, a1
; RV64IB-NEXT: sh2add a1, a0, a0
; RV64IB-NEXT: sh3add a0, a1, a0
; RV64IB-NEXT: ret
;
; RV64IBA-LABEL: mul41:
; RV64IBA: # %bb.0:
; RV64IBA-NEXT: addi a1, zero, 41
; RV64IBA-NEXT: mul a0, a0, a1
; RV64IBA-NEXT: sh2add a1, a0, a0
; RV64IBA-NEXT: sh3add a0, a1, a0
; RV64IBA-NEXT: ret
%c = mul i64 %a, 41
ret i64 %c
Expand All @@ -1097,19 +1097,85 @@ define i64 @mul73(i64 %a) {
;
; RV64IB-LABEL: mul73:
; RV64IB: # %bb.0:
; RV64IB-NEXT: addi a1, zero, 73
; RV64IB-NEXT: mul a0, a0, a1
; RV64IB-NEXT: sh3add a1, a0, a0
; RV64IB-NEXT: sh3add a0, a1, a0
; RV64IB-NEXT: ret
;
; RV64IBA-LABEL: mul73:
; RV64IBA: # %bb.0:
; RV64IBA-NEXT: addi a1, zero, 73
; RV64IBA-NEXT: mul a0, a0, a1
; RV64IBA-NEXT: sh3add a1, a0, a0
; RV64IBA-NEXT: sh3add a0, a1, a0
; RV64IBA-NEXT: ret
%c = mul i64 %a, 73
ret i64 %c
}

define i64 @mul27(i64 %a) {
; RV64I-LABEL: mul27:
; RV64I: # %bb.0:
; RV64I-NEXT: addi a1, zero, 27
; RV64I-NEXT: mul a0, a0, a1
; RV64I-NEXT: ret
;
; RV64IB-LABEL: mul27:
; RV64IB: # %bb.0:
; RV64IB-NEXT: sh3add a0, a0, a0
; RV64IB-NEXT: sh1add a0, a0, a0
; RV64IB-NEXT: ret
;
; RV64IBA-LABEL: mul27:
; RV64IBA: # %bb.0:
; RV64IBA-NEXT: sh3add a0, a0, a0
; RV64IBA-NEXT: sh1add a0, a0, a0
; RV64IBA-NEXT: ret
%c = mul i64 %a, 27
ret i64 %c
}

define i64 @mul45(i64 %a) {
; RV64I-LABEL: mul45:
; RV64I: # %bb.0:
; RV64I-NEXT: addi a1, zero, 45
; RV64I-NEXT: mul a0, a0, a1
; RV64I-NEXT: ret
;
; RV64IB-LABEL: mul45:
; RV64IB: # %bb.0:
; RV64IB-NEXT: sh3add a0, a0, a0
; RV64IB-NEXT: sh2add a0, a0, a0
; RV64IB-NEXT: ret
;
; RV64IBA-LABEL: mul45:
; RV64IBA: # %bb.0:
; RV64IBA-NEXT: sh3add a0, a0, a0
; RV64IBA-NEXT: sh2add a0, a0, a0
; RV64IBA-NEXT: ret
%c = mul i64 %a, 45
ret i64 %c
}

define i64 @mul81(i64 %a) {
; RV64I-LABEL: mul81:
; RV64I: # %bb.0:
; RV64I-NEXT: addi a1, zero, 81
; RV64I-NEXT: mul a0, a0, a1
; RV64I-NEXT: ret
;
; RV64IB-LABEL: mul81:
; RV64IB: # %bb.0:
; RV64IB-NEXT: sh3add a0, a0, a0
; RV64IB-NEXT: sh3add a0, a0, a0
; RV64IB-NEXT: ret
;
; RV64IBA-LABEL: mul81:
; RV64IBA: # %bb.0:
; RV64IBA-NEXT: sh3add a0, a0, a0
; RV64IBA-NEXT: sh3add a0, a0, a0
; RV64IBA-NEXT: ret
%c = mul i64 %a, 81
ret i64 %c
}

define i64 @mul4098(i64 %a) {
; RV64I-LABEL: mul4098:
; RV64I: # %bb.0:
Expand Down
4 changes: 2 additions & 2 deletions llvm/test/CodeGen/RISCV/xaluo.ll
Original file line number Diff line number Diff line change
Expand Up @@ -1149,8 +1149,8 @@ define zeroext i1 @umulo2.i32(i32 %v1, i32* %res) {
; RV64ZBA-LABEL: umulo2.i32:
; RV64ZBA: # %bb.0: # %entry
; RV64ZBA-NEXT: zext.w a0, a0
; RV64ZBA-NEXT: addi a2, zero, 13
; RV64ZBA-NEXT: mul a2, a0, a2
; RV64ZBA-NEXT: sh1add a2, a0, a0
; RV64ZBA-NEXT: sh2add a2, a2, a0
; RV64ZBA-NEXT: srli a0, a2, 32
; RV64ZBA-NEXT: snez a0, a0
; RV64ZBA-NEXT: sw a2, 0(a1)
Expand Down