Skip to content

Commit 858d1df

Browse files
authored
[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.
1 parent 81c06d1 commit 858d1df

File tree

1 file changed

+6
-9
lines changed

1 file changed

+6
-9
lines changed

llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -16332,25 +16332,22 @@ SDValue DAGCombiner::visitTRUNCATE(SDNode *N) {
1633216332
// (trunc (abdu/abds a, b)) -> (abdu/abds (trunc a), (trunc b))
1633316333
if ((!LegalOperations || N0.hasOneUse()) &&
1633416334
TLI.isOperationLegal(N0.getOpcode(), VT)) {
16335-
EVT SrcVT = N0.getValueType();
1633616335
EVT TruncVT = VT;
1633716336
unsigned SrcBits = SrcVT.getScalarSizeInBits();
1633816337
unsigned TruncBits = TruncVT.getScalarSizeInBits();
16339-
unsigned NeededBits = SrcBits - TruncBits;
1634016338

1634116339
SDValue A = N0.getOperand(0);
1634216340
SDValue B = N0.getOperand(1);
1634316341
bool CanFold = false;
1634416342

1634516343
if (N0.getOpcode() == ISD::ABDU) {
16346-
KnownBits KnownA = DAG.computeKnownBits(A);
16347-
KnownBits KnownB = DAG.computeKnownBits(B);
16348-
CanFold = KnownA.countMinLeadingZeros() >= NeededBits &&
16349-
KnownB.countMinLeadingZeros() >= NeededBits;
16344+
APInt UpperBits = APInt::getBitsSetFrom(SrcBits, TruncBits);
16345+
CanFold = DAG.MaskedValueIsZero(B, UpperBits) &&
16346+
DAG.MaskedValueIsZero(A, UpperBits);
1635016347
} else {
16351-
unsigned SignBitsA = DAG.ComputeNumSignBits(A);
16352-
unsigned SignBitsB = DAG.ComputeNumSignBits(B);
16353-
CanFold = SignBitsA > NeededBits && SignBitsB > NeededBits;
16348+
unsigned NeededBits = SrcBits - TruncBits;
16349+
CanFold = DAG.ComputeNumSignBits(B) > NeededBits &&
16350+
DAG.ComputeNumSignBits(A) > NeededBits;
1635416351
}
1635516352

1635616353
if (CanFold) {

0 commit comments

Comments
 (0)