mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-05-24 18:38:50 +00:00
Factor out calls to AA.getDataLayout().
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@202157 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
37ecf69cbf
commit
53eeb678ea
@ -193,6 +193,7 @@ static bool hasMemoryWrite(Instruction *I, const TargetLibraryInfo *TLI) {
|
|||||||
/// describe the memory operations for this instruction.
|
/// describe the memory operations for this instruction.
|
||||||
static AliasAnalysis::Location
|
static AliasAnalysis::Location
|
||||||
getLocForWrite(Instruction *Inst, AliasAnalysis &AA) {
|
getLocForWrite(Instruction *Inst, AliasAnalysis &AA) {
|
||||||
|
const DataLayout *DL = AA.getDataLayout();
|
||||||
if (StoreInst *SI = dyn_cast<StoreInst>(Inst))
|
if (StoreInst *SI = dyn_cast<StoreInst>(Inst))
|
||||||
return AA.getLocation(SI);
|
return AA.getLocation(SI);
|
||||||
|
|
||||||
@ -202,7 +203,7 @@ getLocForWrite(Instruction *Inst, AliasAnalysis &AA) {
|
|||||||
// If we don't have target data around, an unknown size in Location means
|
// If we don't have target data around, an unknown size in Location means
|
||||||
// that we should use the size of the pointee type. This isn't valid for
|
// that we should use the size of the pointee type. This isn't valid for
|
||||||
// memset/memcpy, which writes more than an i8.
|
// memset/memcpy, which writes more than an i8.
|
||||||
if (Loc.Size == AliasAnalysis::UnknownSize && AA.getDataLayout() == 0)
|
if (Loc.Size == AliasAnalysis::UnknownSize && DL == 0)
|
||||||
return AliasAnalysis::Location();
|
return AliasAnalysis::Location();
|
||||||
return Loc;
|
return Loc;
|
||||||
}
|
}
|
||||||
@ -216,7 +217,7 @@ getLocForWrite(Instruction *Inst, AliasAnalysis &AA) {
|
|||||||
// If we don't have target data around, an unknown size in Location means
|
// If we don't have target data around, an unknown size in Location means
|
||||||
// that we should use the size of the pointee type. This isn't valid for
|
// that we should use the size of the pointee type. This isn't valid for
|
||||||
// init.trampoline, which writes more than an i8.
|
// init.trampoline, which writes more than an i8.
|
||||||
if (AA.getDataLayout() == 0) return AliasAnalysis::Location();
|
if (DL == 0) return AliasAnalysis::Location();
|
||||||
|
|
||||||
// FIXME: We don't know the size of the trampoline, so we can't really
|
// FIXME: We don't know the size of the trampoline, so we can't really
|
||||||
// handle it here.
|
// handle it here.
|
||||||
@ -344,6 +345,7 @@ static OverwriteResult isOverwrite(const AliasAnalysis::Location &Later,
|
|||||||
AliasAnalysis &AA,
|
AliasAnalysis &AA,
|
||||||
int64_t &EarlierOff,
|
int64_t &EarlierOff,
|
||||||
int64_t &LaterOff) {
|
int64_t &LaterOff) {
|
||||||
|
const DataLayout *DL = AA.getDataLayout();
|
||||||
const Value *P1 = Earlier.Ptr->stripPointerCasts();
|
const Value *P1 = Earlier.Ptr->stripPointerCasts();
|
||||||
const Value *P2 = Later.Ptr->stripPointerCasts();
|
const Value *P2 = Later.Ptr->stripPointerCasts();
|
||||||
|
|
||||||
@ -357,8 +359,7 @@ static OverwriteResult isOverwrite(const AliasAnalysis::Location &Later,
|
|||||||
// If we have no DataLayout information around, then the size of the store
|
// If we have no DataLayout information around, then the size of the store
|
||||||
// is inferrable from the pointee type. If they are the same type, then
|
// is inferrable from the pointee type. If they are the same type, then
|
||||||
// we know that the store is safe.
|
// we know that the store is safe.
|
||||||
if (AA.getDataLayout() == 0 &&
|
if (DL == 0 && Later.Ptr->getType() == Earlier.Ptr->getType())
|
||||||
Later.Ptr->getType() == Earlier.Ptr->getType())
|
|
||||||
return OverwriteComplete;
|
return OverwriteComplete;
|
||||||
|
|
||||||
return OverwriteUnknown;
|
return OverwriteUnknown;
|
||||||
@ -372,15 +373,12 @@ static OverwriteResult isOverwrite(const AliasAnalysis::Location &Later,
|
|||||||
// Otherwise, we have to have size information, and the later store has to be
|
// Otherwise, we have to have size information, and the later store has to be
|
||||||
// larger than the earlier one.
|
// larger than the earlier one.
|
||||||
if (Later.Size == AliasAnalysis::UnknownSize ||
|
if (Later.Size == AliasAnalysis::UnknownSize ||
|
||||||
Earlier.Size == AliasAnalysis::UnknownSize ||
|
Earlier.Size == AliasAnalysis::UnknownSize || DL == 0)
|
||||||
AA.getDataLayout() == 0)
|
|
||||||
return OverwriteUnknown;
|
return OverwriteUnknown;
|
||||||
|
|
||||||
// Check to see if the later store is to the entire object (either a global,
|
// Check to see if the later store is to the entire object (either a global,
|
||||||
// an alloca, or a byval/inalloca argument). If so, then it clearly
|
// an alloca, or a byval/inalloca argument). If so, then it clearly
|
||||||
// overwrites any other store to the same object.
|
// overwrites any other store to the same object.
|
||||||
const DataLayout *DL = AA.getDataLayout();
|
|
||||||
|
|
||||||
const Value *UO1 = GetUnderlyingObject(P1, DL),
|
const Value *UO1 = GetUnderlyingObject(P1, DL),
|
||||||
*UO2 = GetUnderlyingObject(P2, DL);
|
*UO2 = GetUnderlyingObject(P2, DL);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user