[llvm] [DAG] visitTRUNCATE - test abd legality early to avoid unnecessary computeKnownBits/ComputeNumSignBits calls. NFC. (PR #154085)
Simon Pilgrim via llvm-commits
llvm-commits at lists.llvm.org
Mon Aug 18 02:38:21 PDT 2025
https://github.com/RKSimon created https://github.com/llvm/llvm-project/pull/154085
isOperationLegal is much cheaper than value tracking
>From d74478bd963eb3ea528e89ba8988ffaf8ef8ab40 Mon Sep 17 00:00:00 2001
From: Simon Pilgrim <llvm-dev at redking.me.uk>
Date: Mon, 18 Aug 2025 10:35:35 +0100
Subject: [PATCH] [DAG] visitTRUNCATE - test abd legality early to avoid
unnecessary computeKnownBits/ComputeNumSignBits calls. NFC.
---
llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
index 6eb8468e2573e..785245b2d9e74 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);
More information about the llvm-commits
mailing list