Add graph traits specializations for loop nesting information...
authorChris Lattner <sabre@nondot.org>
Fri, 28 Feb 2003 03:05:15 +0000 (03:05 +0000)
committerChris Lattner <sabre@nondot.org>
Fri, 28 Feb 2003 03:05:15 +0000 (03:05 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@5666 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Analysis/LoopInfo.h

index 6b96625c63400878f5394cfdfaab81a961e124bf..a90296599a7cf34ffad17a13e2b6ad72930f3ad7 100644 (file)
@@ -19,6 +19,7 @@
 #define LLVM_ANALYSIS_LOOP_INFO_H
 
 #include "llvm/Pass.h"
+#include "Support/GraphTraits.h"
 #include <set>
 
 class DominatorSet;
@@ -186,4 +187,31 @@ private:
 static IncludeFile
 LOOP_INFO_INCLUDE_FILE((void*)&LoopInfo::stub);
 
+// Allow clients to walk the list of nested loops...
+template <> struct GraphTraits<const Loop*> {
+  typedef const Loop NodeType;
+  typedef std::vector<Loop*>::const_iterator ChildIteratorType;
+
+  static NodeType *getEntryNode(const Loop *L) { return L; }
+  static inline ChildIteratorType child_begin(NodeType *N) { 
+    return N->getSubLoops().begin();
+  }
+  static inline ChildIteratorType child_end(NodeType *N) { 
+    return N->getSubLoops().end();
+  }
+};
+
+template <> struct GraphTraits<Loop*> {
+  typedef Loop NodeType;
+  typedef std::vector<Loop*>::const_iterator ChildIteratorType;
+
+  static NodeType *getEntryNode(Loop *L) { return L; }
+  static inline ChildIteratorType child_begin(NodeType *N) { 
+    return N->getSubLoops().begin();
+  }
+  static inline ChildIteratorType child_end(NodeType *N) { 
+    return N->getSubLoops().end();
+  }
+};
+
 #endif