Skip to content

Commit 681ecae

Browse files
authored
[DAG] visitTRUNCATE - test abd legality early to avoid unnecessary computeKnownBits/ComputeNumSignBits calls. NFC. (#154085)
isOperationLegal is much cheaper than value tracking
1 parent 6842cc5 commit 681ecae

File tree

1 file changed

+4
-3
lines changed

1 file changed

+4
-3
lines changed

llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16329,8 +16329,9 @@ SDValue DAGCombiner::visitTRUNCATE(SDNode *N) {
1632916329
break;
1633016330
case ISD::ABDU:
1633116331
case ISD::ABDS:
16332-
// (trunc (abdu/abds a, b)) → (abdu/abds (trunc a), (trunc b))
16333-
if (!LegalOperations || N0.hasOneUse()) {
16332+
// (trunc (abdu/abds a, b)) -> (abdu/abds (trunc a), (trunc b))
16333+
if ((!LegalOperations || N0.hasOneUse()) &&
16334+
TLI.isOperationLegal(N0.getOpcode(), VT)) {
1633416335
EVT SrcVT = N0.getValueType();
1633516336
EVT TruncVT = VT;
1633616337
unsigned SrcBits = SrcVT.getScalarSizeInBits();
@@ -16352,7 +16353,7 @@ SDValue DAGCombiner::visitTRUNCATE(SDNode *N) {
1635216353
CanFold = SignBitsA > NeededBits && SignBitsB > NeededBits;
1635316354
}
1635416355

16355-
if (CanFold && TLI.isOperationLegal(N0.getOpcode(), VT)) {
16356+
if (CanFold) {
1635616357
SDValue NewA = DAG.getNode(ISD::TRUNCATE, DL, TruncVT, A);
1635716358
SDValue NewB = DAG.getNode(ISD::TRUNCATE, DL, TruncVT, B);
1635816359
return DAG.getNode(N0.getOpcode(), DL, TruncVT, NewA, NewB);

0 commit comments

Comments
 (0)