mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-26 05:32:25 +00:00
Teach ValueTracking about address spaces
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@188140 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
6e4dbcd115
commit
d080fb103f
@ -39,8 +39,8 @@ const unsigned MaxDepth = 6;
|
||||
static unsigned getBitWidth(Type *Ty, const DataLayout *TD) {
|
||||
if (unsigned BitWidth = Ty->getScalarSizeInBits())
|
||||
return BitWidth;
|
||||
assert(isa<PointerType>(Ty) && "Expected a pointer type!");
|
||||
return TD ? TD->getPointerSizeInBits() : 0;
|
||||
|
||||
return TD ? TD->getPointerTypeSizeInBits(Ty) : 0;
|
||||
}
|
||||
|
||||
static void ComputeMaskedBitsAddSub(bool Add, Value *Op0, Value *Op1, bool NSW,
|
||||
@ -1704,20 +1704,24 @@ Value *llvm::FindInsertedValue(Value *V, ArrayRef<unsigned> idx_range,
|
||||
/// it can be expressed as a base pointer plus a constant offset. Return the
|
||||
/// base and offset to the caller.
|
||||
Value *llvm::GetPointerBaseWithConstantOffset(Value *Ptr, int64_t &Offset,
|
||||
const DataLayout *TD) {
|
||||
const DataLayout *DL) {
|
||||
// Without DataLayout, conservatively assume 64-bit offsets, which is
|
||||
// the widest we support.
|
||||
unsigned BitWidth = TD ? TD->getPointerSizeInBits() : 64;
|
||||
unsigned BitWidth = DL ? DL->getPointerTypeSizeInBits(Ptr->getType()) : 64;
|
||||
APInt ByteOffset(BitWidth, 0);
|
||||
while (1) {
|
||||
if (Ptr->getType()->isVectorTy())
|
||||
break;
|
||||
|
||||
if (GEPOperator *GEP = dyn_cast<GEPOperator>(Ptr)) {
|
||||
APInt GEPOffset(BitWidth, 0);
|
||||
if (TD && !GEP->accumulateConstantOffset(*TD, GEPOffset))
|
||||
break;
|
||||
ByteOffset += GEPOffset;
|
||||
if (DL) {
|
||||
APInt GEPOffset(BitWidth, 0);
|
||||
if (!GEP->accumulateConstantOffset(*DL, GEPOffset))
|
||||
break;
|
||||
|
||||
ByteOffset += GEPOffset;
|
||||
}
|
||||
|
||||
Ptr = GEP->getPointerOperand();
|
||||
} else if (Operator::getOpcode(Ptr) == Instruction::BitCast) {
|
||||
Ptr = cast<Operator>(Ptr)->getOperand(0);
|
||||
|
Loading…
Reference in New Issue
Block a user