[DAG] visitTRUNCATE - early out from computeKnownBits/ComputeNumSignBits failures. NFC. (#154111)
Avoid unnecessary (costly) computeKnownBits/ComputeNumSignBits calls - use MaskedValueIsZero instead of computeKnownBits directly to simplify code.
This commit is contained in:
parent
81c06d198e
commit
858d1dfa2c
@ -16332,25 +16332,22 @@ SDValue DAGCombiner::visitTRUNCATE(SDNode *N) {
|
|||||||
// (trunc (abdu/abds a, b)) -> (abdu/abds (trunc a), (trunc b))
|
// (trunc (abdu/abds a, b)) -> (abdu/abds (trunc a), (trunc b))
|
||||||
if ((!LegalOperations || N0.hasOneUse()) &&
|
if ((!LegalOperations || N0.hasOneUse()) &&
|
||||||
TLI.isOperationLegal(N0.getOpcode(), VT)) {
|
TLI.isOperationLegal(N0.getOpcode(), VT)) {
|
||||||
EVT SrcVT = N0.getValueType();
|
|
||||||
EVT TruncVT = VT;
|
EVT TruncVT = VT;
|
||||||
unsigned SrcBits = SrcVT.getScalarSizeInBits();
|
unsigned SrcBits = SrcVT.getScalarSizeInBits();
|
||||||
unsigned TruncBits = TruncVT.getScalarSizeInBits();
|
unsigned TruncBits = TruncVT.getScalarSizeInBits();
|
||||||
unsigned NeededBits = SrcBits - TruncBits;
|
|
||||||
|
|
||||||
SDValue A = N0.getOperand(0);
|
SDValue A = N0.getOperand(0);
|
||||||
SDValue B = N0.getOperand(1);
|
SDValue B = N0.getOperand(1);
|
||||||
bool CanFold = false;
|
bool CanFold = false;
|
||||||
|
|
||||||
if (N0.getOpcode() == ISD::ABDU) {
|
if (N0.getOpcode() == ISD::ABDU) {
|
||||||
KnownBits KnownA = DAG.computeKnownBits(A);
|
APInt UpperBits = APInt::getBitsSetFrom(SrcBits, TruncBits);
|
||||||
KnownBits KnownB = DAG.computeKnownBits(B);
|
CanFold = DAG.MaskedValueIsZero(B, UpperBits) &&
|
||||||
CanFold = KnownA.countMinLeadingZeros() >= NeededBits &&
|
DAG.MaskedValueIsZero(A, UpperBits);
|
||||||
KnownB.countMinLeadingZeros() >= NeededBits;
|
|
||||||
} else {
|
} else {
|
||||||
unsigned SignBitsA = DAG.ComputeNumSignBits(A);
|
unsigned NeededBits = SrcBits - TruncBits;
|
||||||
unsigned SignBitsB = DAG.ComputeNumSignBits(B);
|
CanFold = DAG.ComputeNumSignBits(B) > NeededBits &&
|
||||||
CanFold = SignBitsA > NeededBits && SignBitsB > NeededBits;
|
DAG.ComputeNumSignBits(A) > NeededBits;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (CanFold) {
|
if (CanFold) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user