add a helper method for code that wants to handle vector

constants by element without caring how they are formed.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@53381 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner 2008-07-10 00:28:11 +00:00
parent 330e7e4d25
commit 8638144825

View File

@ -155,6 +155,31 @@ ConstantVector *ConstantVector::getAllOnesValue(const VectorType *Ty) {
}
/// getVectorElements - This method, which is only valid on constant of vector
/// type, returns the elements of the vector in the specified smallvector.
/// This handles breaking down a vector undef into undef elements, etc.
void Constant::getVectorElements(SmallVectorImpl<Constant*> &Elts) const {
assert(isa<VectorType>(getType()) && "Not a vector constant!");
if (const ConstantVector *CV = dyn_cast<ConstantVector>(this)) {
for (unsigned i = 0, e = CV->getNumOperands(); i != e; ++i)
Elts.push_back(CV->getOperand(i));
return;
}
const VectorType *VT = cast<VectorType>(getType());
if (isa<ConstantAggregateZero>(this)) {
Elts.assign(VT->getNumElements(),
Constant::getNullValue(VT->getElementType()));
return;
}
assert(isa<UndefValue>(this) && "Unknown vector constant type!");
Elts.assign(VT->getNumElements(), UndefValue::get(VT->getElementType()));
}
//===----------------------------------------------------------------------===//
// ConstantInt
//===----------------------------------------------------------------------===//