mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-13 09:33:50 +00:00
SImplify ConstantVector::get a bit and make it turn a vector
of all undefs into a single undef value. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@53384 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
fea85c46c0
commit
7cc9a4b990
@ -1498,16 +1498,26 @@ static ManagedStatic<ValueMap<std::vector<Constant*>, VectorType,
|
||||
|
||||
Constant *ConstantVector::get(const VectorType *Ty,
|
||||
const std::vector<Constant*> &V) {
|
||||
// If this is an all-zero vector, return a ConstantAggregateZero object
|
||||
if (!V.empty()) {
|
||||
Constant *C = V[0];
|
||||
if (!C->isNullValue())
|
||||
return VectorConstants->getOrCreate(Ty, V);
|
||||
assert(!V.empty() && "Vectors can't be empty");
|
||||
// If this is an all-undef or alll-zero vector, return a
|
||||
// ConstantAggregateZero or UndefValue.
|
||||
Constant *C = V[0];
|
||||
bool isZero = C->isNullValue();
|
||||
bool isUndef = isa<UndefValue>(C);
|
||||
|
||||
if (isZero || isUndef) {
|
||||
for (unsigned i = 1, e = V.size(); i != e; ++i)
|
||||
if (V[i] != C)
|
||||
return VectorConstants->getOrCreate(Ty, V);
|
||||
if (V[i] != C) {
|
||||
isZero = isUndef = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return ConstantAggregateZero::get(Ty);
|
||||
|
||||
if (isZero)
|
||||
return ConstantAggregateZero::get(Ty);
|
||||
if (isUndef)
|
||||
return UndefValue::get(Ty);
|
||||
return VectorConstants->getOrCreate(Ty, V);
|
||||
}
|
||||
|
||||
Constant *ConstantVector::get(const std::vector<Constant*> &V) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user