Skip to content

Commit 8208591

Browse files
authored
[RISCV] Use TargetConstant for the immediate RISCVISD::SHL_ADD nodes. (#166312)
This is consistent with some other nodes that require a constant. Particularly intrinsics with ImmArg.
1 parent 208b736 commit 8208591

File tree

3 files changed

+25
-19
lines changed

3 files changed

+25
-19
lines changed

llvm/lib/Target/RISCV/RISCVISelLowering.cpp

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -9186,7 +9186,7 @@ static SDValue lowerSelectToBinOp(SDNode *N, SelectionDAG &DAG,
91869186
unsigned ShAmount = Log2_64(TrueM1);
91879187
if (Subtarget.hasShlAdd(ShAmount))
91889188
return DAG.getNode(RISCVISD::SHL_ADD, DL, VT, CondV,
9189-
DAG.getConstant(ShAmount, DL, VT), CondV);
9189+
DAG.getTargetConstant(ShAmount, DL, VT), CondV);
91909190
}
91919191
}
91929192
// (select c, y, 0) -> -c & y
@@ -15463,7 +15463,7 @@ static SDValue transformAddShlImm(SDNode *N, SelectionDAG &DAG,
1546315463
SDValue NS = (C0 < C1) ? N0->getOperand(0) : N1->getOperand(0);
1546415464
SDValue NL = (C0 > C1) ? N0->getOperand(0) : N1->getOperand(0);
1546515465
SDValue SHADD = DAG.getNode(RISCVISD::SHL_ADD, DL, VT, NL,
15466-
DAG.getConstant(Diff, DL, VT), NS);
15466+
DAG.getTargetConstant(Diff, DL, VT), NS);
1546715467
return DAG.getNode(ISD::SHL, DL, VT, SHADD, DAG.getConstant(Bits, DL, VT));
1546815468
}
1546915469

@@ -15501,7 +15501,7 @@ static SDValue combineShlAddIAddImpl(SDNode *N, SDValue AddI, SDValue Other,
1550115501
int64_t AddConst = AddVal.getSExtValue();
1550215502

1550315503
SDValue SHADD = DAG.getNode(RISCVISD::SHL_ADD, DL, VT, SHLVal->getOperand(0),
15504-
DAG.getConstant(ShlConst, DL, VT), Other);
15504+
DAG.getTargetConstant(ShlConst, DL, VT), Other);
1550515505
return DAG.getNode(ISD::ADD, DL, VT, SHADD,
1550615506
DAG.getSignedConstant(AddConst, DL, VT));
1550715507
}
@@ -16501,9 +16501,9 @@ static SDValue getShlAddShlAdd(SDNode *N, SelectionDAG &DAG, unsigned ShX,
1650116501
EVT VT = N->getValueType(0);
1650216502
SDValue X = N->getOperand(0);
1650316503
SDValue Mul359 = DAG.getNode(RISCVISD::SHL_ADD, DL, VT, X,
16504-
DAG.getConstant(ShY, DL, VT), X);
16504+
DAG.getTargetConstant(ShY, DL, VT), X);
1650516505
return DAG.getNode(RISCVISD::SHL_ADD, DL, VT, Mul359,
16506-
DAG.getConstant(ShX, DL, VT), Mul359);
16506+
DAG.getTargetConstant(ShX, DL, VT), Mul359);
1650716507
}
1650816508

1650916509
static SDValue expandMulToShlAddShlAdd(SDNode *N, SelectionDAG &DAG,
@@ -16571,12 +16571,12 @@ static SDValue expandMul(SDNode *N, SelectionDAG &DAG,
1657116571
SDValue Shl =
1657216572
DAG.getNode(ISD::SHL, DL, VT, X, DAG.getConstant(Shift, DL, VT));
1657316573
return DAG.getNode(RISCVISD::SHL_ADD, DL, VT, Shl,
16574-
DAG.getConstant(ShXAmount, DL, VT), Shl);
16574+
DAG.getTargetConstant(ShXAmount, DL, VT), Shl);
1657516575
}
1657616576
// Otherwise, put the shl second so that it can fold with following
1657716577
// instructions (e.g. sext or add).
1657816578
SDValue Mul359 = DAG.getNode(RISCVISD::SHL_ADD, DL, VT, X,
16579-
DAG.getConstant(ShXAmount, DL, VT), X);
16579+
DAG.getTargetConstant(ShXAmount, DL, VT), X);
1658016580
return DAG.getNode(ISD::SHL, DL, VT, Mul359,
1658116581
DAG.getConstant(Shift, DL, VT));
1658216582
}
@@ -16596,7 +16596,7 @@ static SDValue expandMul(SDNode *N, SelectionDAG &DAG,
1659616596
SDValue Shift1 =
1659716597
DAG.getNode(ISD::SHL, DL, VT, X, DAG.getConstant(ShiftAmt, DL, VT));
1659816598
return DAG.getNode(RISCVISD::SHL_ADD, DL, VT, X,
16599-
DAG.getConstant(ScaleShift, DL, VT), Shift1);
16599+
DAG.getTargetConstant(ScaleShift, DL, VT), Shift1);
1660016600
}
1660116601
}
1660216602

@@ -16609,10 +16609,11 @@ static SDValue expandMul(SDNode *N, SelectionDAG &DAG,
1660916609
assert(Shift != 0 && "MulAmt=4,6,10 handled before");
1661016610
if (Shift <= 3) {
1661116611
SDLoc DL(N);
16612-
SDValue Mul359 = DAG.getNode(RISCVISD::SHL_ADD, DL, VT, X,
16613-
DAG.getConstant(ShXAmount, DL, VT), X);
16612+
SDValue Mul359 =
16613+
DAG.getNode(RISCVISD::SHL_ADD, DL, VT, X,
16614+
DAG.getTargetConstant(ShXAmount, DL, VT), X);
1661416615
return DAG.getNode(RISCVISD::SHL_ADD, DL, VT, Mul359,
16615-
DAG.getConstant(Shift, DL, VT), X);
16616+
DAG.getTargetConstant(Shift, DL, VT), X);
1661616617
}
1661716618
}
1661816619

@@ -16624,9 +16625,10 @@ static SDValue expandMul(SDNode *N, SelectionDAG &DAG,
1662416625
SDLoc DL(N);
1662516626
SDValue Shift1 =
1662616627
DAG.getNode(ISD::SHL, DL, VT, X, DAG.getConstant(ShiftAmt, DL, VT));
16627-
return DAG.getNode(ISD::ADD, DL, VT, Shift1,
16628-
DAG.getNode(RISCVISD::SHL_ADD, DL, VT, X,
16629-
DAG.getConstant(ScaleShift, DL, VT), X));
16628+
return DAG.getNode(
16629+
ISD::ADD, DL, VT, Shift1,
16630+
DAG.getNode(RISCVISD::SHL_ADD, DL, VT, X,
16631+
DAG.getTargetConstant(ScaleShift, DL, VT), X));
1663016632
}
1663116633
}
1663216634

@@ -16641,7 +16643,7 @@ static SDValue expandMul(SDNode *N, SelectionDAG &DAG,
1664116643
DAG.getNode(ISD::SHL, DL, VT, X, DAG.getConstant(ShAmt, DL, VT));
1664216644
SDValue Mul359 =
1664316645
DAG.getNode(RISCVISD::SHL_ADD, DL, VT, X,
16644-
DAG.getConstant(Log2_64(Offset - 1), DL, VT), X);
16646+
DAG.getTargetConstant(Log2_64(Offset - 1), DL, VT), X);
1664516647
return DAG.getNode(ISD::SUB, DL, VT, Shift1, Mul359);
1664616648
}
1664716649
}

llvm/lib/Target/RISCV/RISCVInstrInfoXTHead.td

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,8 @@ def immfour : RISCVOp {
6060
let DecoderMethod = "decodeImmFourOperand";
6161
}
6262

63+
def tuimm2 : TImmLeaf<XLenVT, [{return isUInt<2>(Imm);}]>;
64+
6365
//===----------------------------------------------------------------------===//
6466
// Instruction class templates
6567
//===----------------------------------------------------------------------===//
@@ -557,8 +559,8 @@ multiclass VPatTernaryVMAQA_VV_VX<string intrinsic, string instruction,
557559
let Predicates = [HasVendorXTHeadBa] in {
558560
def : Pat<(add_like_non_imm12 (shl GPR:$rs2, uimm2:$uimm2), (XLenVT GPR:$rs1)),
559561
(TH_ADDSL GPR:$rs1, GPR:$rs2, uimm2:$uimm2)>;
560-
def : Pat<(XLenVT (riscv_shl_add GPR:$rs2, uimm2:$uimm2, GPR:$rs1)),
561-
(TH_ADDSL GPR:$rs1, GPR:$rs2, uimm2:$uimm2)>;
562+
def : Pat<(XLenVT (riscv_shl_add GPR:$rs2, tuimm2:$uimm2, GPR:$rs1)),
563+
(TH_ADDSL GPR:$rs1, GPR:$rs2, tuimm2:$uimm2)>;
562564

563565
// Reuse complex patterns from StdExtZba
564566
def : Pat<(add_like_non_imm12 sh1add_op:$rs2, (XLenVT GPR:$rs1)),

llvm/lib/Target/RISCV/RISCVInstrInfoXqci.td

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,8 @@ def uimm5gt3 : RISCVOp<XLenVT>, ImmLeaf<XLenVT,
5353
let OperandType = "OPERAND_UIMM5_GT3";
5454
}
5555

56+
def tuimm5gt3 : TImmLeaf<XLenVT, [{return (Imm > 3) && isUInt<5>(Imm);}]>;
57+
5658
def UImm5Plus1AsmOperand : AsmOperandClass {
5759
let Name = "UImm5Plus1";
5860
let RenderMethod = "addImmOperands";
@@ -1419,8 +1421,8 @@ def : Pat<(i32 (add GPRNoX0:$rd, (mul GPRNoX0:$rs1, simm12_lo:$imm12))),
14191421
(QC_MULIADD GPRNoX0:$rd, GPRNoX0:$rs1, simm12_lo:$imm12)>;
14201422
def : Pat<(i32 (add_like_non_imm12 (shl GPRNoX0:$rs1, (i32 uimm5gt3:$imm)), GPRNoX0:$rs2)),
14211423
(QC_SHLADD GPRNoX0:$rs1, GPRNoX0:$rs2, uimm5gt3:$imm)>;
1422-
def : Pat<(i32 (riscv_shl_add GPRNoX0:$rs1, (i32 uimm5gt3:$imm), GPRNoX0:$rs2)),
1423-
(QC_SHLADD GPRNoX0:$rs1, GPRNoX0:$rs2, uimm5gt3:$imm)>;
1424+
def : Pat<(i32 (riscv_shl_add GPRNoX0:$rs1, (i32 tuimm5gt3:$imm), GPRNoX0:$rs2)),
1425+
(QC_SHLADD GPRNoX0:$rs1, GPRNoX0:$rs2, tuimm5gt3:$imm)>;
14241426
} // Predicates = [HasVendorXqciac, IsRV32]
14251427

14261428
/// Simple arithmetic operations

0 commit comments

Comments
 (0)