mirror of
https://github.com/RPCS3/llvm.git
synced 2025-05-14 01:16:26 +00:00
Refix a use of explicit pointer types in GEP constant folding
In the glorious future of opaque pointer types, it won't be possible to retrieve the pointee type of a pointer type which is what's being done in this GEP loop - but the first iteration is always a pointer type and the loop doesn't care about that case, except whether or not the index is a constant. So pull that special case out before the loop and start at the second iteration (index 1) instead. Originally committed in r236670 and reverted with a test case in r239015. This change keeps the test case working while also avoiding depending on pointee types. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239629 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
8040b1e469
commit
d25af8c396
@ -2163,11 +2163,11 @@ static Constant *ConstantFoldGetElementPtrImpl(Type *PointeeTy, Constant *C,
|
|||||||
// Check to see if any array indices are not within the corresponding
|
// Check to see if any array indices are not within the corresponding
|
||||||
// notional array or vector bounds. If so, try to determine if they can be
|
// notional array or vector bounds. If so, try to determine if they can be
|
||||||
// factored out into preceding dimensions.
|
// factored out into preceding dimensions.
|
||||||
bool Unknown = false;
|
|
||||||
SmallVector<Constant *, 8> NewIdxs;
|
SmallVector<Constant *, 8> NewIdxs;
|
||||||
Type *Ty = C->getType();
|
Type *Ty = PointeeTy;
|
||||||
Type *Prev = nullptr;
|
Type *Prev = C->getType();
|
||||||
for (unsigned i = 0, e = Idxs.size(); i != e;
|
bool Unknown = !isa<ConstantInt>(Idxs[0]);
|
||||||
|
for (unsigned i = 1, e = Idxs.size(); i != e;
|
||||||
Prev = Ty, Ty = cast<CompositeType>(Ty)->getTypeAtIndex(Idxs[i]), ++i) {
|
Prev = Ty, Ty = cast<CompositeType>(Ty)->getTypeAtIndex(Idxs[i]), ++i) {
|
||||||
if (ConstantInt *CI = dyn_cast<ConstantInt>(Idxs[i])) {
|
if (ConstantInt *CI = dyn_cast<ConstantInt>(Idxs[i])) {
|
||||||
if (isa<ArrayType>(Ty) || isa<VectorType>(Ty))
|
if (isa<ArrayType>(Ty) || isa<VectorType>(Ty))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user