[llvm] [DAG] isKnownNeverZero - add ISD::VECTOR_SHUFFLE handling (PR #187855)
Abdullah Sarkar via llvm-commits
llvm-commits at lists.llvm.org
Sat Mar 21 07:12:15 PDT 2026
================
@@ -6295,6 +6295,30 @@ bool SelectionDAG::isKnownNeverZero(SDValue Op, const APInt &DemandedElts,
break;
}
+ case ISD::VECTOR_SHUFFLE: {
+ assert(!Op.getValueType().isScalableVector());
+ unsigned NumElts = DemandedElts.getBitWidth();
+
+ // All demanded elements from LHS and RHS must be known non-zero.
+ // Demanded elements with undef shuffle mask elements are unknown.
+
+ APInt DemandedLHS, DemandedRHS;
+ auto *SVN = cast<ShuffleVectorSDNode>(Op);
+ assert(NumElts == SVN->getMask().size() && "Unexpected vector size");
+ if (!getShuffleDemandedElts(NumElts, SVN->getMask(), DemandedElts,
+ DemandedLHS, DemandedRHS))
+ return false;
+
+ for (unsigned I = 0; I != NumElts; ++I)
+ if (DemandedElts[I] && SVN->getMaskElt(I) < 0)
+ return false;
----------------
absarkar wrote:
Yes, you’re indeed right; `getShuffleDemandedElts` does have AllowUndefElts = false argument. I will remove the loop. Thanks.
https://github.com/llvm/llvm-project/pull/187855
More information about the llvm-commits
mailing list