diff options
author | Simon Pilgrim <[email protected]> | 2025-08-18 11:06:29 +0100 |
---|---|---|
committer | GitHub <[email protected]> | 2025-08-18 11:06:29 +0100 |
commit | 681ecae9133b0e54441529d1eb68fb3604333a93 (patch) | |
tree | 05ba46092914925de4aabbb89ab21e73cf588db7 | |
parent | 6842cc556222659256b32883bb2b63ff019100e0 (diff) |
[DAG] visitTRUNCATE - test abd legality early to avoid unnecessary computeKnownBits/ComputeNumSignBits calls. NFC. (#154085)upstream/main
isOperationLegal is much cheaper than value tracking
-rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp index 6eb8468e2573..785245b2d9e7 100644 --- a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp @@ -16329,8 +16329,9 @@ SDValue DAGCombiner::visitTRUNCATE(SDNode *N) { break; case ISD::ABDU: case ISD::ABDS: - // (trunc (abdu/abds a, b)) → (abdu/abds (trunc a), (trunc b)) - if (!LegalOperations || N0.hasOneUse()) { + // (trunc (abdu/abds a, b)) -> (abdu/abds (trunc a), (trunc b)) + if ((!LegalOperations || N0.hasOneUse()) && + TLI.isOperationLegal(N0.getOpcode(), VT)) { EVT SrcVT = N0.getValueType(); EVT TruncVT = VT; unsigned SrcBits = SrcVT.getScalarSizeInBits(); @@ -16352,7 +16353,7 @@ SDValue DAGCombiner::visitTRUNCATE(SDNode *N) { CanFold = SignBitsA > NeededBits && SignBitsB > NeededBits; } - if (CanFold && TLI.isOperationLegal(N0.getOpcode(), VT)) { + if (CanFold) { SDValue NewA = DAG.getNode(ISD::TRUNCATE, DL, TruncVT, A); SDValue NewB = DAG.getNode(ISD::TRUNCATE, DL, TruncVT, B); return DAG.getNode(N0.getOpcode(), DL, TruncVT, NewA, NewB); |