mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-02 07:32:52 +00:00
Stop using memdep for a check that didn't really make sense with memdep. In terms of specific issues, using memdep here checks irrelevant instructions and won't work properly once we start returning "unknown" more aggressively from memdep.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@133035 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
bf188aeae7
commit
5d40ef2b1d
@ -487,7 +487,8 @@ bool MemCpyOpt::processStore(StoreInst *SI, BasicBlock::iterator &BBI) {
|
||||
// happen to be using a load-store pair to implement it, rather than
|
||||
// a memcpy.
|
||||
if (LoadInst *LI = dyn_cast<LoadInst>(SI->getOperand(0))) {
|
||||
if (!LI->isVolatile() && LI->hasOneUse()) {
|
||||
if (!LI->isVolatile() && LI->hasOneUse() &&
|
||||
LI->getParent() == SI->getParent()) {
|
||||
MemDepResult ldep = MD->getDependency(LI);
|
||||
CallInst *C = 0;
|
||||
if (ldep.isClobber() && !isa<MemCpyInst>(ldep.getInst()))
|
||||
@ -496,17 +497,14 @@ bool MemCpyOpt::processStore(StoreInst *SI, BasicBlock::iterator &BBI) {
|
||||
if (C) {
|
||||
// Check that nothing touches the dest of the "copy" between
|
||||
// the call and the store.
|
||||
MemDepResult sdep = MD->getDependency(SI);
|
||||
if (!sdep.isNonLocal() && !sdep.isUnknown()) {
|
||||
bool FoundCall = false;
|
||||
for (BasicBlock::iterator I = SI, E = sdep.getInst(); I != E; --I) {
|
||||
if (&*I == C) {
|
||||
FoundCall = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!FoundCall)
|
||||
AliasAnalysis &AA = getAnalysis<AliasAnalysis>();
|
||||
AliasAnalysis::Location StoreLoc = AA.getLocation(SI);
|
||||
for (BasicBlock::iterator I = --BasicBlock::iterator(SI),
|
||||
E = C; I != E; --I) {
|
||||
if (AA.getModRefInfo(&*I, StoreLoc) != AliasAnalysis::NoModRef) {
|
||||
C = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user