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 <[email protected]> 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) _______________________________________________ llvm-branch-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
