Fold ConstantVector::isAllOnesValue into Constant::isAllOnesValue and simplify it.

llvm-svn: 144555
This commit is contained in:
Benjamin Kramer 2011-11-14 19:12:20 +00:00
parent f93b3f46f8
commit 42d098e1b4
2 changed files with 4 additions and 28 deletions

View File

@ -476,12 +476,6 @@ public:
return reinterpret_cast<VectorType*>(Value::getType()); 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 /// getSplatValue - If this is a splat constant, meaning that all of the
/// elements have the same value, return that value. Otherwise return NULL. /// elements have the same value, return that value. Otherwise return NULL.
Constant *getSplatValue() const; Constant *getSplatValue() const;

View File

@ -71,12 +71,14 @@ bool Constant::isAllOnesValue() const {
if (const ConstantFP *CFP = dyn_cast<ConstantFP>(this)) if (const ConstantFP *CFP = dyn_cast<ConstantFP>(this))
return CFP->getValueAPF().bitcastToAPInt().isAllOnesValue(); 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)) if (const ConstantVector *CV = dyn_cast<ConstantVector>(this))
return CV->isAllOnesValue(); if (Constant *Splat = CV->getSplatValue())
return Splat->isAllOnesValue();
return false; return false;
} }
// Constructor to create a '0' constant of arbitrary type... // Constructor to create a '0' constant of arbitrary type...
Constant *Constant::getNullValue(Type *Ty) { Constant *Constant::getNullValue(Type *Ty) {
switch (Ty->getTypeID()) { switch (Ty->getTypeID()) {
@ -1071,26 +1073,6 @@ void ConstantVector::destroyConstant() {
destroyConstantImpl(); 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 /// getSplatValue - If this is a splat constant, where all of the
/// elements have the same value, return that value. Otherwise return null. /// elements have the same value, return that value. Otherwise return null.
Constant *ConstantVector::getSplatValue() const { Constant *ConstantVector::getSplatValue() const {