diff options
author | Justin Lebar <jlebar@google.com> | 2016-11-22 23:14:11 +0000 |
---|---|---|
committer | Justin Lebar <jlebar@google.com> | 2016-11-22 23:14:11 +0000 |
commit | 6c0f25aec6056b04c442a533bfac00db1e09a42b (patch) | |
tree | ad119e2ab5b8e30ce7236a96485115db6f49ee9b | |
parent | 23aaf60277b540c17d438ddd1cf671b1a1e252c3 (diff) | |
download | bcm5719-llvm-6c0f25aec6056b04c442a533bfac00db1e09a42b.tar.gz bcm5719-llvm-6c0f25aec6056b04c442a533bfac00db1e09a42b.zip |
[StructurizeCFG] Refactor OrderNodes.
Summary:
No need to copy the RPOT vector before using it. Switch from std::map
to SmallDenseMap. Get rid of an unused variable (TempVisited). Get rid
of a typedef, RNVector, which is now used only once.
Differential Revision: https://reviews.llvm.org/D26997
llvm-svn: 287721
-rw-r--r-- | llvm/lib/Transforms/Scalar/StructurizeCFG.cpp | 18 |
1 files changed, 6 insertions, 12 deletions
diff --git a/llvm/lib/Transforms/Scalar/StructurizeCFG.cpp b/llvm/lib/Transforms/Scalar/StructurizeCFG.cpp index d6ad0831f79..1d93374be9e 100644 --- a/llvm/lib/Transforms/Scalar/StructurizeCFG.cpp +++ b/llvm/lib/Transforms/Scalar/StructurizeCFG.cpp @@ -175,7 +175,7 @@ class StructurizeCFG : public RegionPass { DominatorTree *DT; LoopInfo *LI; - RNVector Order; + SmallVector<RegionNode *, 8> Order; BBSet Visited; BBPhiMap DeletedPhis; @@ -288,17 +288,13 @@ bool StructurizeCFG::doInitialization(Region *R, RGPassManager &RGM) { /// \brief Build up the general order of nodes void StructurizeCFG::orderNodes() { - RNVector TempOrder; ReversePostOrderTraversal<Region*> RPOT(ParentRegion); - TempOrder.append(RPOT.begin(), RPOT.end()); - - std::map<Loop*, unsigned> LoopBlocks; - + SmallDenseMap<Loop*, unsigned, 8> LoopBlocks; // The reverse post-order traversal of the list gives us an ordering close // to what we want. The only problem with it is that sometimes backedges // for outer loops will be visited before backedges for inner loops. - for (RegionNode *RN : TempOrder) { + for (RegionNode *RN : RPOT) { BasicBlock *BB = RN->getEntry(); Loop *Loop = LI->getLoopFor(BB); ++LoopBlocks[Loop]; @@ -306,8 +302,7 @@ void StructurizeCFG::orderNodes() { unsigned CurrentLoopDepth = 0; Loop *CurrentLoop = nullptr; - BBSet TempVisited; - for (RNVector::iterator I = TempOrder.begin(), E = TempOrder.end(); I != E; ++I) { + for (auto I = RPOT.begin(), E = RPOT.end(); I != E; ++I) { BasicBlock *BB = (*I)->getEntry(); unsigned LoopDepth = LI->getLoopDepth(BB); @@ -318,7 +313,7 @@ void StructurizeCFG::orderNodes() { // Make sure we have visited all blocks in this loop before moving back to // the outer loop. - RNVector::iterator LoopI = I; + auto LoopI = I; while (unsigned &BlockCount = LoopBlocks[CurrentLoop]) { LoopI++; BasicBlock *LoopBB = (*LoopI)->getEntry(); @@ -330,9 +325,8 @@ void StructurizeCFG::orderNodes() { } CurrentLoop = LI->getLoopFor(BB); - if (CurrentLoop) { + if (CurrentLoop) LoopBlocks[CurrentLoop]--; - } CurrentLoopDepth = LoopDepth; Order.push_back(*I); |