Re-fix a bug, where I was now being too aggressive.
authorOwen Anderson <resistor@mac.com>
Tue, 29 May 2007 23:26:30 +0000 (23:26 +0000)
committerOwen Anderson <resistor@mac.com>
Tue, 29 May 2007 23:26:30 +0000 (23:26 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37348 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/Scalar/GVNPRE.cpp

index 7f76fa10735f88cd2e0d5be97b2363992aadb1a5..d32939fe9533e2bed8da4ad251bcf29148193f3e 100644 (file)
@@ -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());