mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-08-21 18:29:46 +00:00
Simplify this code.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@98853 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
d720712f67
commit
40b037ef61
@ -564,21 +564,6 @@ static Constant *SymbolicallyEvaluateGEP(Constant *const *Ops, unsigned NumOps,
|
||||
|
||||
unsigned BitWidth =
|
||||
TD->getTypeSizeInBits(TD->getIntPtrType(Ptr->getContext()));
|
||||
APInt BasePtr(BitWidth, 0);
|
||||
bool BaseIsInt = true;
|
||||
if (!Ptr->isNullValue()) {
|
||||
// If this is a inttoptr from a constant int, we can fold this as the base,
|
||||
// otherwise we can't.
|
||||
if (ConstantExpr *CE = dyn_cast<ConstantExpr>(Ptr))
|
||||
if (CE->getOpcode() == Instruction::IntToPtr)
|
||||
if (ConstantInt *Base = dyn_cast<ConstantInt>(CE->getOperand(0))) {
|
||||
BasePtr = Base->getValue();
|
||||
BasePtr.zextOrTrunc(BitWidth);
|
||||
}
|
||||
|
||||
if (BasePtr == 0)
|
||||
BaseIsInt = false;
|
||||
}
|
||||
|
||||
// If this is a constant expr gep that is effectively computing an
|
||||
// "offsetof", fold it into 'cast int Size to T*' instead of 'gep 0, 0, 12'
|
||||
@ -615,7 +600,14 @@ static Constant *SymbolicallyEvaluateGEP(Constant *const *Ops, unsigned NumOps,
|
||||
|
||||
// If the base value for this address is a literal integer value, fold the
|
||||
// getelementptr to the resulting integer value casted to the pointer type.
|
||||
if (BaseIsInt) {
|
||||
APInt BasePtr(BitWidth, 0);
|
||||
if (ConstantExpr *CE = dyn_cast<ConstantExpr>(Ptr))
|
||||
if (CE->getOpcode() == Instruction::IntToPtr)
|
||||
if (ConstantInt *Base = dyn_cast<ConstantInt>(CE->getOperand(0))) {
|
||||
BasePtr = Base->getValue();
|
||||
BasePtr.zextOrTrunc(BitWidth);
|
||||
}
|
||||
if (Ptr->isNullValue() || BasePtr != 0) {
|
||||
Constant *C = ConstantInt::get(Ptr->getContext(), Offset+BasePtr);
|
||||
return ConstantExpr::getIntToPtr(C, ResultTy);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user