mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-12 13:38:21 +00:00
Add in the first iteration of support for llvm/clang/lldb to allow variable per address space pointer sizes to be optimized correctly.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@165726 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -666,7 +666,8 @@ Value *llvm::SimplifyAddInst(Value *Op0, Value *Op1, bool isNSW, bool isNUW,
|
||||
/// 'Offset' APInt must be the bitwidth of the target's pointer size.
|
||||
static bool accumulateGEPOffset(const DataLayout &TD, GEPOperator *GEP,
|
||||
APInt &Offset) {
|
||||
unsigned IntPtrWidth = TD.getPointerSizeInBits();
|
||||
unsigned AS = GEP->getPointerAddressSpace();
|
||||
unsigned IntPtrWidth = TD.getPointerSizeInBits(AS);
|
||||
assert(IntPtrWidth == Offset.getBitWidth());
|
||||
|
||||
gep_type_iterator GTI = gep_type_begin(GEP);
|
||||
@ -696,12 +697,14 @@ static bool accumulateGEPOffset(const DataLayout &TD, GEPOperator *GEP,
|
||||
/// accumulates the total constant offset applied in the returned constant. It
|
||||
/// returns 0 if V is not a pointer, and returns the constant '0' if there are
|
||||
/// no constant offsets applied.
|
||||
/// FIXME: This function also exists in InlineCost.cpp.
|
||||
static Constant *stripAndComputeConstantOffsets(const DataLayout &TD,
|
||||
Value *&V) {
|
||||
if (!V->getType()->isPointerTy())
|
||||
return 0;
|
||||
|
||||
unsigned IntPtrWidth = TD.getPointerSizeInBits();
|
||||
unsigned AS = cast<PointerType>(V->getType())->getAddressSpace();;
|
||||
unsigned IntPtrWidth = TD.getPointerSizeInBits(AS);
|
||||
APInt Offset = APInt::getNullValue(IntPtrWidth);
|
||||
|
||||
// Even though we don't look through PHI nodes, we could be called on an
|
||||
@ -1877,7 +1880,9 @@ static Value *SimplifyICmpInst(unsigned Predicate, Value *LHS, Value *RHS,
|
||||
// Turn icmp (ptrtoint x), (ptrtoint/constant) into a compare of the input
|
||||
// if the integer type is the same size as the pointer type.
|
||||
if (MaxRecurse && Q.TD && isa<PtrToIntInst>(LI) &&
|
||||
Q.TD->getPointerSizeInBits() == DstTy->getPrimitiveSizeInBits()) {
|
||||
Q.TD->getPointerSizeInBits(
|
||||
cast<PtrToIntInst>(LI)->getPointerAddressSpace()) ==
|
||||
DstTy->getPrimitiveSizeInBits()) {
|
||||
if (Constant *RHSC = dyn_cast<Constant>(RHS)) {
|
||||
// Transfer the cast to the constant.
|
||||
if (Value *V = SimplifyICmpInst(Pred, SrcOp,
|
||||
|
Reference in New Issue
Block a user