[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