Add a flag to mark a dirty cache entry. This is not yet used, but will eventually
[oota-llvm.git] / include / llvm / Analysis / LoopInfo.h
index 526da53f63b247bae54103a5ec05b87351cf860e..acb5fd6c7a4a23b022574fbdc4e0549ef1dd5e05 100644 (file)
 
 #include "llvm/Pass.h"
 #include "llvm/ADT/GraphTraits.h"
+#include "llvm/ADT/SmallVector.h"
 
 namespace llvm {
 
-class ETForest;
+class DominatorTree;
 class LoopInfo;
 class PHINode;
 class Instruction;
@@ -111,18 +112,18 @@ public:
   /// outside of the loop.  These are the blocks _inside of the current loop_
   /// which branch out.  The returned list is always unique.
   ///
-  void getExitingBlocks(std::vector<BasicBlock*> &Blocks) const;
+  void getExitingBlocks(SmallVectorImpl<BasicBlock *> &Blocks) const;
 
   /// getExitBlocks - Return all of the successor blocks of this loop.  These
   /// are the blocks _outside of the current loop_ which are branched to.
   ///
-  void getExitBlocks(std::vector<BasicBlock*> &Blocks) const;
+  void getExitBlocks(SmallVectorImpl<BasicBlock* > &Blocks) const;
 
   /// getUniqueExitBlocks - Return all unique successor blocks of this loop. 
   /// These are the blocks _outside of the current loop_ which are branched to.
   /// This assumes that loop is in canonical form.
   ///
-  void getUniqueExitBlocks(std::vector<BasicBlock*> &ExitBlocks) const;
+  void getUniqueExitBlocks(SmallVectorImpl<BasicBlock*> &ExitBlocks) const;
 
   /// getLoopPreheader - If there is a preheader for this loop, return it.  A
   /// loop has a preheader if there is only one edge to the header of the loop
@@ -217,6 +218,9 @@ public:
   /// the mapping in the LoopInfo class.
   void removeBlockFromLoop(BasicBlock *BB);
 
+  /// verifyLoop - Verify loop structure
+  void verifyLoop() const;
+
   void print(std::ostream &O, unsigned Depth = 0) const;
   void print(std::ostream *O, unsigned Depth = 0) const {
     if (O) print(*O, Depth);
@@ -243,7 +247,7 @@ class LoopInfo : public FunctionPass {
 public:
   static char ID; // Pass identification, replacement for typeid
 
-  LoopInfo() : FunctionPass((intptr_t)&ID) {}
+  LoopInfo() : FunctionPass(intptr_t(&ID)) {}
   ~LoopInfo() { releaseMemory(); }
 
   /// iterator/begin/end - The interface to the top-level loops in the current
@@ -321,8 +325,8 @@ public:
   void removeBlock(BasicBlock *BB);
 
 private:
-  void Calculate(ETForest &EF);
-  Loop *ConsiderForLoop(BasicBlock *BB, ETForest &EF);
+  void Calculate(DominatorTree &DT);
+  Loop *ConsiderForLoop(BasicBlock *BB, DominatorTree &DT);
   void MoveSiblingLoopInto(Loop *NewChild, Loop *NewParent);
   void InsertLoopInto(Loop *L, Loop *Parent);
 };