[InstCombine] computeKnownBitsMul - use KnownBits::isNonZero() helper.
authorSimon Pilgrim <llvm-dev@redking.me.uk>
Fri, 6 Nov 2020 17:26:56 +0000 (17:26 +0000)
committerSimon Pilgrim <llvm-dev@redking.me.uk>
Fri, 6 Nov 2020 17:27:13 +0000 (17:27 +0000)
Avoid an expensive isKnownNonZero() call - this is a small cleanup before moving the extra NSW functionality from computeKnownBitsMul into KnownBits::computeForMul.

llvm/include/llvm/Support/KnownBits.h
llvm/lib/Analysis/ValueTracking.cpp

index de1c0cd..40470b6 100644 (file)
@@ -97,6 +97,9 @@ public:
   /// Returns true if this value is known to be non-negative.
   bool isNonNegative() const { return Zero.isSignBitSet(); }
 
+  /// Returns true if this value is known to be non-zero.
+  bool isNonZero() const { return One.countPopulation() != 0; }
+
   /// Returns true if this value is known to be positive.
   bool isStrictlyPositive() const { return Zero.isSignBitSet() && !One.isNullValue(); }
 
index 44cf4f8..db591ce 100644 (file)
@@ -436,10 +436,10 @@ static void computeKnownBitsMul(const Value *Op0, const Value *Op1, bool NSW,
       // The product of a negative number and a non-negative number is either
       // negative or zero.
       if (!isKnownNonNegative)
-        isKnownNegative = (isKnownNegativeOp1 && isKnownNonNegativeOp0 &&
-                           isKnownNonZero(Op0, Depth, Q)) ||
-                          (isKnownNegativeOp0 && isKnownNonNegativeOp1 &&
-                           isKnownNonZero(Op1, Depth, Q));
+        isKnownNegative =
+            (isKnownNegativeOp1 && isKnownNonNegativeOp0 &&
+             Known2.isNonZero()) ||
+            (isKnownNegativeOp0 && isKnownNonNegativeOp1 && Known.isNonZero());
     }
   }