From 20f87d82ed31fff7f11b893d0fef5111295a6cce Mon Sep 17 00:00:00 2001 From: Simon Pilgrim Date: Fri, 6 Nov 2020 17:26:56 +0000 Subject: [PATCH] [InstCombine] computeKnownBitsMul - use KnownBits::isNonZero() helper. 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 | 3 +++ llvm/lib/Analysis/ValueTracking.cpp | 8 ++++---- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/llvm/include/llvm/Support/KnownBits.h b/llvm/include/llvm/Support/KnownBits.h index de1c0cd..40470b6 100644 --- a/llvm/include/llvm/Support/KnownBits.h +++ b/llvm/include/llvm/Support/KnownBits.h @@ -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(); } diff --git a/llvm/lib/Analysis/ValueTracking.cpp b/llvm/lib/Analysis/ValueTracking.cpp index 44cf4f8..db591ce 100644 --- a/llvm/lib/Analysis/ValueTracking.cpp +++ b/llvm/lib/Analysis/ValueTracking.cpp @@ -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()); } } -- 2.7.4