[llvm] [SDAG] Handle insert_subvector in isKnownNeverNaN (PR #131989)

Matt Arsenault via llvm-commits llvm-commits at lists.llvm.org
Mon Apr 21 02:50:39 PDT 2025


================
@@ -5752,6 +5752,35 @@ bool SelectionDAG::isKnownNeverNaN(SDValue Op, const APInt &DemandedElts,
     }
     return isKnownNeverNaN(Src, SNaN, Depth + 1);
   }
+  case ISD::INSERT_SUBVECTOR: {
+    SDValue BaseVector = Op.getOperand(0);
+    SDValue SubVector = Op.getOperand(1);
+    EVT BaseVectorVT = BaseVector.getValueType();
+    if (BaseVectorVT.isFixedLengthVector()) {
+      unsigned Idx = Op.getConstantOperandVal(2);
+      unsigned NumBaseElts = BaseVectorVT.getVectorNumElements();
+      unsigned NumSubElts = SubVector.getValueType().getVectorNumElements();
+
+      // Clear/Extract the bits at the position where the subvector will be
+      // inserted.
+      APInt DemandedMask =
+          APInt::getBitsSet(NumBaseElts, Idx, Idx + NumSubElts);
+      APInt DemandedSrcElts = DemandedElts & ~DemandedMask;
+      APInt DemandedSubElts = DemandedElts.extractBits(NumSubElts, Idx);
+
+      if (!DemandedSrcElts.isZero() && !DemandedSubElts.isZero())
+        return isKnownNeverNaN(BaseVector, DemandedSrcElts, SNaN, Depth + 1) &&
+               isKnownNeverNaN(SubVector, DemandedSubElts, SNaN, Depth + 1);
+      else if (!DemandedSrcElts.isZero())
----------------
arsenm wrote:

No else after return 

https://github.com/llvm/llvm-project/pull/131989


More information about the llvm-commits mailing list