[llvm-branch-commits] [llvm] DAG: Preserve poison in more concat_vectors folds (PR #206948)
Matt Arsenault via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Wed Jul 1 04:06:44 PDT 2026
https://github.com/arsenm created https://github.com/llvm/llvm-project/pull/206948
Avoid degrading poison to undef.
>From 82176c4829e1d2ea56404ee2a8b5d290adc9dc6b Mon Sep 17 00:00:00 2001
From: Matt Arsenault <Matthew.Arsenault at amd.com>
Date: Wed, 1 Jul 2026 13:01:29 +0200
Subject: [PATCH] DAG: Preserve poison in more concat_vectors folds
Avoid degrading poison to undef.
---
llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
index 28160dcd8100a..34be92d3c847f 100644
--- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
+++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
@@ -7024,7 +7024,9 @@ static SDValue foldCONCAT_VECTORS(const SDLoc &DL, EVT VT,
SmallVector<SDValue, 16> Elts;
for (SDValue Op : Ops) {
EVT OpVT = Op.getValueType();
- if (Op.isUndef())
+ if (Op.getOpcode() == ISD::POISON)
+ Elts.append(OpVT.getVectorNumElements(), DAG.getPOISON(SVT));
+ else if (Op.getOpcode() == ISD::UNDEF)
Elts.append(OpVT.getVectorNumElements(), DAG.getUNDEF(SVT));
else if (Op.getOpcode() == ISD::BUILD_VECTOR)
Elts.append(Op->op_begin(), Op->op_end());
@@ -7043,7 +7045,9 @@ static SDValue foldCONCAT_VECTORS(const SDLoc &DL, EVT VT,
if (SVT.bitsGT(VT.getScalarType())) {
for (SDValue &Op : Elts) {
- if (Op.isUndef())
+ if (Op.getOpcode() == ISD::POISON)
+ Op = DAG.getPOISON(SVT);
+ else if (Op.getOpcode() == ISD::UNDEF)
Op = DAG.getUNDEF(SVT);
else
Op = DAG.getTargetLoweringInfo().isZExtFree(Op.getValueType(), SVT)
More information about the llvm-branch-commits
mailing list