diff options
| author | Qi Zhao <zhaoqi01@loongson.cn> | 2025-11-21 11:22:13 +0800 |
|---|---|---|
| committer | Qi Zhao <zhaoqi01@loongson.cn> | 2025-11-21 11:22:13 +0800 |
| commit | db6a03401bdd587138c7dbcd899c06879b67b159 (patch) | |
| tree | 1188b2ce9ff81897fac6a365357fcc97503b8026 | |
| parent | 1d73b68463ba5ef75434f8d13390537b8e66efa9 (diff) | |
[LoongArch] Fix for `VLDREPL` node validationusers/zhaoqi5/fix-vldrepl-validation
| -rw-r--r-- | llvm/lib/Target/LoongArch/LoongArchISelLowering.cpp | 12 | ||||
| -rw-r--r-- | llvm/lib/Target/LoongArch/LoongArchSelectionDAGInfo.cpp | 10 | ||||
| -rw-r--r-- | llvm/lib/Target/LoongArch/LoongArchSelectionDAGInfo.h | 3 |
3 files changed, 7 insertions, 18 deletions
diff --git a/llvm/lib/Target/LoongArch/LoongArchISelLowering.cpp b/llvm/lib/Target/LoongArch/LoongArchISelLowering.cpp index ac95ef5f3088..b8c1c261fa6d 100644 --- a/llvm/lib/Target/LoongArch/LoongArchISelLowering.cpp +++ b/llvm/lib/Target/LoongArch/LoongArchISelLowering.cpp @@ -2886,11 +2886,13 @@ static SDValue lowerBUILD_VECTORAsBroadCastLoad(BuildVectorSDNode *BVOp, if ((ExtType == ISD::EXTLOAD || ExtType == ISD::NON_EXTLOAD) && VT.getScalarSizeInBits() == LN->getMemoryVT().getScalarSizeInBits()) { - SDVTList Tys = - LN->isIndexed() - ? DAG.getVTList(VT, LN->getBasePtr().getValueType(), MVT::Other) - : DAG.getVTList(VT, MVT::Other); - SDValue Ops[] = {LN->getChain(), LN->getBasePtr(), LN->getOffset()}; + // Indexed loads and stores are not supported on LoongArch. + assert(LN->isUnindexed() && "Unexpected indexed load."); + + SDVTList Tys = DAG.getVTList(VT, MVT::Other); + // The offset operand of unindexed load is always undefined, so there is + // no need to pass it to VLDREPL. + SDValue Ops[] = {LN->getChain(), LN->getBasePtr()}; SDValue BCast = DAG.getNode(LoongArchISD::VLDREPL, DL, Tys, Ops); DAG.ReplaceAllUsesOfValueWith(SDValue(LN, 1), BCast.getValue(1)); return BCast; diff --git a/llvm/lib/Target/LoongArch/LoongArchSelectionDAGInfo.cpp b/llvm/lib/Target/LoongArch/LoongArchSelectionDAGInfo.cpp index 11d05042c94f..c07adfc48a0f 100644 --- a/llvm/lib/Target/LoongArch/LoongArchSelectionDAGInfo.cpp +++ b/llvm/lib/Target/LoongArch/LoongArchSelectionDAGInfo.cpp @@ -17,13 +17,3 @@ LoongArchSelectionDAGInfo::LoongArchSelectionDAGInfo() : SelectionDAGGenTargetInfo(LoongArchGenSDNodeInfo) {} LoongArchSelectionDAGInfo::~LoongArchSelectionDAGInfo() = default; - -void LoongArchSelectionDAGInfo::verifyTargetNode(const SelectionDAG &DAG, - const SDNode *N) const { - switch (N->getOpcode()) { - case LoongArchISD::VLDREPL: - // invalid number of operands; expected 2, got 3 - return; - } - SelectionDAGGenTargetInfo::verifyTargetNode(DAG, N); -} diff --git a/llvm/lib/Target/LoongArch/LoongArchSelectionDAGInfo.h b/llvm/lib/Target/LoongArch/LoongArchSelectionDAGInfo.h index ba5657080b3e..7210a15297a3 100644 --- a/llvm/lib/Target/LoongArch/LoongArchSelectionDAGInfo.h +++ b/llvm/lib/Target/LoongArch/LoongArchSelectionDAGInfo.h @@ -21,9 +21,6 @@ public: LoongArchSelectionDAGInfo(); ~LoongArchSelectionDAGInfo() override; - - void verifyTargetNode(const SelectionDAG &DAG, - const SDNode *N) const override; }; } // namespace llvm |
