Cleanup. Added LoopBlocksDFS::perform for simple clients.
authorAndrew Trick <atrick@apple.com>
Wed, 10 Aug 2011 01:59:05 +0000 (01:59 +0000)
committerAndrew Trick <atrick@apple.com>
Wed, 10 Aug 2011 01:59:05 +0000 (01:59 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137195 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Analysis/LoopIterator.h
lib/Analysis/LoopInfo.cpp
lib/Transforms/Utils/LoopUnroll.cpp

index 2797e67b0967f3fa9de2310faec80fdae25f6d40..a8221f48a3e6143f148df26b2f1bec313a0ead5a 100644 (file)
@@ -61,6 +61,9 @@ public:
 
   Loop *getLoop() const { return L; }
 
+  /// Traverse the loop blocks and store the DFS result.
+  void perform(LoopInfo *LI);
+
   /// Return true if postorder numbers are assigned to all loop blocks.
   bool isComplete() const { return PostBlocks.size() == L->getNumBlocks(); }
 
index cfe71d18a4fee843afd29210b0199e4765ec7f3b..528b3cf87b603e66b616528b86b7b52e58c31a61 100644 (file)
@@ -18,6 +18,7 @@
 #include "llvm/Constants.h"
 #include "llvm/Instructions.h"
 #include "llvm/Analysis/Dominators.h"
+#include "llvm/Analysis/LoopIterator.h"
 #include "llvm/Assembly/Writer.h"
 #include "llvm/Support/CFG.h"
 #include "llvm/Support/CommandLine.h"
@@ -417,3 +418,15 @@ void LoopInfo::print(raw_ostream &OS, const Module*) const {
   LI.print(OS);
 }
 
+//===----------------------------------------------------------------------===//
+// LoopBlocksDFS implementation
+//
+
+/// Traverse the loop blocks and store the DFS result.
+/// Useful for clients that just want the final DFS result and don't need to
+/// visit blocks during the initial traversal.
+void LoopBlocksDFS::perform(LoopInfo *LI) {
+  LoopBlocksTraversal Traversal(*this, LI);
+  for (LoopBlocksTraversal::POTIterator POI = Traversal.begin(),
+         POE = Traversal.end(); POI != POE; ++POI) ;
+}
index f17098fd39dd48a3e76923295cf13322bab41919..6b2f9efe15014b2fcba4c32b0a3ac2609360e0d8 100644 (file)
@@ -230,13 +230,8 @@ bool llvm::UnrollLoop(Loop *L, unsigned Count, unsigned TripCount,
   // reverse postorder so that LastValueMap contains the correct value at each
   // exit.
   LoopBlocksDFS DFS(L);
-  {
-    // Traverse the loop blocks using depth-first search to record RPO numbers
-    // for each block in the DFS result.
-    LoopBlocksTraversal Traversal(DFS, LI);
-    for (LoopBlocksTraversal::POTIterator POI = Traversal.begin(),
-           POE = Traversal.end(); POI != POE; ++POI);
-  }
+  DFS.perform(LI);
+
   // Stash the DFS iterators before adding blocks to the loop.
   LoopBlocksDFS::RPOIterator BlockBegin = DFS.beginRPO();
   LoopBlocksDFS::RPOIterator BlockEnd = DFS.endRPO();