]> granicus.if.org Git - llvm/commitdiff
[ValueTracking] Remove handling for BitWidth being 0 in ComputeSignBit and isKnownNon...
authorCraig Topper <craig.topper@gmail.com>
Wed, 3 May 2017 22:25:19 +0000 (22:25 +0000)
committerCraig Topper <craig.topper@gmail.com>
Wed, 3 May 2017 22:25:19 +0000 (22:25 +0000)
I don't believe its possible to have non-zero values here since DataLayout became required. The APInt constructor inside of the KnownBits object will assert if this ever happens.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@302089 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Analysis/ValueTracking.cpp

index df02a6e9df03c99d0ca138a0d4323f08219948f2..e33e0812a080b0bc8c0b1a9b39179c2b1ffb51a4 100644 (file)
@@ -59,8 +59,8 @@ static cl::opt<bool>
 DontImproveNonNegativePhiBits("dont-improve-non-negative-phi-bits",
                               cl::Hidden, cl::init(true));
 
-/// Returns the bitwidth of the given scalar or pointer type (if unknown returns
-/// 0). For vector types, returns the element type's bitwidth.
+/// Returns the bitwidth of the given scalar or pointer type. For vector types,
+/// returns the element type's bitwidth.
 static unsigned getBitWidth(Type *Ty, const DataLayout &DL) {
   if (unsigned BitWidth = Ty->getScalarSizeInBits())
     return BitWidth;
@@ -1586,13 +1586,7 @@ void computeKnownBits(const Value *V, KnownBits &Known, unsigned Depth,
 /// Convenience wrapper around computeKnownBits.
 void ComputeSignBit(const Value *V, bool &KnownZero, bool &KnownOne,
                     unsigned Depth, const Query &Q) {
-  unsigned BitWidth = getBitWidth(V->getType(), Q.DL);
-  if (!BitWidth) {
-    KnownZero = false;
-    KnownOne = false;
-    return;
-  }
-  KnownBits Bits(BitWidth);
+  KnownBits Bits(getBitWidth(V->getType(), Q.DL));
   computeKnownBits(V, Bits, Depth, Q);
   KnownOne = Bits.isNegative();
   KnownZero = Bits.isNonNegative();
@@ -1843,7 +1837,7 @@ bool isKnownNonZero(const Value *V, unsigned Depth, const Query &Q) {
 
   // shl X, Y != 0 if X is odd.  Note that the value of the shift is undefined
   // if the lowest bit is shifted off the end.
-  if (BitWidth && match(V, m_Shl(m_Value(X), m_Value(Y)))) {
+  if (match(V, m_Shl(m_Value(X), m_Value(Y)))) {
     // shl nuw can't remove any non-zero bits.
     const OverflowingBinaryOperator *BO = cast<OverflowingBinaryOperator>(V);
     if (BO->hasNoUnsignedWrap())
@@ -1902,7 +1896,7 @@ bool isKnownNonZero(const Value *V, unsigned Depth, const Query &Q) {
 
     // If X and Y are both negative (as signed values) then their sum is not
     // zero unless both X and Y equal INT_MIN.
-    if (BitWidth && XKnownNegative && YKnownNegative) {
+    if (XKnownNegative && YKnownNegative) {
       KnownBits Known(BitWidth);
       APInt Mask = APInt::getSignedMaxValue(BitWidth);
       // The sign bit of X is set.  If some other bit is set then X is not equal
@@ -1967,7 +1961,6 @@ bool isKnownNonZero(const Value *V, unsigned Depth, const Query &Q) {
       return true;
   }
 
-  if (!BitWidth) return false;
   KnownBits Known(BitWidth);
   computeKnownBits(V, Known, Depth, Q);
   return Known.One != 0;