mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-08-05 13:26:55 +00:00
Revert 165732 for further review.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@165747 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -286,8 +286,7 @@ DecomposeGEPExpression(const Value *V, int64_t &BaseOffs,
|
||||
V = GEPOp->getOperand(0);
|
||||
continue;
|
||||
}
|
||||
|
||||
unsigned AS = GEPOp->getPointerAddressSpace();
|
||||
|
||||
// Walk the indices of the GEP, accumulating them into BaseOff/VarIndices.
|
||||
gep_type_iterator GTI = gep_type_begin(GEPOp);
|
||||
for (User::const_op_iterator I = GEPOp->op_begin()+1,
|
||||
@@ -316,7 +315,7 @@ DecomposeGEPExpression(const Value *V, int64_t &BaseOffs,
|
||||
// If the integer type is smaller than the pointer size, it is implicitly
|
||||
// sign extended to pointer size.
|
||||
unsigned Width = cast<IntegerType>(Index->getType())->getBitWidth();
|
||||
if (TD->getPointerSizeInBits(AS) > Width)
|
||||
if (TD->getPointerSizeInBits() > Width)
|
||||
Extension = EK_SignExt;
|
||||
|
||||
// Use GetLinearExpression to decompose the index into a C1*V+C2 form.
|
||||
@@ -345,7 +344,7 @@ DecomposeGEPExpression(const Value *V, int64_t &BaseOffs,
|
||||
|
||||
// Make sure that we have a scale that makes sense for this target's
|
||||
// pointer size.
|
||||
if (unsigned ShiftBits = 64-TD->getPointerSizeInBits(AS)) {
|
||||
if (unsigned ShiftBits = 64-TD->getPointerSizeInBits()) {
|
||||
Scale <<= ShiftBits;
|
||||
Scale = (int64_t)Scale >> ShiftBits;
|
||||
}
|
||||
|
@@ -91,16 +91,14 @@ bool llvm::isInstructionFree(const Instruction *I, const DataLayout *TD) {
|
||||
// which doesn't contain values outside the range of a pointer.
|
||||
if (isa<IntToPtrInst>(CI) && TD &&
|
||||
TD->isLegalInteger(Op->getType()->getScalarSizeInBits()) &&
|
||||
Op->getType()->getScalarSizeInBits() <= TD->getPointerSizeInBits(
|
||||
cast<IntToPtrInst>(CI)->getAddressSpace()))
|
||||
Op->getType()->getScalarSizeInBits() <= TD->getPointerSizeInBits())
|
||||
return true;
|
||||
|
||||
// A ptrtoint cast is free so long as the result is large enough to store
|
||||
// the pointer, and a legal integer type.
|
||||
if (isa<PtrToIntInst>(CI) && TD &&
|
||||
TD->isLegalInteger(Op->getType()->getScalarSizeInBits()) &&
|
||||
Op->getType()->getScalarSizeInBits() >= TD->getPointerSizeInBits(
|
||||
cast<PtrToIntInst>(CI)->getPointerAddressSpace()))
|
||||
Op->getType()->getScalarSizeInBits() >= TD->getPointerSizeInBits())
|
||||
return true;
|
||||
|
||||
// trunc to a native type is free (assuming the target has compare and
|
||||
|
@@ -916,11 +916,10 @@ Constant *llvm::ConstantFoldInstOperands(unsigned Opcode, Type *DestTy,
|
||||
if (TD && CE->getOpcode() == Instruction::IntToPtr) {
|
||||
Constant *Input = CE->getOperand(0);
|
||||
unsigned InWidth = Input->getType()->getScalarSizeInBits();
|
||||
unsigned AS = cast<PointerType>(CE->getType())->getAddressSpace();
|
||||
if (TD->getPointerSizeInBits(AS) < InWidth) {
|
||||
if (TD->getPointerSizeInBits() < InWidth) {
|
||||
Constant *Mask =
|
||||
ConstantInt::get(CE->getContext(), APInt::getLowBitsSet(InWidth,
|
||||
TD->getPointerSizeInBits(AS)));
|
||||
TD->getPointerSizeInBits()));
|
||||
Input = ConstantExpr::getAnd(Input, Mask);
|
||||
}
|
||||
// Do a zext or trunc to get to the dest size.
|
||||
@@ -933,10 +932,9 @@ Constant *llvm::ConstantFoldInstOperands(unsigned Opcode, Type *DestTy,
|
||||
// the int size is >= the ptr size. This requires knowing the width of a
|
||||
// pointer, so it can't be done in ConstantExpr::getCast.
|
||||
if (ConstantExpr *CE = dyn_cast<ConstantExpr>(Ops[0]))
|
||||
if (TD && CE->getOpcode() == Instruction::PtrToInt &&
|
||||
TD->getPointerSizeInBits(
|
||||
cast<PointerType>(CE->getOperand(0)->getType())->getAddressSpace())
|
||||
<= CE->getType()->getScalarSizeInBits())
|
||||
if (TD &&
|
||||
TD->getPointerSizeInBits() <= CE->getType()->getScalarSizeInBits() &&
|
||||
CE->getOpcode() == Instruction::PtrToInt)
|
||||
return FoldBitCast(CE->getOperand(0), DestTy, *TD);
|
||||
|
||||
return ConstantExpr::getCast(Opcode, Ops[0], DestTy);
|
||||
|
@@ -243,8 +243,7 @@ bool CallAnalyzer::accumulateGEPOffset(GEPOperator &GEP, APInt &Offset) {
|
||||
if (!TD)
|
||||
return false;
|
||||
|
||||
unsigned AS = GEP.getPointerAddressSpace();
|
||||
unsigned IntPtrWidth = TD->getPointerSizeInBits(AS);
|
||||
unsigned IntPtrWidth = TD->getPointerSizeInBits();
|
||||
assert(IntPtrWidth == Offset.getBitWidth());
|
||||
|
||||
for (gep_type_iterator GTI = gep_type_begin(GEP), GTE = gep_type_end(GEP);
|
||||
@@ -392,8 +391,7 @@ bool CallAnalyzer::visitPtrToInt(PtrToIntInst &I) {
|
||||
// Track base/offset pairs when converted to a plain integer provided the
|
||||
// integer is large enough to represent the pointer.
|
||||
unsigned IntegerSize = I.getType()->getScalarSizeInBits();
|
||||
unsigned AS = I.getPointerAddressSpace();
|
||||
if (TD && IntegerSize >= TD->getPointerSizeInBits(AS)) {
|
||||
if (TD && IntegerSize >= TD->getPointerSizeInBits()) {
|
||||
std::pair<Value *, APInt> BaseAndOffset
|
||||
= ConstantOffsetPtrs.lookup(I.getOperand(0));
|
||||
if (BaseAndOffset.first)
|
||||
@@ -427,8 +425,7 @@ bool CallAnalyzer::visitIntToPtr(IntToPtrInst &I) {
|
||||
// modifications provided the integer is not too large.
|
||||
Value *Op = I.getOperand(0);
|
||||
unsigned IntegerSize = Op->getType()->getScalarSizeInBits();
|
||||
unsigned AS = I.getAddressSpace();
|
||||
if (TD && IntegerSize <= TD->getPointerSizeInBits(AS)) {
|
||||
if (TD && IntegerSize <= TD->getPointerSizeInBits()) {
|
||||
std::pair<Value *, APInt> BaseAndOffset = ConstantOffsetPtrs.lookup(Op);
|
||||
if (BaseAndOffset.first)
|
||||
ConstantOffsetPtrs[&I] = BaseAndOffset;
|
||||
@@ -763,8 +760,7 @@ ConstantInt *CallAnalyzer::stripAndComputeInBoundsConstantOffsets(Value *&V) {
|
||||
if (!TD || !V->getType()->isPointerTy())
|
||||
return 0;
|
||||
|
||||
unsigned AS = cast<PointerType>(V->getType())->getAddressSpace();;
|
||||
unsigned IntPtrWidth = TD->getPointerSizeInBits(AS);
|
||||
unsigned IntPtrWidth = TD->getPointerSizeInBits();
|
||||
APInt Offset = APInt::getNullValue(IntPtrWidth);
|
||||
|
||||
// Even though we don't look through PHI nodes, we could be called on an
|
||||
@@ -828,8 +824,7 @@ bool CallAnalyzer::analyzeCall(CallSite CS) {
|
||||
// size of the byval type by the target's pointer size.
|
||||
PointerType *PTy = cast<PointerType>(CS.getArgument(I)->getType());
|
||||
unsigned TypeSize = TD->getTypeSizeInBits(PTy->getElementType());
|
||||
unsigned AS = PTy->getAddressSpace();
|
||||
unsigned PointerSize = TD->getPointerSizeInBits(AS);
|
||||
unsigned PointerSize = TD->getPointerSizeInBits();
|
||||
// Ceiling division.
|
||||
unsigned NumStores = (TypeSize + PointerSize - 1) / PointerSize;
|
||||
|
||||
|
@@ -666,8 +666,7 @@ 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 AS = GEP->getPointerAddressSpace();
|
||||
unsigned IntPtrWidth = TD.getPointerSizeInBits(AS);
|
||||
unsigned IntPtrWidth = TD.getPointerSizeInBits();
|
||||
assert(IntPtrWidth == Offset.getBitWidth());
|
||||
|
||||
gep_type_iterator GTI = gep_type_begin(GEP);
|
||||
@@ -697,14 +696,12 @@ 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 AS = cast<PointerType>(V->getType())->getAddressSpace();;
|
||||
unsigned IntPtrWidth = TD.getPointerSizeInBits(AS);
|
||||
unsigned IntPtrWidth = TD.getPointerSizeInBits();
|
||||
APInt Offset = APInt::getNullValue(IntPtrWidth);
|
||||
|
||||
// Even though we don't look through PHI nodes, we could be called on an
|
||||
@@ -1880,9 +1877,7 @@ 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(
|
||||
cast<PtrToIntInst>(LI)->getPointerAddressSpace()) ==
|
||||
DstTy->getPrimitiveSizeInBits()) {
|
||||
Q.TD->getPointerSizeInBits() == DstTy->getPrimitiveSizeInBits()) {
|
||||
if (Constant *RHSC = dyn_cast<Constant>(RHS)) {
|
||||
// Transfer the cast to the constant.
|
||||
if (Value *V = SimplifyICmpInst(Pred, SrcOp,
|
||||
|
@@ -40,8 +40,7 @@ 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(cast<PointerType>(Ty)->getAddressSpace()) : 0;
|
||||
return TD ? TD->getPointerSizeInBits() : 0;
|
||||
}
|
||||
|
||||
static void ComputeMaskedBitsAddSub(bool Add, Value *Op0, Value *Op1, bool NSW,
|
||||
@@ -1622,8 +1621,7 @@ Value *llvm::GetPointerBaseWithConstantOffset(Value *Ptr, int64_t &Offset,
|
||||
|
||||
// Re-sign extend from the pointer size if needed to get overflow edge cases
|
||||
// right.
|
||||
unsigned AS = GEP->getPointerAddressSpace();
|
||||
unsigned PtrSize = TD.getPointerSizeInBits(AS);
|
||||
unsigned PtrSize = TD.getPointerSizeInBits();
|
||||
if (PtrSize < 64)
|
||||
Offset = SignExtend64(Offset, PtrSize);
|
||||
|
||||
|
Reference in New Issue
Block a user