mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-28 21:34:23 +00:00
Allow SROA of vectors. Removing this caused a
huge performance regression in something we care about. This may not be final fix. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@58718 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
53997b0745
commit
c0bc547c99
@ -531,8 +531,6 @@ void SROA::isSafeUseOfAllocation(Instruction *User, AllocationInst *AI,
|
||||
}
|
||||
}
|
||||
|
||||
bool hasVector = false;
|
||||
|
||||
// Walk through the GEP type indices, checking the types that this indexes
|
||||
// into.
|
||||
for (; I != E; ++I) {
|
||||
@ -554,17 +552,11 @@ void SROA::isSafeUseOfAllocation(Instruction *User, AllocationInst *AI,
|
||||
// of any accesses into structs where any of the components are variables.
|
||||
if (IdxVal->getZExtValue() >= AT->getNumElements())
|
||||
return MarkUnsafe(Info);
|
||||
}
|
||||
|
||||
// Note if we've seen a vector type yet
|
||||
hasVector |= isa<VectorType>(*I);
|
||||
|
||||
// Don't SROA pointers into vectors, unless all indices are zero. When all
|
||||
// indices are zero, we only consider this GEP as a bitcast, but will still
|
||||
// not consider breaking up the vector.
|
||||
if (hasVector && !IsAllZeroIndices)
|
||||
} else if (const VectorType *VT = dyn_cast<VectorType>(*I)) {
|
||||
if (IdxVal->getZExtValue() >= VT->getNumElements())
|
||||
return MarkUnsafe(Info);
|
||||
}
|
||||
}
|
||||
|
||||
// If there are any non-simple uses of this getelementptr, make sure to reject
|
||||
// them.
|
||||
|
Loading…
x
Reference in New Issue
Block a user