aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOwen Anderson <resistor@mac.com>2007-05-29 23:26:30 +0000
committerOwen Anderson <resistor@mac.com>2007-05-29 23:26:30 +0000
commite3072b292ff0333a7c0a03372a1ac745e1317948 (patch)
tree5a59a07cd47004b8f2854c72d007220eb95f68a0
parentcdf8efde6ae62bdca02b088dcfdf647fce10c6f1 (diff)
Re-fix a bug, where I was now being too aggressive.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37348 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/Transforms/Scalar/GVNPRE.cpp6
1 files changed, 5 insertions, 1 deletions
diff --git a/lib/Transforms/Scalar/GVNPRE.cpp b/lib/Transforms/Scalar/GVNPRE.cpp
index 7f76fa1073..d32939fe95 100644
--- a/lib/Transforms/Scalar/GVNPRE.cpp
+++ b/lib/Transforms/Scalar/GVNPRE.cpp
@@ -376,6 +376,8 @@ bool GVNPRE::runOnFunction(Function &F) {
// Second Phase of BuildSets - calculate ANTIC_IN
+ std::set<BasicBlock*> visited;
+
bool changed = true;
unsigned iterations = 0;
while (changed) {
@@ -388,6 +390,8 @@ bool GVNPRE::runOnFunction(Function &F) {
PDI != E; ++PDI) {
BasicBlock* BB = PDI->getBlock();
+ visited.insert(BB);
+
std::set<Expression>& anticIn = anticipatedIn[BB];
std::set<Expression> old (anticIn.begin(), anticIn.end());
@@ -397,7 +401,7 @@ bool GVNPRE::runOnFunction(Function &F) {
for (unsigned i = 0; i < BB->getTerminator()->getNumSuccessors(); ++i) {
BasicBlock* currSucc = BB->getTerminator()->getSuccessor(i);
std::set<Expression> temp;
- if (i == 0)
+ if (visted.find(currSucc) == visited.end())
temp.insert(maximalSet.begin(), maximalSet.end());
else
temp.insert(anticIn.begin(), anticIn.end());