diff --git a/include/llvm/Constants.h b/include/llvm/Constants.h index a6050f44a63..e7552e33e08 100644 --- a/include/llvm/Constants.h +++ b/include/llvm/Constants.h @@ -422,6 +422,11 @@ public: return reinterpret_cast(Value::getType()); } + /// @returns the value for an packed integer constant of the given type that + /// has all its bits set to true. + /// @brief Get the all ones value + static ConstantPacked *getAllOnesValue(const PackedType *Ty); + /// isNullValue - Return true if this is the value that would be returned by /// getNullValue. This always returns false because zero arrays are always /// created as ConstantAggregateZero objects. diff --git a/lib/VMCore/Constants.cpp b/lib/VMCore/Constants.cpp index 56219e27567..dfdb1f72dcd 100644 --- a/lib/VMCore/Constants.cpp +++ b/lib/VMCore/Constants.cpp @@ -146,6 +146,18 @@ ConstantIntegral *ConstantIntegral::getAllOnesValue(const Type *Ty) { } } +/// @returns the value for an packed integer constant of the given type that +/// has all its bits set to true. +/// @brief Get the all ones value +ConstantPacked *ConstantPacked::getAllOnesValue(const PackedType *Ty) { + std::vector Elts; + Elts.resize(Ty->getNumElements(), + ConstantIntegral::getAllOnesValue(Ty->getElementType())); + assert(Elts[0] && "Not a packed integer type!"); + return cast(ConstantPacked::get(Elts)); +} + + //===----------------------------------------------------------------------===// // ConstantXXX Classes //===----------------------------------------------------------------------===//