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

Simon Pilgrim via llvm-commits llvm-commits at lists.llvm.org
Mon Apr 21 01:44:57 PDT 2025


================
@@ -5752,6 +5752,33 @@ 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 NumBaseVectorElts = BaseVectorVT.getVectorNumElements();
+      unsigned NumSubVectorElts =
+          SubVector.getValueType().getVectorNumElements();
+
+      // Clear the bits at the position where the subvector will be inserted.
+      APInt DemandedMask = APInt::getAllOnes(NumSubVectorElts)
+                               .zext(NumBaseVectorElts)
+                               .shl(Idx)
+                               .reverseBits();
+      APInt DemandedSrcElts = DemandedElts & DemandedMask;
----------------
RKSimon wrote:

```
APInt DemandedSrcElts = DemandedElts & ~DemandedMask;
```

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


More information about the llvm-commits mailing list