mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-30 04:35:00 +00:00
Do not depend on index type to determine whether it is a structure or sequential index
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@10221 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
c4c6b9e5bc
commit
fa3711a0f8
@ -17,6 +17,7 @@
|
||||
#include "llvm/Constants.h"
|
||||
#include "llvm/DerivedTypes.h"
|
||||
#include "llvm/Instructions.h"
|
||||
#include "llvm/Support/GetElementPtrTypeIterator.h"
|
||||
#include "llvm/Support/InstVisitor.h"
|
||||
#include "llvm/Target/TargetData.h"
|
||||
#include "Support/CommandLine.h"
|
||||
@ -366,12 +367,17 @@ void GraphBuilder::visitGetElementPtrInst(User &GEP) {
|
||||
|
||||
// All of these subscripts are indexing INTO the elements we have...
|
||||
unsigned Offset = 0;
|
||||
for (unsigned i = 2, e = GEP.getNumOperands(); i < e; ++i)
|
||||
if (GEP.getOperand(i)->getType() == Type::LongTy) {
|
||||
// Get the type indexing into...
|
||||
const SequentialType *STy = cast<SequentialType>(CurTy);
|
||||
CurTy = STy->getElementType();
|
||||
for (gep_type_iterator I = gep_type_begin(GEP), E = gep_type_end(GEP);
|
||||
I != E; ++I)
|
||||
if (const StructType *STy = dyn_cast<StructType>(*I)) {
|
||||
unsigned FieldNo = cast<ConstantUInt>(I.getOperand())->getValue();
|
||||
Offset += TD.getStructLayout(STy)->MemberOffsets[FieldNo];
|
||||
}
|
||||
|
||||
|
||||
#if 0
|
||||
if (const SequentialType *STy = cast<SequentialType>(*I)) {
|
||||
CurTy = STy->getElementType();
|
||||
if (ConstantSInt *CS = dyn_cast<ConstantSInt>(GEP.getOperand(i))) {
|
||||
Offset += CS->getValue()*TD.getTypeSize(CurTy);
|
||||
} else {
|
||||
@ -394,13 +400,8 @@ void GraphBuilder::visitGetElementPtrInst(User &GEP) {
|
||||
N->mergeIndexes(RawOffset+j, RawOffset+i*ElSize+j);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
} else if (GEP.getOperand(i)->getType() == Type::UByteTy) {
|
||||
unsigned FieldNo = cast<ConstantUInt>(GEP.getOperand(i))->getValue();
|
||||
const StructType *STy = cast<StructType>(CurTy);
|
||||
Offset += TD.getStructLayout(STy)->MemberOffsets[FieldNo];
|
||||
CurTy = STy->getContainedType(FieldNo);
|
||||
}
|
||||
#endif
|
||||
|
||||
// Add in the offset calculated...
|
||||
Value.setOffset(Value.getOffset()+Offset);
|
||||
|
Loading…
x
Reference in New Issue
Block a user