Make comments above APIs reflect what they should do.
[oota-llvm.git] / include / llvm / Analysis / IntervalIterator.h
index 55413d4ada494131e4b44b2513119e349834c291..091959f25fa0e43915e1f53e394281597f5649da 100644 (file)
@@ -1,4 +1,11 @@
-//===- IntervalIterator.h - Interval Iterator Declaration --------*- C++ -*--=//
+//===- IntervalIterator.h - Interval Iterator Declaration -------*- C++ -*-===//
+// 
+//                     The LLVM Compiler Infrastructure
+//
+// This file was developed by the LLVM research group and is distributed under
+// the University of Illinois Open Source License. See LICENSE.TXT for details.
+// 
+//===----------------------------------------------------------------------===//
 //
 // This file defines an iterator that enumerates the intervals in a control flow
 // graph of some sort.  This iterator is parametric, allowing iterator over the
 
 #include "llvm/Analysis/IntervalPartition.h"
 #include "llvm/Function.h"
-#include "llvm/BasicBlock.h"
 #include "llvm/Support/CFG.h"
 #include <stack>
 #include <set>
 #include <algorithm>
 
-namespace cfg {
+namespace llvm {
 
 // getNodeHeader - Given a source graph node and the source graph, return the 
 // BasicBlock that is the header node.  This is the opposite of
@@ -79,7 +85,8 @@ inline void addNodeToInterval(Interval *Int, Interval *I) {
 
 
 
-template<class NodeTy, class OrigContainer_t>
+template<class NodeTy, class OrigContainer_t, class GT = GraphTraits<NodeTy*>,
+         class IGT = GraphTraits<Inverse<NodeTy*> > >
 class IntervalIterator {
   std::stack<std::pair<Interval*, typename Interval::succ_iterator> > IntStack;
   std::set<BasicBlock*> Visited;
@@ -95,7 +102,7 @@ public:
   IntervalIterator() {} // End iterator, empty stack
   IntervalIterator(Function *M, bool OwnMemory) : IOwnMem(OwnMemory) {
     OrigContainer = M;
-    if (!ProcessInterval(M->front())) {
+    if (!ProcessInterval(&M->front())) {
       assert(0 && "ProcessInterval should never fail for first interval!");
     }
   }
@@ -136,7 +143,7 @@ public:
        if (Done) return *this;                 // Found a new interval! Use it!
       }
 
-      // Free interval memory... if neccesary
+      // Free interval memory... if necessary
       if (IOwnMem) delete IntStack.top().first;
 
       // We ran out of successors for this interval... pop off the stack
@@ -166,8 +173,8 @@ private:
     Visited.insert(Header);   // The header has now been visited!
 
     // Check all of our successors to see if they are in the interval...
-    for (typename NodeTy::succ_iterator I = succ_begin(Node),
-                                        E = succ_end(Node); I != E; ++I)
+    for (typename GT::ChildIteratorType I = GT::child_begin(Node),
+           E = GT::child_end(Node); I != E; ++I)
       ProcessNode(Int, getSourceGraphNode(OrigContainer, *I));
 
     IntStack.push(make_pair(Int, succ_begin(Int)));
@@ -197,8 +204,8 @@ private:
          Int->Successors.push_back(NodeHeader);
       }
     } else {                             // Otherwise, not in interval yet
-      for (typename NodeTy::pred_iterator I = pred_begin(Node), 
-                                         E = pred_end(Node); I != E; ++I) {
+      for (typename IGT::ChildIteratorType I = IGT::child_begin(Node), 
+             E = IGT::child_end(Node); I != E; ++I) {
        if (!Int->contains(*I)) {        // If pred not in interval, we can't be
          if (!Int->isSuccessor(NodeHeader)) // Add only if not already in set
            Int->Successors.push_back(NodeHeader);
@@ -220,8 +227,8 @@ private:
     
       // Now that we have discovered that Node is in the interval, perhaps some
       // of its successors are as well?
-      for (typename NodeTy::succ_iterator It = succ_begin(Node),
-            End = succ_end(Node); It != End; ++It)
+      for (typename GT::ChildIteratorType It = GT::child_begin(Node),
+            End = GT::child_end(Node); It != End; ++It)
        ProcessNode(Int, getSourceGraphNode(OrigContainer, *It));
     }
   }
@@ -248,6 +255,6 @@ inline interval_part_interval_iterator intervals_end(IntervalPartition &IP) {
   return interval_part_interval_iterator();
 }
 
-}    // End namespace cfg
+} // End llvm namespace
 
 #endif