[llvm] 352346f - [RISCV] Refactor code to remove some small wrapper methods and merge two functions together. NFC
Craig Topper via llvm-commits
llvm-commits at lists.llvm.org
Wed Jun 22 23:13:43 PDT 2022
Author: Craig Topper
Date: 2022-06-22T23:04:58-07:00
New Revision: 352346fa9ec8cbd016a1504e45180c521d2c6b0d
URL: https://github.com/llvm/llvm-project/commit/352346fa9ec8cbd016a1504e45180c521d2c6b0d
DIFF: https://github.com/llvm/llvm-project/commit/352346fa9ec8cbd016a1504e45180c521d2c6b0d.diff
LOG: [RISCV] Refactor code to remove some small wrapper methods and merge two functions together. NFC
Added:
Modified:
llvm/lib/Target/RISCV/RISCVISelDAGToDAG.cpp
Removed:
################################################################################
diff --git a/llvm/lib/Target/RISCV/RISCVISelDAGToDAG.cpp b/llvm/lib/Target/RISCV/RISCVISelDAGToDAG.cpp
index bb62e90b4bfcd..75f5f392a5bf1 100644
--- a/llvm/lib/Target/RISCV/RISCVISelDAGToDAG.cpp
+++ b/llvm/lib/Target/RISCV/RISCVISelDAGToDAG.cpp
@@ -220,51 +220,20 @@ static SDNode *selectImm(SelectionDAG *CurDAG, const SDLoc &DL, const MVT VT,
return Result;
}
-static SDValue createTupleImpl(SelectionDAG &CurDAG, ArrayRef<SDValue> Regs,
- unsigned RegClassID, unsigned SubReg0) {
- assert(Regs.size() >= 2 && Regs.size() <= 8);
-
- SDLoc DL(Regs[0]);
- SmallVector<SDValue, 8> Ops;
-
- Ops.push_back(CurDAG.getTargetConstant(RegClassID, DL, MVT::i32));
-
- for (unsigned I = 0; I < Regs.size(); ++I) {
- Ops.push_back(Regs[I]);
- Ops.push_back(CurDAG.getTargetConstant(SubReg0 + I, DL, MVT::i32));
- }
- SDNode *N =
- CurDAG.getMachineNode(TargetOpcode::REG_SEQUENCE, DL, MVT::Untyped, Ops);
- return SDValue(N, 0);
-}
-
-static SDValue createM1Tuple(SelectionDAG &CurDAG, ArrayRef<SDValue> Regs,
- unsigned NF) {
- static const unsigned RegClassIDs[] = {
+static SDValue createTuple(SelectionDAG &CurDAG, ArrayRef<SDValue> Regs,
+ unsigned NF, RISCVII::VLMUL LMUL) {
+ static const unsigned M1TupleRegClassIDs[] = {
RISCV::VRN2M1RegClassID, RISCV::VRN3M1RegClassID, RISCV::VRN4M1RegClassID,
RISCV::VRN5M1RegClassID, RISCV::VRN6M1RegClassID, RISCV::VRN7M1RegClassID,
RISCV::VRN8M1RegClassID};
+ static const unsigned M2TupleRegClassIDs[] = {RISCV::VRN2M2RegClassID,
+ RISCV::VRN3M2RegClassID,
+ RISCV::VRN4M2RegClassID};
- return createTupleImpl(CurDAG, Regs, RegClassIDs[NF - 2], RISCV::sub_vrm1_0);
-}
-
-static SDValue createM2Tuple(SelectionDAG &CurDAG, ArrayRef<SDValue> Regs,
- unsigned NF) {
- static const unsigned RegClassIDs[] = {RISCV::VRN2M2RegClassID,
- RISCV::VRN3M2RegClassID,
- RISCV::VRN4M2RegClassID};
-
- return createTupleImpl(CurDAG, Regs, RegClassIDs[NF - 2], RISCV::sub_vrm2_0);
-}
-
-static SDValue createM4Tuple(SelectionDAG &CurDAG, ArrayRef<SDValue> Regs,
- unsigned NF) {
- return createTupleImpl(CurDAG, Regs, RISCV::VRN2M4RegClassID,
- RISCV::sub_vrm4_0);
-}
+ assert(Regs.size() >= 2 && Regs.size() <= 8);
-static SDValue createTuple(SelectionDAG &CurDAG, ArrayRef<SDValue> Regs,
- unsigned NF, RISCVII::VLMUL LMUL) {
+ unsigned RegClassID;
+ unsigned SubReg0;
switch (LMUL) {
default:
llvm_unreachable("Invalid LMUL.");
@@ -272,12 +241,37 @@ static SDValue createTuple(SelectionDAG &CurDAG, ArrayRef<SDValue> Regs,
case RISCVII::VLMUL::LMUL_F4:
case RISCVII::VLMUL::LMUL_F2:
case RISCVII::VLMUL::LMUL_1:
- return createM1Tuple(CurDAG, Regs, NF);
+ static_assert(RISCV::sub_vrm1_7 == RISCV::sub_vrm1_0 + 7,
+ "Unexpected subreg numbering");
+ SubReg0 = RISCV::sub_vrm1_0;
+ RegClassID = M1TupleRegClassIDs[NF - 2];
+ break;
case RISCVII::VLMUL::LMUL_2:
- return createM2Tuple(CurDAG, Regs, NF);
+ static_assert(RISCV::sub_vrm2_3 == RISCV::sub_vrm2_0 + 3,
+ "Unexpected subreg numbering");
+ SubReg0 = RISCV::sub_vrm2_0;
+ RegClassID = M2TupleRegClassIDs[NF - 2];
+ break;
case RISCVII::VLMUL::LMUL_4:
- return createM4Tuple(CurDAG, Regs, NF);
+ static_assert(RISCV::sub_vrm4_1 == RISCV::sub_vrm4_0 + 1,
+ "Unexpected subreg numbering");
+ SubReg0 = RISCV::sub_vrm4_0;
+ RegClassID = RISCV::VRN2M4RegClassID;
+ break;
}
+
+ SDLoc DL(Regs[0]);
+ SmallVector<SDValue, 8> Ops;
+
+ Ops.push_back(CurDAG.getTargetConstant(RegClassID, DL, MVT::i32));
+
+ for (unsigned I = 0; I < Regs.size(); ++I) {
+ Ops.push_back(Regs[I]);
+ Ops.push_back(CurDAG.getTargetConstant(SubReg0 + I, DL, MVT::i32));
+ }
+ SDNode *N =
+ CurDAG.getMachineNode(TargetOpcode::REG_SEQUENCE, DL, MVT::Untyped, Ops);
+ return SDValue(N, 0);
}
void RISCVDAGToDAGISel::addVectorLoadStoreOperands(
More information about the llvm-commits
mailing list