[llvm] 858d1df - [DAG] visitTRUNCATE - early out from computeKnownBits/ComputeNumSignBits failures. NFC. (#154111)
via llvm-commits
llvm-commits at lists.llvm.org
Mon Aug 18 06:55:12 PDT 2025
Author: Simon Pilgrim
Date: 2025-08-18T14:55:09+01:00
New Revision: 858d1dfa2c4823422c8c6b0459130954cf89fb73
URL: https://github.com/llvm/llvm-project/commit/858d1dfa2c4823422c8c6b0459130954cf89fb73
DIFF: https://github.com/llvm/llvm-project/commit/858d1dfa2c4823422c8c6b0459130954cf89fb73.diff
LOG: [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.
Added:
Modified:
llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
Removed:
################################################################################
diff --git a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
index 785245b2d9e74..43d4138df8b49 100644
--- a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
+++ b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
@@ -16332,25 +16332,22 @@ SDValue DAGCombiner::visitTRUNCATE(SDNode *N) {
// (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();
unsigned TruncBits = TruncVT.getScalarSizeInBits();
- unsigned NeededBits = SrcBits - TruncBits;
SDValue A = N0.getOperand(0);
SDValue B = N0.getOperand(1);
bool CanFold = false;
if (N0.getOpcode() == ISD::ABDU) {
- KnownBits KnownA = DAG.computeKnownBits(A);
- KnownBits KnownB = DAG.computeKnownBits(B);
- CanFold = KnownA.countMinLeadingZeros() >= NeededBits &&
- KnownB.countMinLeadingZeros() >= NeededBits;
+ APInt UpperBits = APInt::getBitsSetFrom(SrcBits, TruncBits);
+ CanFold = DAG.MaskedValueIsZero(B, UpperBits) &&
+ DAG.MaskedValueIsZero(A, UpperBits);
} else {
- unsigned SignBitsA = DAG.ComputeNumSignBits(A);
- unsigned SignBitsB = DAG.ComputeNumSignBits(B);
- CanFold = SignBitsA > NeededBits && SignBitsB > NeededBits;
+ unsigned NeededBits = SrcBits - TruncBits;
+ CanFold = DAG.ComputeNumSignBits(B) > NeededBits &&
+ DAG.ComputeNumSignBits(A) > NeededBits;
}
if (CanFold) {
More information about the llvm-commits
mailing list