From db6a03401bdd587138c7dbcd899c06879b67b159 Mon Sep 17 00:00:00 2001 From: Qi Zhao Date: Fri, 21 Nov 2025 11:22:13 +0800 Subject: [PATCH] [LoongArch] Fix for `VLDREPL` node validation --- llvm/lib/Target/LoongArch/LoongArchISelLowering.cpp | 12 +++++++----- .../Target/LoongArch/LoongArchSelectionDAGInfo.cpp | 10 ---------- .../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 ac95ef5f30888..b8c1c261fa6db 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 11d05042c94f8..c07adfc48a0f5 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 ba5657080b3e4..7210a15297a3e 100644 --- a/llvm/lib/Target/LoongArch/LoongArchSelectionDAGInfo.h +++ b/llvm/lib/Target/LoongArch/LoongArchSelectionDAGInfo.h @@ -21,9 +21,6 @@ class LoongArchSelectionDAGInfo : public SelectionDAGGenTargetInfo { LoongArchSelectionDAGInfo(); ~LoongArchSelectionDAGInfo() override; - - void verifyTargetNode(const SelectionDAG &DAG, - const SDNode *N) const override; }; } // namespace llvm