mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2026-04-26 12:20:42 +00:00
Rename many DataLayout variables from TD to DL.
I am really sorry for the noise, but the current state where some parts of the code use TD (from the old name: TargetData) and other parts use DL makes it hard to write a patch that changes where those variables come from and how they are passed along. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@201827 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -195,9 +195,9 @@ class MemsetRanges {
|
||||
/// because each element is relatively large and expensive to copy.
|
||||
std::list<MemsetRange> Ranges;
|
||||
typedef std::list<MemsetRange>::iterator range_iterator;
|
||||
const DataLayout &TD;
|
||||
const DataLayout &DL;
|
||||
public:
|
||||
MemsetRanges(const DataLayout &td) : TD(td) {}
|
||||
MemsetRanges(const DataLayout &DL) : DL(DL) {}
|
||||
|
||||
typedef std::list<MemsetRange>::const_iterator const_iterator;
|
||||
const_iterator begin() const { return Ranges.begin(); }
|
||||
@@ -212,7 +212,7 @@ public:
|
||||
}
|
||||
|
||||
void addStore(int64_t OffsetFromFirst, StoreInst *SI) {
|
||||
int64_t StoreSize = TD.getTypeStoreSize(SI->getOperand(0)->getType());
|
||||
int64_t StoreSize = DL.getTypeStoreSize(SI->getOperand(0)->getType());
|
||||
|
||||
addRange(OffsetFromFirst, StoreSize,
|
||||
SI->getPointerOperand(), SI->getAlignment(), SI);
|
||||
@@ -305,14 +305,14 @@ namespace {
|
||||
class MemCpyOpt : public FunctionPass {
|
||||
MemoryDependenceAnalysis *MD;
|
||||
TargetLibraryInfo *TLI;
|
||||
const DataLayout *TD;
|
||||
const DataLayout *DL;
|
||||
public:
|
||||
static char ID; // Pass identification, replacement for typeid
|
||||
MemCpyOpt() : FunctionPass(ID) {
|
||||
initializeMemCpyOptPass(*PassRegistry::getPassRegistry());
|
||||
MD = 0;
|
||||
TLI = 0;
|
||||
TD = 0;
|
||||
DL = 0;
|
||||
}
|
||||
|
||||
bool runOnFunction(Function &F);
|
||||
@@ -366,13 +366,13 @@ INITIALIZE_PASS_END(MemCpyOpt, "memcpyopt", "MemCpy Optimization",
|
||||
/// attempts to merge them together into a memcpy/memset.
|
||||
Instruction *MemCpyOpt::tryMergingIntoMemset(Instruction *StartInst,
|
||||
Value *StartPtr, Value *ByteVal) {
|
||||
if (TD == 0) return 0;
|
||||
if (DL == 0) return 0;
|
||||
|
||||
// Okay, so we now have a single store that can be splatable. Scan to find
|
||||
// all subsequent stores of the same value to offset from the same pointer.
|
||||
// Join these together into ranges, so we can decide whether contiguous blocks
|
||||
// are stored.
|
||||
MemsetRanges Ranges(*TD);
|
||||
MemsetRanges Ranges(*DL);
|
||||
|
||||
BasicBlock::iterator BI = StartInst;
|
||||
for (++BI; !isa<TerminatorInst>(BI); ++BI) {
|
||||
@@ -396,7 +396,7 @@ Instruction *MemCpyOpt::tryMergingIntoMemset(Instruction *StartInst,
|
||||
// Check to see if this store is to a constant offset from the start ptr.
|
||||
int64_t Offset;
|
||||
if (!IsPointerOffset(StartPtr, NextStore->getPointerOperand(),
|
||||
Offset, *TD))
|
||||
Offset, *DL))
|
||||
break;
|
||||
|
||||
Ranges.addStore(Offset, NextStore);
|
||||
@@ -409,7 +409,7 @@ Instruction *MemCpyOpt::tryMergingIntoMemset(Instruction *StartInst,
|
||||
|
||||
// Check to see if this store is to a constant offset from the start ptr.
|
||||
int64_t Offset;
|
||||
if (!IsPointerOffset(StartPtr, MSI->getDest(), Offset, *TD))
|
||||
if (!IsPointerOffset(StartPtr, MSI->getDest(), Offset, *DL))
|
||||
break;
|
||||
|
||||
Ranges.addMemSet(Offset, MSI);
|
||||
@@ -441,7 +441,7 @@ Instruction *MemCpyOpt::tryMergingIntoMemset(Instruction *StartInst,
|
||||
if (Range.TheStores.size() == 1) continue;
|
||||
|
||||
// If it is profitable to lower this range to memset, do so now.
|
||||
if (!Range.isProfitableToUseMemset(*TD))
|
||||
if (!Range.isProfitableToUseMemset(*DL))
|
||||
continue;
|
||||
|
||||
// Otherwise, we do want to transform this! Create a new memset.
|
||||
@@ -453,7 +453,7 @@ Instruction *MemCpyOpt::tryMergingIntoMemset(Instruction *StartInst,
|
||||
if (Alignment == 0) {
|
||||
Type *EltType =
|
||||
cast<PointerType>(StartPtr->getType())->getElementType();
|
||||
Alignment = TD->getABITypeAlignment(EltType);
|
||||
Alignment = DL->getABITypeAlignment(EltType);
|
||||
}
|
||||
|
||||
AMemSet =
|
||||
@@ -484,7 +484,7 @@ Instruction *MemCpyOpt::tryMergingIntoMemset(Instruction *StartInst,
|
||||
bool MemCpyOpt::processStore(StoreInst *SI, BasicBlock::iterator &BBI) {
|
||||
if (!SI->isSimple()) return false;
|
||||
|
||||
if (TD == 0) return false;
|
||||
if (DL == 0) return false;
|
||||
|
||||
// Detect cases where we're performing call slot forwarding, but
|
||||
// happen to be using a load-store pair to implement it, rather than
|
||||
@@ -514,15 +514,15 @@ bool MemCpyOpt::processStore(StoreInst *SI, BasicBlock::iterator &BBI) {
|
||||
if (C) {
|
||||
unsigned storeAlign = SI->getAlignment();
|
||||
if (!storeAlign)
|
||||
storeAlign = TD->getABITypeAlignment(SI->getOperand(0)->getType());
|
||||
storeAlign = DL->getABITypeAlignment(SI->getOperand(0)->getType());
|
||||
unsigned loadAlign = LI->getAlignment();
|
||||
if (!loadAlign)
|
||||
loadAlign = TD->getABITypeAlignment(LI->getType());
|
||||
loadAlign = DL->getABITypeAlignment(LI->getType());
|
||||
|
||||
bool changed = performCallSlotOptzn(LI,
|
||||
SI->getPointerOperand()->stripPointerCasts(),
|
||||
LI->getPointerOperand()->stripPointerCasts(),
|
||||
TD->getTypeStoreSize(SI->getOperand(0)->getType()),
|
||||
DL->getTypeStoreSize(SI->getOperand(0)->getType()),
|
||||
std::min(storeAlign, loadAlign), C);
|
||||
if (changed) {
|
||||
MD->removeInstruction(SI);
|
||||
@@ -596,13 +596,13 @@ bool MemCpyOpt::performCallSlotOptzn(Instruction *cpy,
|
||||
return false;
|
||||
|
||||
// Check that all of src is copied to dest.
|
||||
if (TD == 0) return false;
|
||||
if (DL == 0) return false;
|
||||
|
||||
ConstantInt *srcArraySize = dyn_cast<ConstantInt>(srcAlloca->getArraySize());
|
||||
if (!srcArraySize)
|
||||
return false;
|
||||
|
||||
uint64_t srcSize = TD->getTypeAllocSize(srcAlloca->getAllocatedType()) *
|
||||
uint64_t srcSize = DL->getTypeAllocSize(srcAlloca->getAllocatedType()) *
|
||||
srcArraySize->getZExtValue();
|
||||
|
||||
if (cpyLen < srcSize)
|
||||
@@ -617,7 +617,7 @@ bool MemCpyOpt::performCallSlotOptzn(Instruction *cpy,
|
||||
if (!destArraySize)
|
||||
return false;
|
||||
|
||||
uint64_t destSize = TD->getTypeAllocSize(A->getAllocatedType()) *
|
||||
uint64_t destSize = DL->getTypeAllocSize(A->getAllocatedType()) *
|
||||
destArraySize->getZExtValue();
|
||||
|
||||
if (destSize < srcSize)
|
||||
@@ -636,7 +636,7 @@ bool MemCpyOpt::performCallSlotOptzn(Instruction *cpy,
|
||||
return false;
|
||||
}
|
||||
|
||||
uint64_t destSize = TD->getTypeAllocSize(StructTy);
|
||||
uint64_t destSize = DL->getTypeAllocSize(StructTy);
|
||||
if (destSize < srcSize)
|
||||
return false;
|
||||
} else {
|
||||
@@ -646,7 +646,7 @@ bool MemCpyOpt::performCallSlotOptzn(Instruction *cpy,
|
||||
// Check that dest points to memory that is at least as aligned as src.
|
||||
unsigned srcAlign = srcAlloca->getAlignment();
|
||||
if (!srcAlign)
|
||||
srcAlign = TD->getABITypeAlignment(srcAlloca->getAllocatedType());
|
||||
srcAlign = DL->getABITypeAlignment(srcAlloca->getAllocatedType());
|
||||
bool isDestSufficientlyAligned = srcAlign <= cpyAlign;
|
||||
// If dest is not aligned enough and we can't increase its alignment then
|
||||
// bail out.
|
||||
@@ -912,12 +912,12 @@ bool MemCpyOpt::processMemMove(MemMoveInst *M) {
|
||||
|
||||
/// processByValArgument - This is called on every byval argument in call sites.
|
||||
bool MemCpyOpt::processByValArgument(CallSite CS, unsigned ArgNo) {
|
||||
if (TD == 0) return false;
|
||||
if (DL == 0) return false;
|
||||
|
||||
// Find out what feeds this byval argument.
|
||||
Value *ByValArg = CS.getArgument(ArgNo);
|
||||
Type *ByValTy = cast<PointerType>(ByValArg->getType())->getElementType();
|
||||
uint64_t ByValSize = TD->getTypeAllocSize(ByValTy);
|
||||
uint64_t ByValSize = DL->getTypeAllocSize(ByValTy);
|
||||
MemDepResult DepInfo =
|
||||
MD->getPointerDependencyFrom(AliasAnalysis::Location(ByValArg, ByValSize),
|
||||
true, CS.getInstruction(),
|
||||
@@ -946,7 +946,7 @@ bool MemCpyOpt::processByValArgument(CallSite CS, unsigned ArgNo) {
|
||||
// If it is greater than the memcpy, then we check to see if we can force the
|
||||
// source of the memcpy to the alignment we need. If we fail, we bail out.
|
||||
if (MDep->getAlignment() < ByValAlign &&
|
||||
getOrEnforceKnownAlignment(MDep->getSource(),ByValAlign, TD) < ByValAlign)
|
||||
getOrEnforceKnownAlignment(MDep->getSource(),ByValAlign, DL) < ByValAlign)
|
||||
return false;
|
||||
|
||||
// Verify that the copied-from memory doesn't change in between the memcpy and
|
||||
@@ -1025,7 +1025,7 @@ bool MemCpyOpt::runOnFunction(Function &F) {
|
||||
|
||||
bool MadeChange = false;
|
||||
MD = &getAnalysis<MemoryDependenceAnalysis>();
|
||||
TD = getAnalysisIfAvailable<DataLayout>();
|
||||
DL = getAnalysisIfAvailable<DataLayout>();
|
||||
TLI = &getAnalysis<TargetLibraryInfo>();
|
||||
|
||||
// If we don't have at least memset and memcpy, there is little point of doing
|
||||
|
||||
Reference in New Issue
Block a user