[llvm] [SDAG] Handle insert_subvector in isKnownNeverNaN (PR #131989)
Jim Lin via llvm-commits
llvm-commits at lists.llvm.org
Mon Apr 21 06:25:27 PDT 2025
================
@@ -5758,23 +5758,25 @@ bool SelectionDAG::isKnownNeverNaN(SDValue Op, const APInt &DemandedElts,
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;
-
- // If DemandedSrcElts is zero, we only need to check that the subvector is
- // never NaN.
- if (DemandedSrcElts.isZero())
- return isKnownNeverNaN(SubVector, SNaN, Depth + 1);
- return isKnownNeverNaN(BaseVector, DemandedSrcElts, SNaN, Depth + 1) &&
- isKnownNeverNaN(SubVector, SNaN, Depth + 1);
+ 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())
+ return isKnownNeverNaN(BaseVector, DemandedSrcElts, SNaN, Depth + 1);
+ else if (!DemandedSubElts.isZero())
+ return isKnownNeverNaN(SubVector, DemandedSubElts, SNaN, Depth + 1);
+ else
+ return true;
----------------
tclin914 wrote:
Done. Thanks.
https://github.com/llvm/llvm-project/pull/131989
More information about the llvm-commits
mailing list