diff options
author | Owen Anderson <resistor@mac.com> | 2007-06-25 18:25:31 +0000 |
---|---|---|
committer | Owen Anderson <resistor@mac.com> | 2007-06-25 18:25:31 +0000 |
commit | 43ca4b48f1b0d22f6807ba790d2a98d6c8b4ce71 (patch) | |
tree | 780be6c121a8e9bc03fd0b3f51ee61b4a15bb225 /llvm/lib/Transforms/Scalar/GVNPRE.cpp | |
parent | 36d4c0750081523561daf167eabfe0066e78522f (diff) | |
download | bcm5719-llvm-43ca4b48f1b0d22f6807ba790d2a98d6c8b4ce71.tar.gz bcm5719-llvm-43ca4b48f1b0d22f6807ba790d2a98d6c8b4ce71.zip |
Use the built-in postorder iterators rather than computing a postorder walk by hand.
llvm-svn: 37721
Diffstat (limited to 'llvm/lib/Transforms/Scalar/GVNPRE.cpp')
-rw-r--r-- | llvm/lib/Transforms/Scalar/GVNPRE.cpp | 38 |
1 files changed, 3 insertions, 35 deletions
diff --git a/llvm/lib/Transforms/Scalar/GVNPRE.cpp b/llvm/lib/Transforms/Scalar/GVNPRE.cpp index e1f4af072f3..67dbabd045e 100644 --- a/llvm/lib/Transforms/Scalar/GVNPRE.cpp +++ b/llvm/lib/Transforms/Scalar/GVNPRE.cpp @@ -27,6 +27,7 @@ #include "llvm/ADT/BitVector.h" #include "llvm/ADT/DenseMap.h" #include "llvm/ADT/DepthFirstIterator.h" +#include "llvm/ADT/PostOrderIterator.h" #include "llvm/ADT/SmallPtrSet.h" #include "llvm/ADT/Statistic.h" #include "llvm/Support/CFG.h" @@ -935,39 +936,6 @@ unsigned GVNPRE::buildsets(Function& F) { // Phase 1, Part 2: calculate ANTIC_IN - DOUT << "Calculating walk\n"; - // Calculate a postorder CFG walk - std::vector<BasicBlock*> walk; - std::vector<BasicBlock*> walkStack; - SmallPtrSet<BasicBlock*, 16> walkVisited; - walkStack.push_back(&F.getEntryBlock()); - walkVisited.insert(&F.getEntryBlock()); - - while (!walkStack.empty()) { - BasicBlock* BB = walkStack.back(); - walkVisited.insert(BB); - - bool inserted = false; - for (unsigned i = 0; i < BB->getTerminator()->getNumSuccessors(); ++i) { - BasicBlock* succ = BB->getTerminator()->getSuccessor(i); - if (walkVisited.count(succ) == 0) { - walkStack.push_back(succ); - inserted = true; - } - } - - if (inserted) - continue; - else { - walk.push_back(BB); - walkStack.pop_back(); - } - } - - DOUT << "Finished calculating walk\n"; - - // Perform the ANTIC_IN calculation - std::set<BasicBlock*> visited; bool changed = true; @@ -977,8 +945,8 @@ unsigned GVNPRE::buildsets(Function& F) { SmallPtrSet<Value*, 32> anticOut; // Top-down walk of the postdominator tree - for (std::vector<BasicBlock*>::iterator BBI = walk.begin(), BBE = walk.end(); - BBI != BBE; ++BBI) { + for (po_iterator<BasicBlock*> BBI = po_begin(&F.getEntryBlock()), + BBE = po_end(&F.getEntryBlock()); BBI != BBE; ++BBI) { BasicBlock* BB = *BBI; if (BB == 0) continue; |