[llvm-commits] [llvm] r60673 - /llvm/trunk/lib/Analysis/MemoryDependenceAnalysis.cpp
Chris Lattner
sabre at nondot.org
Sun Dec 7 10:42:51 PST 2008
Author: lattner
Date: Sun Dec 7 12:42:51 2008
New Revision: 60673
URL: http://llvm.org/viewvc/llvm-project?rev=60673&view=rev
Log:
factor some code better.
Modified:
llvm/trunk/lib/Analysis/MemoryDependenceAnalysis.cpp
Modified: llvm/trunk/lib/Analysis/MemoryDependenceAnalysis.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/MemoryDependenceAnalysis.cpp?rev=60673&r1=60672&r2=60673&view=diff
==============================================================================
--- llvm/trunk/lib/Analysis/MemoryDependenceAnalysis.cpp (original)
+++ llvm/trunk/lib/Analysis/MemoryDependenceAnalysis.cpp Sun Dec 7 12:42:51 2008
@@ -647,6 +647,16 @@
// Loop over all of the things that depend on the instruction we're removing.
//
SmallVector<std::pair<Instruction*, Instruction*>, 8> ReverseDepsToAdd;
+
+ // If we find RemInst as a clobber or Def in any of the maps for other values,
+ // we need to replace its entry with a dirty version of the instruction after
+ // it. If RemInst is a terminator, we use a null dirty value.
+ //
+ // Using a dirty version of the instruction after RemInst saves having to scan
+ // the entire block to get to this point.
+ MemDepResult NewDirtyVal;
+ if (!RemInst->isTerminator())
+ NewDirtyVal = MemDepResult::getDirty(++BasicBlock::iterator(RemInst));
ReverseDepMapType::iterator ReverseDepIt = ReverseLocalDeps.find(RemInst);
if (ReverseDepIt != ReverseLocalDeps.end()) {
@@ -655,22 +665,18 @@
assert(!ReverseDeps.empty() && !isa<TerminatorInst>(RemInst) &&
"Nothing can locally depend on a terminator");
- // Anything that was locally dependent on RemInst is now going to be
- // dependent on the instruction after RemInst. It will have the dirty flag
- // set so it will rescan. This saves having to scan the entire block to get
- // to this point.
- Instruction *NewDepInst = ++BasicBlock::iterator(RemInst);
-
for (SmallPtrSet<Instruction*, 4>::iterator I = ReverseDeps.begin(),
E = ReverseDeps.end(); I != E; ++I) {
Instruction *InstDependingOnRemInst = *I;
assert(InstDependingOnRemInst != RemInst &&
"Already removed our local dep info");
- LocalDeps[InstDependingOnRemInst] = MemDepResult::getDirty(NewDepInst);
+ LocalDeps[InstDependingOnRemInst] = NewDirtyVal;
// Make sure to remember that new things depend on NewDepInst.
- ReverseDepsToAdd.push_back(std::make_pair(NewDepInst,
+ assert(NewDirtyVal.getInst() && "There is no way something else can have "
+ "a local dep on this if it is a terminator!");
+ ReverseDepsToAdd.push_back(std::make_pair(NewDirtyVal.getInst(),
InstDependingOnRemInst));
}
@@ -701,12 +707,10 @@
if (DI->second.getInst() != RemInst) continue;
// Convert to a dirty entry for the subsequent instruction.
- Instruction *NextI = 0;
- if (!RemInst->isTerminator()) {
- NextI = ++BasicBlock::iterator(RemInst);
+ DI->second = NewDirtyVal;
+
+ if (Instruction *NextI = NewDirtyVal.getInst())
ReverseDepsToAdd.push_back(std::make_pair(NextI, *I));
- }
- DI->second = MemDepResult::getDirty(NextI);
}
}
@@ -737,10 +741,6 @@
NonLocalDepInfo &NLPDI = NonLocalPointerDeps[P];
- MemDepResult NewDirtyVal;
- if (!RemInst->isTerminator())
- NewDirtyVal = MemDepResult::getDirty(++BasicBlock::iterator(RemInst));
-
// Update any entries for RemInst to use the instruction after it.
for (NonLocalDepInfo::iterator DI = NLPDI.begin(), DE = NLPDI.end();
DI != DE; ++DI) {
More information about the llvm-commits
mailing list