[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