Fix an issue that Chris noticed, where local PRE was not properly instantiating

a new value numbering set after splitting a critical edge.  This increases
the number of instances of PRE on 403.gcc from ~60 to ~570.

llvm-svn: 60393
This commit is contained in:
Owen Anderson 2008-12-02 04:09:22 +00:00
parent 1718fd4375
commit d930420ccf
1 changed files with 7 additions and 2 deletions

View File

@ -1299,6 +1299,7 @@ bool GVN::performPRE(Function& F) {
if (isCriticalEdge(PREPred->getTerminator(), succNum)) {
toSplit.push_back(std::make_pair(PREPred->getTerminator(), succNum));
Changed = true;
continue;
}
@ -1361,10 +1362,14 @@ bool GVN::performPRE(Function& F) {
}
for (SmallVector<std::pair<TerminatorInst*, unsigned>, 4>::iterator
I = toSplit.begin(), E = toSplit.end(); I != E; ++I)
I = toSplit.begin(), E = toSplit.end(); I != E; ++I) {
SplitCriticalEdge(I->first, I->second, this);
BasicBlock* NewBlock = I->first->getSuccessor(I->second);
localAvail[NewBlock] =
new ValueNumberScope(localAvail[I->first->getParent()]);
}
return Changed || toSplit.size();
return Changed;
}
// iterateOnFunction - Executes one iteration of GVN