[llvm] a4bacb0 - [SelectionDAG] Remove redundant KnownBits smin and smax operations (#89519)

via llvm-commits llvm-commits at lists.llvm.org
Mon Apr 22 00:48:34 PDT 2024


Author: AtariDreams
Date: 2024-04-22T09:48:31+02:00
New Revision: a4bacb0f42ee8bd9d09baaae0fc0ff4650fbef2b

URL: https://github.com/llvm/llvm-project/commit/a4bacb0f42ee8bd9d09baaae0fc0ff4650fbef2b
DIFF: https://github.com/llvm/llvm-project/commit/a4bacb0f42ee8bd9d09baaae0fc0ff4650fbef2b.diff

LOG: [SelectionDAG] Remove redundant KnownBits smin and smax operations (#89519)

It turns out that if any of the operations can be zero, and neither of
the operands can be proven to be positive, it is possible for smax to be
zero, and KnownBits cannot prove otherwise even with KnownBits::smax. In
fact, proving it based on the KnownBits itself at that point without
increasing the depth is actually, provably impossible.

Same with smin.

This covers all the possible cases and is proven to be complete.

Added: 
    

Modified: 
    llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
index 7dbf83b7adeef0..b63b8b893fdbf1 100644
--- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
+++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
@@ -5399,9 +5399,6 @@ bool SelectionDAG::isKnownNeverZero(SDValue Op, unsigned Depth) const {
     if (Op1.isNonZero() && Op0.isNonZero())
       return true;
 
-    if (KnownBits::smax(Op0, Op1).isNonZero())
-      return true;
-
     return isKnownNeverZero(Op.getOperand(1), Depth + 1) &&
            isKnownNeverZero(Op.getOperand(0), Depth + 1);
   }
@@ -5417,9 +5414,6 @@ bool SelectionDAG::isKnownNeverZero(SDValue Op, unsigned Depth) const {
     if (Op1.isNonZero() && Op0.isNonZero())
       return true;
 
-    if (KnownBits::smin(Op0, Op1).isNonZero())
-      return true;
-
     return isKnownNeverZero(Op.getOperand(1), Depth + 1) &&
            isKnownNeverZero(Op.getOperand(0), Depth + 1);
   }


        


More information about the llvm-commits mailing list