diff options
-rw-r--r-- | include/llvm/Analysis/Interval.h | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/include/llvm/Analysis/Interval.h b/include/llvm/Analysis/Interval.h index 3974c72871..86965df90d 100644 --- a/include/llvm/Analysis/Interval.h +++ b/include/llvm/Analysis/Interval.h @@ -13,6 +13,7 @@ #ifndef LLVM_INTERVAL_H #define LLVM_INTERVAL_H +#include "Support/GraphTraits.h" #include <vector> #include <iosfwd> @@ -111,4 +112,31 @@ inline Interval::pred_iterator pred_end(Interval *I) { return I->Predecessors.end(); } +template <> struct GraphTraits<Interval*> { + typedef Interval NodeType; + typedef Interval::succ_iterator ChildIteratorType; + + static NodeType *getEntryNode(Interval *I) { return I; } + + // nodes_iterator/begin/end - Allow iteration over all nodes in the graph + static inline ChildIteratorType child_begin(NodeType *N) { + return succ_begin(N); + } + static inline ChildIteratorType child_end(NodeType *N) { + return succ_end(N); + } +}; + +template <> struct GraphTraits<Inverse<Interval*> > { + typedef Interval NodeType; + typedef Interval::pred_iterator ChildIteratorType; + static NodeType *getEntryNode(Inverse<Interval *> G) { return G.Graph; } + static inline ChildIteratorType child_begin(NodeType *N) { + return pred_begin(N); + } + static inline ChildIteratorType child_end(NodeType *N) { + return pred_end(N); + } +}; + #endif |