diff --git a/include/llvm/Constants.h b/include/llvm/Constants.h index 6c1b8eb1e61..f7690439b3d 100644 --- a/include/llvm/Constants.h +++ b/include/llvm/Constants.h @@ -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; } diff --git a/lib/VMCore/Constants.cpp b/lib/VMCore/Constants.cpp index 6a91757641a..84f2566e468 100644 --- a/lib/VMCore/Constants.cpp +++ b/lib/VMCore/Constants.cpp @@ -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