diff options
author | Benjamin Kramer <benny.kra@googlemail.com> | 2011-11-14 19:12:20 +0000 |
---|---|---|
committer | Benjamin Kramer <benny.kra@googlemail.com> | 2011-11-14 19:12:20 +0000 |
commit | b518cae015f9a91aa5035e4047e50215a47a7bb2 (patch) | |
tree | 1a421f4b4c3a02c20775638776a66abb076ac27f | |
parent | 788dc0f4e51628651850ca3c68cccd713b694052 (diff) |
Fold ConstantVector::isAllOnesValue into Constant::isAllOnesValue and simplify it.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@144555 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | include/llvm/Constants.h | 6 | ||||
-rw-r--r-- | lib/VMCore/Constants.cpp | 26 |
2 files changed, 4 insertions, 28 deletions
diff --git a/include/llvm/Constants.h b/include/llvm/Constants.h index 6545a3fedb..41e451f5a1 100644 --- a/include/llvm/Constants.h +++ b/include/llvm/Constants.h @@ -475,12 +475,6 @@ public: inline VectorType *getType() const { return reinterpret_cast<VectorType*>(Value::getType()); } - - /// This function will return true iff every element in this vector constant - /// is set to all ones. - /// @returns true iff this constant's emements are all set to all ones. - /// @brief Determine if the value is all ones. - bool isAllOnesValue() const; /// getSplatValue - If this is a splat constant, meaning that all of the /// elements have the same value, return that value. Otherwise return NULL. diff --git a/lib/VMCore/Constants.cpp b/lib/VMCore/Constants.cpp index a84a046bb9..cd94da1353 100644 --- a/lib/VMCore/Constants.cpp +++ b/lib/VMCore/Constants.cpp @@ -71,12 +71,14 @@ bool Constant::isAllOnesValue() const { if (const ConstantFP *CFP = dyn_cast<ConstantFP>(this)) return CFP->getValueAPF().bitcastToAPInt().isAllOnesValue(); - // Check for constant vectors + // Check for constant vectors which are splats of -1 values. if (const ConstantVector *CV = dyn_cast<ConstantVector>(this)) - return CV->isAllOnesValue(); + if (Constant *Splat = CV->getSplatValue()) + return Splat->isAllOnesValue(); return false; } + // Constructor to create a '0' constant of arbitrary type... Constant *Constant::getNullValue(Type *Ty) { switch (Ty->getTypeID()) { @@ -1071,26 +1073,6 @@ void ConstantVector::destroyConstant() { destroyConstantImpl(); } -/// This function will return true iff every element in this vector constant -/// is set to all ones. -/// @returns true iff this constant's elements are all set to all ones. -/// @brief Determine if the value is all ones. -bool ConstantVector::isAllOnesValue() const { - // Check out first element. - const Constant *Elt = getOperand(0); - const ConstantInt *CI = dyn_cast<ConstantInt>(Elt); - const ConstantFP *CF = dyn_cast<ConstantFP>(Elt); - - // Then make sure all remaining elements point to the same value. - for (unsigned I = 1, E = getNumOperands(); I < E; ++I) - if (getOperand(I) != Elt) - return false; - - // First value is all-ones. - return (CI && CI->isAllOnesValue()) || - (CF && CF->isAllOnesValue()); -} - /// getSplatValue - If this is a splat constant, where all of the /// elements have the same value, return that value. Otherwise return null. Constant *ConstantVector::getSplatValue() const { |