summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorQi Zhao <zhaoqi01@loongson.cn>2025-11-21 11:22:13 +0800
committerQi Zhao <zhaoqi01@loongson.cn>2025-11-21 11:22:13 +0800
commitdb6a03401bdd587138c7dbcd899c06879b67b159 (patch)
tree1188b2ce9ff81897fac6a365357fcc97503b8026
parent1d73b68463ba5ef75434f8d13390537b8e66efa9 (diff)
[LoongArch] Fix for `VLDREPL` node validationusers/zhaoqi5/fix-vldrepl-validation
-rw-r--r--llvm/lib/Target/LoongArch/LoongArchISelLowering.cpp12
-rw-r--r--llvm/lib/Target/LoongArch/LoongArchSelectionDAGInfo.cpp10
-rw-r--r--llvm/lib/Target/LoongArch/LoongArchSelectionDAGInfo.h3
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