diff --git a/include/llvm/Analysis/Interval.h b/include/llvm/Analysis/Interval.h index 3974c728716..86965df90d9 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 #include @@ -111,4 +112,31 @@ inline Interval::pred_iterator pred_end(Interval *I) { return I->Predecessors.end(); } +template <> struct GraphTraits { + 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 > { + typedef Interval NodeType; + typedef Interval::pred_iterator ChildIteratorType; + static NodeType *getEntryNode(Inverse 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