diff options
| -rw-r--r-- | llvm/include/llvm/CodeGen/MachineBasicBlock.h | 70 | ||||
| -rw-r--r-- | llvm/include/llvm/Support/CFG.h | 124 | 
2 files changed, 70 insertions, 124 deletions
diff --git a/llvm/include/llvm/CodeGen/MachineBasicBlock.h b/llvm/include/llvm/CodeGen/MachineBasicBlock.h index df2a15a05f4..aadc835c25a 100644 --- a/llvm/include/llvm/CodeGen/MachineBasicBlock.h +++ b/llvm/include/llvm/CodeGen/MachineBasicBlock.h @@ -15,6 +15,7 @@  #define LLVM_CODEGEN_MACHINEBASICBLOCK_H  #include "llvm/CodeGen/MachineInstr.h" +#include "Support/GraphTraits.h"  #include "Support/ilist"  #include <iosfwd> @@ -197,6 +198,75 @@ private:   // Methods used to maintain doubly linked list of blocks...    }  }; + +//===--------------------------------------------------------------------===// +// GraphTraits specializations for machine basic block graphs (machine-CFGs) +//===--------------------------------------------------------------------===// + +// Provide specializations of GraphTraits to be able to treat a +// MachineFunction as a graph of MachineBasicBlocks... +// + +template <> struct GraphTraits<MachineBasicBlock *> { +  typedef MachineBasicBlock NodeType; +  typedef MachineBasicBlock::succ_iterator ChildIteratorType; + +  static NodeType *getEntryNode(MachineBasicBlock *BB) { return BB; } +  static inline ChildIteratorType child_begin(NodeType *N) {  +    return N->succ_begin(); +  } +  static inline ChildIteratorType child_end(NodeType *N) {  +    return N->succ_end(); +  } +}; + +template <> struct GraphTraits<const MachineBasicBlock *> { +  typedef const MachineBasicBlock NodeType; +  typedef MachineBasicBlock::const_succ_iterator ChildIteratorType; + +  static NodeType *getEntryNode(const MachineBasicBlock *BB) { return BB; } +  static inline ChildIteratorType child_begin(NodeType *N) {  +    return N->succ_begin(); +  } +  static inline ChildIteratorType child_end(NodeType *N) {  +    return N->succ_end(); +  } +}; + +// Provide specializations of GraphTraits to be able to treat a +// MachineFunction as a graph of MachineBasicBlocks... and to walk it +// in inverse order.  Inverse order for a function is considered +// to be when traversing the predecessor edges of a MBB +// instead of the successor edges. +// +template <> struct GraphTraits<Inverse<MachineBasicBlock*> > { +  typedef MachineBasicBlock NodeType; +  typedef MachineBasicBlock::pred_iterator ChildIteratorType; +  static NodeType *getEntryNode(Inverse<MachineBasicBlock *> G) { +    return G.Graph; +  } +  static inline ChildIteratorType child_begin(NodeType *N) {  +    return N->pred_begin(); +  } +  static inline ChildIteratorType child_end(NodeType *N) {  +    return N->pred_end(); +  } +}; + +template <> struct GraphTraits<Inverse<const MachineBasicBlock*> > { +  typedef const MachineBasicBlock NodeType; +  typedef MachineBasicBlock::const_pred_iterator ChildIteratorType; +  static NodeType *getEntryNode(Inverse<const MachineBasicBlock*> G) { +    return G.Graph;  +  } +  static inline ChildIteratorType child_begin(NodeType *N) {  +    return N->pred_begin(); +  } +  static inline ChildIteratorType child_end(NodeType *N) {  +    return N->pred_end(); +  } +}; +  } // End llvm namespace  #endif diff --git a/llvm/include/llvm/Support/CFG.h b/llvm/include/llvm/Support/CFG.h index 6b239b5df7c..bbe1701da16 100644 --- a/llvm/include/llvm/Support/CFG.h +++ b/llvm/include/llvm/Support/CFG.h @@ -17,7 +17,6 @@  #include "Support/GraphTraits.h"  #include "llvm/Function.h" -#include "llvm/CodeGen/MachineFunction.h"  #include "llvm/InstrTypes.h"  #include "Support/iterator" @@ -267,129 +266,6 @@ template <> struct GraphTraits<Inverse<const Function*> > :    }  }; -//===--------------------------------------------------------------------===// -// GraphTraits specializations for machine basic block graphs (machine-CFGs) -//===--------------------------------------------------------------------===// - -// Provide specializations of GraphTraits to be able to treat a -// MachineFunction as a graph of MachineBasicBlocks... -// - -template <> struct GraphTraits<MachineBasicBlock *> { -  typedef MachineBasicBlock NodeType; -  typedef MachineBasicBlock::succ_iterator ChildIteratorType; - -  static NodeType *getEntryNode(MachineBasicBlock *BB) { return BB; } -  static inline ChildIteratorType child_begin(NodeType *N) {  -    return N->succ_begin(); -  } -  static inline ChildIteratorType child_end(NodeType *N) {  -    return N->succ_end(); -  } -}; - -template <> struct GraphTraits<const MachineBasicBlock *> { -  typedef const MachineBasicBlock NodeType; -  typedef MachineBasicBlock::const_succ_iterator ChildIteratorType; - -  static NodeType *getEntryNode(const MachineBasicBlock *BB) { return BB; } -  static inline ChildIteratorType child_begin(NodeType *N) {  -    return N->succ_begin(); -  } -  static inline ChildIteratorType child_end(NodeType *N) {  -    return N->succ_end(); -  } -}; - -// Provide specializations of GraphTraits to be able to treat a -// MachineFunction as a graph of MachineBasicBlocks... and to walk it -// in inverse order.  Inverse order for a function is considered -// to be when traversing the predecessor edges of a MBB -// instead of the successor edges. -// -template <> struct GraphTraits<Inverse<MachineBasicBlock*> > { -  typedef MachineBasicBlock NodeType; -  typedef MachineBasicBlock::pred_iterator ChildIteratorType; -  static NodeType *getEntryNode(Inverse<MachineBasicBlock *> G) { -    return G.Graph; -  } -  static inline ChildIteratorType child_begin(NodeType *N) {  -    return N->pred_begin(); -  } -  static inline ChildIteratorType child_end(NodeType *N) {  -    return N->pred_end(); -  } -}; - -template <> struct GraphTraits<Inverse<const MachineBasicBlock*> > { -  typedef const MachineBasicBlock NodeType; -  typedef MachineBasicBlock::const_pred_iterator ChildIteratorType; -  static NodeType *getEntryNode(Inverse<const MachineBasicBlock*> G) { -    return G.Graph;  -  } -  static inline ChildIteratorType child_begin(NodeType *N) {  -    return N->pred_begin(); -  } -  static inline ChildIteratorType child_end(NodeType *N) {  -    return N->pred_end(); -  } -}; - - -//===--------------------------------------------------------------------===// -// GraphTraits specializations for MachineFunction bb graphs (machine-CFGs) -//===--------------------------------------------------------------------===// - -// Provide specializations of GraphTraits to be able to treat a -// MachineFunction as a graph of MachineBasicBlocks... these are the -// same as the MachineBasicBlock iterators, except that the root node -// is implicitly the first node of the MachineFunction. -// -template <> struct GraphTraits<MachineFunction*> : -  public GraphTraits<MachineBasicBlock*> { -  static NodeType *getEntryNode(MachineFunction *F) { -    return &F->front(); -  } -  // nodes_iterator/begin/end - Allow iteration over all nodes in the graph -  typedef MachineFunction::iterator nodes_iterator; -  static nodes_iterator nodes_begin(MachineFunction *F) { return F->begin(); } -  static nodes_iterator nodes_end  (MachineFunction *F) { return F->end(); } -}; -template <> struct GraphTraits<const MachineFunction*> : -  public GraphTraits<const MachineBasicBlock*> { -  static NodeType *getEntryNode(const MachineFunction *F) { -    return &F->front(); -  } -  // nodes_iterator/begin/end - Allow iteration over all nodes in the graph -  typedef MachineFunction::const_iterator nodes_iterator; -  static nodes_iterator nodes_begin(const MachineFunction *F) { -    return F->begin(); -  } -  static nodes_iterator nodes_end  (const MachineFunction *F) { -    return F->end(); -  } -}; - - -// Provide specializations of GraphTraits to be able to treat a -// MachineFunction as a graph of MachineBasicBlocks... and to walk it -// in inverse order.  Inverse order for a MachineFunction is considered -// to be when traversing the predecessor edges of a MBB instead of the -// successor edges. -// -template <> struct GraphTraits<Inverse<MachineFunction*> > : -  public GraphTraits<Inverse<MachineBasicBlock*> > { -  static NodeType *getEntryNode(Inverse<MachineFunction*> G) { -    return &G.Graph->front(); -  } -}; -template <> struct GraphTraits<Inverse<const MachineFunction*> > : -  public GraphTraits<Inverse<const MachineBasicBlock*> > { -  static NodeType *getEntryNode(Inverse<const MachineFunction *> G) { -    return &G.Graph->front(); -  } -}; -  } // End llvm namespace  #endif  | 

