Skip to content

Commit 814902a

Browse files
committed
[RISCV] Fix XTheadba patterns broken since cfc574a.
Adding an OperandTransform to CSImm12MulBy4 and CSImm12MulBy8 for Zba broke these patterns. They should have been changed in the same, but we lacked sufficient testing.
1 parent cd3c165 commit 814902a

File tree

3 files changed

+50
-26
lines changed

3 files changed

+50
-26
lines changed

llvm/lib/Target/RISCV/RISCVInstrInfoXTHead.td

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -550,9 +550,9 @@ def : Pat<(add_non_imm12 sh3add_op:$rs1, (XLenVT GPR:$rs2)),
550550
(TH_ADDSL GPR:$rs2, sh3add_op:$rs1, 3)>;
551551

552552
def : Pat<(add (XLenVT GPR:$r), CSImm12MulBy4:$i),
553-
(TH_ADDSL GPR:$r, (XLenVT (ADDI (XLenVT X0), (SimmShiftRightBy2XForm CSImm12MulBy4:$i))), 2)>;
553+
(TH_ADDSL GPR:$r, (XLenVT (ADDI (XLenVT X0), CSImm12MulBy4:$i)), 2)>;
554554
def : Pat<(add (XLenVT GPR:$r), CSImm12MulBy8:$i),
555-
(TH_ADDSL GPR:$r, (XLenVT (ADDI (XLenVT X0), (SimmShiftRightBy3XForm CSImm12MulBy8:$i))), 3)>;
555+
(TH_ADDSL GPR:$r, (XLenVT (ADDI (XLenVT X0), CSImm12MulBy8:$i)), 3)>;
556556

557557
def : Pat<(mul_const_oneuse GPR:$r, (XLenVT 200)),
558558
(SLLI (XLenVT (TH_ADDSL (XLenVT (TH_ADDSL GPR:$r, GPR:$r, 2)),

llvm/test/CodeGen/RISCV/rv32xtheadba.ll

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -601,23 +601,35 @@ define i32 @mul4104(i32 %a) {
601601
}
602602

603603
define i32 @add4104(i32 %a) {
604-
; CHECK-LABEL: add4104:
605-
; CHECK: # %bb.0:
606-
; CHECK-NEXT: lui a1, 1
607-
; CHECK-NEXT: addi a1, a1, 8
608-
; CHECK-NEXT: add a0, a0, a1
609-
; CHECK-NEXT: ret
604+
; RV32I-LABEL: add4104:
605+
; RV32I: # %bb.0:
606+
; RV32I-NEXT: lui a1, 1
607+
; RV32I-NEXT: addi a1, a1, 8
608+
; RV32I-NEXT: add a0, a0, a1
609+
; RV32I-NEXT: ret
610+
;
611+
; RV32XTHEADBA-LABEL: add4104:
612+
; RV32XTHEADBA: # %bb.0:
613+
; RV32XTHEADBA-NEXT: li a1, 1026
614+
; RV32XTHEADBA-NEXT: th.addsl a0, a0, a1, 2
615+
; RV32XTHEADBA-NEXT: ret
610616
%c = add i32 %a, 4104
611617
ret i32 %c
612618
}
613619

614620
define i32 @add8208(i32 %a) {
615-
; CHECK-LABEL: add8208:
616-
; CHECK: # %bb.0:
617-
; CHECK-NEXT: lui a1, 2
618-
; CHECK-NEXT: addi a1, a1, 16
619-
; CHECK-NEXT: add a0, a0, a1
620-
; CHECK-NEXT: ret
621+
; RV32I-LABEL: add8208:
622+
; RV32I: # %bb.0:
623+
; RV32I-NEXT: lui a1, 2
624+
; RV32I-NEXT: addi a1, a1, 16
625+
; RV32I-NEXT: add a0, a0, a1
626+
; RV32I-NEXT: ret
627+
;
628+
; RV32XTHEADBA-LABEL: add8208:
629+
; RV32XTHEADBA: # %bb.0:
630+
; RV32XTHEADBA-NEXT: li a1, 1026
631+
; RV32XTHEADBA-NEXT: th.addsl a0, a0, a1, 3
632+
; RV32XTHEADBA-NEXT: ret
621633
%c = add i32 %a, 8208
622634
ret i32 %c
623635
}

llvm/test/CodeGen/RISCV/rv64xtheadba.ll

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -966,12 +966,18 @@ define signext i32 @mulw576(i32 signext %a) {
966966
}
967967

968968
define i64 @add4104(i64 %a) {
969-
; CHECK-LABEL: add4104:
970-
; CHECK: # %bb.0:
971-
; CHECK-NEXT: lui a1, 1
972-
; CHECK-NEXT: addiw a1, a1, 8
973-
; CHECK-NEXT: add a0, a0, a1
974-
; CHECK-NEXT: ret
969+
; RV64I-LABEL: add4104:
970+
; RV64I: # %bb.0:
971+
; RV64I-NEXT: lui a1, 1
972+
; RV64I-NEXT: addiw a1, a1, 8
973+
; RV64I-NEXT: add a0, a0, a1
974+
; RV64I-NEXT: ret
975+
;
976+
; RV64XTHEADBA-LABEL: add4104:
977+
; RV64XTHEADBA: # %bb.0:
978+
; RV64XTHEADBA-NEXT: li a1, 1026
979+
; RV64XTHEADBA-NEXT: th.addsl a0, a0, a1, 2
980+
; RV64XTHEADBA-NEXT: ret
975981
%c = add i64 %a, 4104
976982
ret i64 %c
977983
}
@@ -988,12 +994,18 @@ define i64 @add4104_2(i64 %a) {
988994
}
989995

990996
define i64 @add8208(i64 %a) {
991-
; CHECK-LABEL: add8208:
992-
; CHECK: # %bb.0:
993-
; CHECK-NEXT: lui a1, 2
994-
; CHECK-NEXT: addiw a1, a1, 16
995-
; CHECK-NEXT: add a0, a0, a1
996-
; CHECK-NEXT: ret
997+
; RV64I-LABEL: add8208:
998+
; RV64I: # %bb.0:
999+
; RV64I-NEXT: lui a1, 2
1000+
; RV64I-NEXT: addiw a1, a1, 16
1001+
; RV64I-NEXT: add a0, a0, a1
1002+
; RV64I-NEXT: ret
1003+
;
1004+
; RV64XTHEADBA-LABEL: add8208:
1005+
; RV64XTHEADBA: # %bb.0:
1006+
; RV64XTHEADBA-NEXT: li a1, 1026
1007+
; RV64XTHEADBA-NEXT: th.addsl a0, a0, a1, 3
1008+
; RV64XTHEADBA-NEXT: ret
9971009
%c = add i64 %a, 8208
9981010
ret i64 %c
9991011
}

0 commit comments

Comments
 (0)