Skip to content

Commit b9d7513

Browse files
authored
[RISCV] Correct immediate operand type in QC_MVLTUI ISel pattern (#147509)
The pattern was incorrectly using simm5 for QC_MVLTUI when it should have been uimm5.
1 parent 7e928f9 commit b9d7513

File tree

2 files changed

+30
-7
lines changed

2 files changed

+30
-7
lines changed

llvm/lib/Target/RISCV/RISCVInstrInfoXqci.td

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1308,9 +1308,9 @@ class QCIMVCCPat<CondCode Cond, QCIMVCC Inst>
13081308
: Pat<(select (XLenVT (setcc (XLenVT GPRNoX0:$rs1), (XLenVT GPRNoX0:$rs2), Cond)), (XLenVT GPRNoX0:$rs3), (XLenVT GPRNoX0:$rd)),
13091309
(Inst GPRNoX0:$rd, GPRNoX0:$rs1, GPRNoX0:$rs2, GPRNoX0:$rs3)>;
13101310

1311-
class QCIMVCCIPat<CondCode Cond, QCIMVCCI Inst>
1312-
: Pat<(select (XLenVT (setcc (XLenVT GPRNoX0:$rs1), simm5:$imm, Cond)), (XLenVT GPRNoX0:$rs3), (XLenVT GPRNoX0:$rd)),
1313-
(Inst GPRNoX0:$rd, GPRNoX0:$rs1, simm5:$imm, GPRNoX0:$rs3)>;
1311+
class QCIMVCCIPat<CondCode Cond, QCIMVCCI Inst, DAGOperand InTyImm>
1312+
: Pat<(select (XLenVT (setcc (XLenVT GPRNoX0:$rs1), InTyImm:$imm, Cond)), (XLenVT GPRNoX0:$rs3), (XLenVT GPRNoX0:$rd)),
1313+
(Inst GPRNoX0:$rd, GPRNoX0:$rs1, InTyImm:$imm, GPRNoX0:$rs3)>;
13141314

13151315
// Match `riscv_brcc` and lower to the appropriate XQCIBI branch instruction.
13161316
class BcciPat<CondCode Cond, QCIBranchInst_rii Inst, DAGOperand InTyImm>
@@ -1455,10 +1455,10 @@ def : QCIMVCCPat <SETNE, QC_MVNE>;
14551455
def : QCIMVCCPat <SETLT, QC_MVLT>;
14561456
def : QCIMVCCPat <SETULT, QC_MVLTU>;
14571457

1458-
def : QCIMVCCIPat <SETEQ, QC_MVEQI>;
1459-
def : QCIMVCCIPat <SETNE, QC_MVNEI>;
1460-
def : QCIMVCCIPat <SETLT, QC_MVLTI>;
1461-
def : QCIMVCCIPat <SETULT, QC_MVLTUI>;
1458+
def : QCIMVCCIPat <SETEQ, QC_MVEQI, simm5>;
1459+
def : QCIMVCCIPat <SETNE, QC_MVNEI, simm5>;
1460+
def : QCIMVCCIPat <SETLT, QC_MVLTI, simm5>;
1461+
def : QCIMVCCIPat <SETULT, QC_MVLTUI, uimm5>;
14621462
}
14631463

14641464
//===----------------------------------------------------------------------===/i

llvm/test/CodeGen/RISCV/xqcicm.ll

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -677,3 +677,26 @@ entry:
677677
%sel = select i1 %cmp, i32 %x, i32 %y
678678
ret i32 %sel
679679
}
680+
681+
define i32 @select_cc_example_ule_neg(i32 %a, i32 %b, i32 %x, i32 %y) {
682+
; RV32I-LABEL: select_cc_example_ule_neg:
683+
; RV32I: # %bb.0: # %entry
684+
; RV32I-NEXT: li a1, -10
685+
; RV32I-NEXT: bltu a0, a1, .LBB31_2
686+
; RV32I-NEXT: # %bb.1: # %entry
687+
; RV32I-NEXT: mv a2, a3
688+
; RV32I-NEXT: .LBB31_2: # %entry
689+
; RV32I-NEXT: mv a0, a2
690+
; RV32I-NEXT: ret
691+
;
692+
; RV32IXQCICM-LABEL: select_cc_example_ule_neg:
693+
; RV32IXQCICM: # %bb.0: # %entry
694+
; RV32IXQCICM-NEXT: li a1, -10
695+
; RV32IXQCICM-NEXT: qc.mvltu a3, a0, a1, a2
696+
; RV32IXQCICM-NEXT: mv a0, a3
697+
; RV32IXQCICM-NEXT: ret
698+
entry:
699+
%cmp = icmp ule i32 %a, -11
700+
%sel = select i1 %cmp, i32 %x, i32 %y
701+
ret i32 %sel
702+
}

0 commit comments

Comments
 (0)