[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