[llvm] [LoongArch] Fix for `VLDREPL` node validation (PR #168993)
via llvm-commits
llvm-commits at lists.llvm.org
Thu Nov 20 19:25:40 PST 2025
https://github.com/zhaoqi5 created https://github.com/llvm/llvm-project/pull/168993
None
>From db6a03401bdd587138c7dbcd899c06879b67b159 Mon Sep 17 00:00:00 2001
From: Qi Zhao <zhaoqi01 at loongson.cn>
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
More information about the llvm-commits
mailing list