[llvm] [SDAG] Handle insert_subvector in isKnownNeverNaN (PR #131989)
Jim Lin via llvm-commits
llvm-commits at lists.llvm.org
Mon Apr 21 03:40:59 PDT 2025
================
@@ -5752,6 +5752,34 @@ 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())
----------------
tclin914 wrote:
Done. Thanks.
https://github.com/llvm/llvm-project/pull/131989
More information about the llvm-commits
mailing list