From 96f7b1bf32645065c3222bf62973bb28d2b8eca0 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Wed, 1 Oct 2003 22:27:36 +0000 Subject: [PATCH] Add graph traits specializations for intervals git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@8808 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/Analysis/Interval.h | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) 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