Use graph traits to perform generic interval construction
authorChris Lattner <sabre@nondot.org>
Wed, 1 Oct 2003 22:28:00 +0000 (22:28 +0000)
committerChris Lattner <sabre@nondot.org>
Wed, 1 Oct 2003 22:28:00 +0000 (22:28 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@8809 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Analysis/IntervalIterator.h

index 0943eda703791aece61b88e536cc044035f9e213..2b155584683e9dfc59c26847cd3d8bff4528068f 100644 (file)
@@ -76,7 +76,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;
@@ -163,8 +164,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)));
@@ -194,8 +195,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);
@@ -217,8 +218,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));
     }
   }