Skip to content

Commit a69cdde

Browse files
authored
[RISCV] Add TUPLE_INSERT and TUPLE_EXTRACT to verifyTargetNode. (#150148)
Verify that the index is an i32 target constant which is what we get from intrinsic lowering. All other inserts and extracts should be the same.
1 parent efffa42 commit a69cdde

File tree

2 files changed

+27
-13
lines changed

2 files changed

+27
-13
lines changed

llvm/lib/Target/RISCV/RISCVISelLowering.cpp

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7940,7 +7940,7 @@ SDValue RISCVTargetLowering::LowerOperation(SDValue Op,
79407940
BasePtr, MachinePointerInfo(Load->getAddressSpace()), Align(8));
79417941
OutChains.push_back(LoadVal.getValue(1));
79427942
Ret = DAG.getNode(RISCVISD::TUPLE_INSERT, DL, VT, Ret, LoadVal,
7943-
DAG.getVectorIdxConstant(i, DL));
7943+
DAG.getTargetConstant(i, DL, MVT::i32));
79447944
BasePtr = DAG.getNode(ISD::ADD, DL, XLenVT, BasePtr, VROffset, Flag);
79457945
}
79467946
return DAG.getMergeValues(
@@ -8019,9 +8019,10 @@ SDValue RISCVTargetLowering::LowerOperation(SDValue Op,
80198019

80208020
// Extract subregisters in a vector tuple and store them individually.
80218021
for (unsigned i = 0; i < NF; ++i) {
8022-
auto Extract = DAG.getNode(RISCVISD::TUPLE_EXTRACT, DL,
8023-
MVT::getScalableVectorVT(MVT::i8, NumElts),
8024-
StoredVal, DAG.getVectorIdxConstant(i, DL));
8022+
auto Extract =
8023+
DAG.getNode(RISCVISD::TUPLE_EXTRACT, DL,
8024+
MVT::getScalableVectorVT(MVT::i8, NumElts), StoredVal,
8025+
DAG.getTargetConstant(i, DL, MVT::i32));
80258026
Ret = DAG.getStore(Chain, DL, Extract, BasePtr,
80268027
MachinePointerInfo(Store->getAddressSpace()),
80278028
Store->getBaseAlign(),
@@ -10938,9 +10939,9 @@ SDValue RISCVTargetLowering::LowerINTRINSIC_W_CHAIN(SDValue Op,
1093810939
Load->getMemoryVT(), Load->getMemOperand());
1093910940
SmallVector<SDValue, 9> Results;
1094010941
for (unsigned int RetIdx = 0; RetIdx < NF; RetIdx++) {
10941-
SDValue SubVec =
10942-
DAG.getNode(RISCVISD::TUPLE_EXTRACT, DL, ContainerVT,
10943-
Result.getValue(0), DAG.getVectorIdxConstant(RetIdx, DL));
10942+
SDValue SubVec = DAG.getNode(RISCVISD::TUPLE_EXTRACT, DL, ContainerVT,
10943+
Result.getValue(0),
10944+
DAG.getTargetConstant(RetIdx, DL, MVT::i32));
1094410945
Results.push_back(convertFromScalableVector(VT, SubVec, DAG, Subtarget));
1094510946
}
1094610947
Results.push_back(Result.getValue(1));
@@ -11027,7 +11028,7 @@ SDValue RISCVTargetLowering::LowerINTRINSIC_VOID(SDValue Op,
1102711028
RISCVISD::TUPLE_INSERT, DL, VecTupTy, StoredVal,
1102811029
convertToScalableVector(
1102911030
ContainerVT, FixedIntrinsic->getOperand(2 + i), DAG, Subtarget),
11030-
DAG.getVectorIdxConstant(i, DL));
11031+
DAG.getTargetConstant(i, DL, MVT::i32));
1103111032

1103211033
SDValue Ops[] = {
1103311034
FixedIntrinsic->getChain(),
@@ -12031,7 +12032,7 @@ SDValue RISCVTargetLowering::lowerVECTOR_DEINTERLEAVE(SDValue Op,
1203112032

1203212033
for (unsigned i = 0U; i < Factor; ++i)
1203312034
Res[i] = DAG.getNode(RISCVISD::TUPLE_EXTRACT, DL, VecVT, Load,
12034-
DAG.getVectorIdxConstant(i, DL));
12035+
DAG.getTargetConstant(i, DL, MVT::i32));
1203512036

1203612037
return DAG.getMergeValues(Res, DL);
1203712038
}
@@ -12128,8 +12129,9 @@ SDValue RISCVTargetLowering::lowerVECTOR_INTERLEAVE(SDValue Op,
1212812129

1212912130
SDValue StoredVal = DAG.getUNDEF(VecTupTy);
1213012131
for (unsigned i = 0; i < Factor; i++)
12131-
StoredVal = DAG.getNode(RISCVISD::TUPLE_INSERT, DL, VecTupTy, StoredVal,
12132-
Op.getOperand(i), DAG.getConstant(i, DL, XLenVT));
12132+
StoredVal =
12133+
DAG.getNode(RISCVISD::TUPLE_INSERT, DL, VecTupTy, StoredVal,
12134+
Op.getOperand(i), DAG.getTargetConstant(i, DL, MVT::i32));
1213312135

1213412136
SDValue Ops[] = {DAG.getEntryNode(),
1213512137
DAG.getTargetConstant(IntrIds[Factor - 2], DL, XLenVT),
@@ -20694,7 +20696,7 @@ SDValue RISCVTargetLowering::PerformDAGCombine(SDNode *N,
2069420696
SDValue Result = DAG.getUNDEF(VT);
2069520697
for (unsigned i = 0; i < NF; ++i)
2069620698
Result = DAG.getNode(RISCVISD::TUPLE_INSERT, DL, VT, Result, Splat,
20697-
DAG.getVectorIdxConstant(i, DL));
20699+
DAG.getTargetConstant(i, DL, MVT::i32));
2069820700
return Result;
2069920701
}
2070020702
// If this is a bitcast between a MVT::v4i1/v2i1/v1i1 and an illegal integer
@@ -24018,7 +24020,7 @@ bool RISCVTargetLowering::splitValueIntoRegisterParts(
2401824020
#endif
2401924021

2402024022
Val = DAG.getNode(RISCVISD::TUPLE_INSERT, DL, PartVT, DAG.getUNDEF(PartVT),
24021-
Val, DAG.getVectorIdxConstant(0, DL));
24023+
Val, DAG.getTargetConstant(0, DL, MVT::i32));
2402224024
Parts[0] = Val;
2402324025
return true;
2402424026
}

llvm/lib/Target/RISCV/RISCVSelectionDAGInfo.cpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,18 @@ void RISCVSelectionDAGInfo::verifyTargetNode(const SelectionDAG &DAG,
2424
switch (N->getOpcode()) {
2525
default:
2626
return SelectionDAGGenTargetInfo::verifyTargetNode(DAG, N);
27+
case RISCVISD::TUPLE_EXTRACT:
28+
assert(N->getNumOperands() == 2 && "Expected three operands!");
29+
assert(N->getOperand(1).getOpcode() == ISD::TargetConstant &&
30+
N->getOperand(1).getValueType() == MVT::i32 &&
31+
"Expected index to be an i32 target constant!");
32+
break;
33+
case RISCVISD::TUPLE_INSERT:
34+
assert(N->getNumOperands() == 3 && "Expected three operands!");
35+
assert(N->getOperand(2).getOpcode() == ISD::TargetConstant &&
36+
N->getOperand(2).getValueType() == MVT::i32 &&
37+
"Expected index to be an i32 target constant!");
38+
break;
2739
case RISCVISD::VQDOT_VL:
2840
case RISCVISD::VQDOTU_VL:
2941
case RISCVISD::VQDOTSU_VL: {

0 commit comments

Comments
 (0)