Fix ConstantUInt::isAllOnesValue
authorChris Lattner <sabre@nondot.org>
Mon, 10 Mar 2003 22:39:02 +0000 (22:39 +0000)
committerChris Lattner <sabre@nondot.org>
Mon, 10 Mar 2003 22:39:02 +0000 (22:39 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@5734 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Constants.h
lib/VMCore/Constants.cpp

index 6c1b8eb1e6148a7c0f5a2a4c9a34c8f7cdcb9d71..f7690439b3dd5dde1ced9d8319aeda242260a9f6 100644 (file)
@@ -134,7 +134,6 @@ public:
   /// isNullValue - Return true if this is the value that would be returned by
   /// getNullValue.
   virtual bool isNullValue() const { return Val.Unsigned == 0; }
-  virtual bool isAllOnesValue() const { return Val.Signed == -1; }
   virtual bool isMaxValue() const = 0;
   virtual bool isMinValue() const = 0;
 
@@ -165,6 +164,8 @@ public:
   /// getValue - return the underlying value of this constant.
   inline int64_t getValue() const { return Val.Signed; }
 
+  virtual bool isAllOnesValue() const { return getValue() == -1; }
+
   /// isMaxValue - Return true if this is the largest value that may be
   /// represented by this type.
   ///
@@ -214,6 +215,7 @@ public:
   /// isMaxValue - Return true if this is the largest value that may be
   /// represented by this type.
   ///
+  virtual bool isAllOnesValue() const;
   virtual bool isMaxValue() const { return isAllOnesValue(); }
   virtual bool isMinValue() const { return getValue() == 0; }
 
index 6a91757641a7c42a2e227c6e00bc7479a3e4d1ed..84f2566e46868da2caf1aba07208c41ee0a42653 100644 (file)
@@ -173,6 +173,13 @@ ConstantIntegral *ConstantIntegral::getAllOnesValue(const Type *Ty) {
   }
 }
 
+bool ConstantUInt::isAllOnesValue() const {
+  unsigned TypeBits = getType()->getPrimitiveSize()*8;
+  uint64_t Val = ~0ULL;                // All ones
+  Val >>= 64-TypeBits;                 // Shift out inappropriate bits
+  return getValue() == Val;
+}
+
 
 //===----------------------------------------------------------------------===//
 //                            ConstantXXX Classes