Skip to content

Commit b74ac56

Browse files
committed
Address RKSimon's comments
1 parent 620794b commit b74ac56

File tree

1 file changed

+19
-17
lines changed

1 file changed

+19
-17
lines changed

llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp

Lines changed: 19 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -5758,23 +5758,25 @@ bool SelectionDAG::isKnownNeverNaN(SDValue Op, const APInt &DemandedElts,
57585758
EVT BaseVectorVT = BaseVector.getValueType();
57595759
if (BaseVectorVT.isFixedLengthVector()) {
57605760
unsigned Idx = Op.getConstantOperandVal(2);
5761-
unsigned NumBaseVectorElts = BaseVectorVT.getVectorNumElements();
5762-
unsigned NumSubVectorElts =
5763-
SubVector.getValueType().getVectorNumElements();
5764-
5765-
// Clear the bits at the position where the subvector will be inserted.
5766-
APInt DemandedMask = APInt::getAllOnes(NumSubVectorElts)
5767-
.zext(NumBaseVectorElts)
5768-
.shl(Idx)
5769-
.reverseBits();
5770-
APInt DemandedSrcElts = DemandedElts & DemandedMask;
5771-
5772-
// If DemandedSrcElts is zero, we only need to check that the subvector is
5773-
// never NaN.
5774-
if (DemandedSrcElts.isZero())
5775-
return isKnownNeverNaN(SubVector, SNaN, Depth + 1);
5776-
return isKnownNeverNaN(BaseVector, DemandedSrcElts, SNaN, Depth + 1) &&
5777-
isKnownNeverNaN(SubVector, SNaN, Depth + 1);
5761+
unsigned NumBaseElts = BaseVectorVT.getVectorNumElements();
5762+
unsigned NumSubElts = SubVector.getValueType().getVectorNumElements();
5763+
5764+
// Clear/Extract the bits at the position where the subvector will be
5765+
// inserted.
5766+
APInt DemandedMask =
5767+
APInt::getBitsSet(NumBaseElts, Idx, Idx + NumSubElts);
5768+
APInt DemandedSrcElts = DemandedElts & ~DemandedMask;
5769+
APInt DemandedSubElts = DemandedElts.extractBits(NumSubElts, Idx);
5770+
5771+
if (!DemandedSrcElts.isZero() && !DemandedSubElts.isZero())
5772+
return isKnownNeverNaN(BaseVector, DemandedSrcElts, SNaN, Depth + 1) &&
5773+
isKnownNeverNaN(SubVector, DemandedSubElts, SNaN, Depth + 1);
5774+
else if (!DemandedSrcElts.isZero())
5775+
return isKnownNeverNaN(BaseVector, DemandedSrcElts, SNaN, Depth + 1);
5776+
else if (!DemandedSubElts.isZero())
5777+
return isKnownNeverNaN(SubVector, DemandedSubElts, SNaN, Depth + 1);
5778+
else
5779+
return true;
57785780
}
57795781
return isKnownNeverNaN(BaseVector, SNaN, Depth + 1) &&
57805782
isKnownNeverNaN(SubVector, SNaN, Depth + 1);

0 commit comments

Comments
 (0)