diff --git a/include/llvm/CodeGen/SchedGraphCommon.h b/include/llvm/CodeGen/SchedGraphCommon.h index a422d9ae0d1..58bfc7d95a2 100644 --- a/include/llvm/CodeGen/SchedGraphCommon.h +++ b/include/llvm/CodeGen/SchedGraphCommon.h @@ -16,6 +16,7 @@ #define LLVM_CODEGEN_SCHEDGRAPHCOMMON_H #include "llvm/Value.h" +#include "Support/iterator" #include namespace llvm { @@ -81,6 +82,8 @@ protected: inline SchedGraphNodeCommon(unsigned Id, int index) : ID(Id), latency(0), origIndexInBB(index) {} + inline SchedGraphNodeCommon(unsigned Id, int late, int index) : ID(Id), latency(late), origIndexInBB(index) {} + virtual ~SchedGraphNodeCommon(); //Functions to add and remove edges @@ -88,6 +91,7 @@ protected: inline void addOutEdge(SchedGraphEdge* edge) { outEdges.push_back(edge); } void removeInEdge(const SchedGraphEdge* edge); void removeOutEdge(const SchedGraphEdge* edge); + }; // ostream << operator for SchedGraphNode class @@ -219,6 +223,69 @@ public: ~SchedGraphCommon(); }; + +//********************** Sched Graph Iterators *****************************/ + +// Ok to make it a template because it shd get instantiated at most twice: +// for and +// for . +// +template +class SGPredIterator: public bidirectional_iterator<_NodeType, ptrdiff_t> { +protected: + _EdgeIter oi; +public: + typedef SGPredIterator<_NodeType, _EdgeType, _EdgeIter> _Self; + + inline SGPredIterator(_EdgeIter startEdge) : oi(startEdge) {} + + inline bool operator==(const _Self& x) const { return oi == x.oi; } + inline bool operator!=(const _Self& x) const { return !operator==(x); } + + // operator*() differs for pred or succ iterator + inline _NodeType* operator*() const { return (_NodeType*)(*oi)->getSrc(); } + inline _NodeType* operator->() const { return operator*(); } + + inline _EdgeType* getEdge() const { return *(oi); } + + inline _Self &operator++() { ++oi; return *this; } // Preincrement + inline _Self operator++(int) { // Postincrement + _Self tmp(*this); ++*this; return tmp; + } + + inline _Self &operator--() { --oi; return *this; } // Predecrement + inline _Self operator--(int) { // Postdecrement + _Self tmp = *this; --*this; return tmp; + } +}; + +template +class SGSuccIterator : public bidirectional_iterator<_NodeType, ptrdiff_t> { +protected: + _EdgeIter oi; +public: + typedef SGSuccIterator<_NodeType, _EdgeType, _EdgeIter> _Self; + + inline SGSuccIterator(_EdgeIter startEdge) : oi(startEdge) {} + + inline bool operator==(const _Self& x) const { return oi == x.oi; } + inline bool operator!=(const _Self& x) const { return !operator==(x); } + + inline _NodeType* operator*() const { return (_NodeType*)(*oi)->getSink(); } + inline _NodeType* operator->() const { return operator*(); } + + inline _EdgeType* getEdge() const { return *(oi); } + + inline _Self &operator++() { ++oi; return *this; } // Preincrement + inline _Self operator++(int) { // Postincrement + _Self tmp(*this); ++*this; return tmp; + } + + inline _Self &operator--() { --oi; return *this; } // Predecrement + inline _Self operator--(int) { // Postdecrement + _Self tmp = *this; --*this; return tmp; + } +}; } // End llvm namespace #endif diff --git a/lib/CodeGen/InstrSched/SchedGraph.h b/lib/CodeGen/InstrSched/SchedGraph.h index 5aee9b25f69..18b2a3f8842 100644 --- a/lib/CodeGen/InstrSched/SchedGraph.h +++ b/lib/CodeGen/InstrSched/SchedGraph.h @@ -180,68 +180,6 @@ public: -//********************** Sched Graph Iterators *****************************/ - -// Ok to make it a template because it shd get instantiated at most twice: -// for and -// for . -// -template -class SGPredIterator: public bidirectional_iterator<_NodeType, ptrdiff_t> { -protected: - _EdgeIter oi; -public: - typedef SGPredIterator<_NodeType, _EdgeType, _EdgeIter> _Self; - - inline SGPredIterator(_EdgeIter startEdge) : oi(startEdge) {} - - inline bool operator==(const _Self& x) const { return oi == x.oi; } - inline bool operator!=(const _Self& x) const { return !operator==(x); } - - // operator*() differs for pred or succ iterator - inline _NodeType* operator*() const { return (_NodeType*)(*oi)->getSrc(); } - inline _NodeType* operator->() const { return operator*(); } - - inline _EdgeType* getEdge() const { return *(oi); } - - inline _Self &operator++() { ++oi; return *this; } // Preincrement - inline _Self operator++(int) { // Postincrement - _Self tmp(*this); ++*this; return tmp; - } - - inline _Self &operator--() { --oi; return *this; } // Predecrement - inline _Self operator--(int) { // Postdecrement - _Self tmp = *this; --*this; return tmp; - } -}; - -template -class SGSuccIterator : public bidirectional_iterator<_NodeType, ptrdiff_t> { -protected: - _EdgeIter oi; -public: - typedef SGSuccIterator<_NodeType, _EdgeType, _EdgeIter> _Self; - - inline SGSuccIterator(_EdgeIter startEdge) : oi(startEdge) {} - - inline bool operator==(const _Self& x) const { return oi == x.oi; } - inline bool operator!=(const _Self& x) const { return !operator==(x); } - - inline _NodeType* operator*() const { return (_NodeType*)(*oi)->getSink(); } - inline _NodeType* operator->() const { return operator*(); } - - inline _EdgeType* getEdge() const { return *(oi); } - - inline _Self &operator++() { ++oi; return *this; } // Preincrement - inline _Self operator++(int) { // Postincrement - _Self tmp(*this); ++*this; return tmp; - } - - inline _Self &operator--() { --oi; return *this; } // Predecrement - inline _Self operator--(int) { // Postdecrement - _Self tmp = *this; --*this; return tmp; - } -}; // // sg_pred_iterator diff --git a/lib/Target/SparcV9/InstrSched/SchedGraph.h b/lib/Target/SparcV9/InstrSched/SchedGraph.h index 5aee9b25f69..18b2a3f8842 100644 --- a/lib/Target/SparcV9/InstrSched/SchedGraph.h +++ b/lib/Target/SparcV9/InstrSched/SchedGraph.h @@ -180,68 +180,6 @@ public: -//********************** Sched Graph Iterators *****************************/ - -// Ok to make it a template because it shd get instantiated at most twice: -// for and -// for . -// -template -class SGPredIterator: public bidirectional_iterator<_NodeType, ptrdiff_t> { -protected: - _EdgeIter oi; -public: - typedef SGPredIterator<_NodeType, _EdgeType, _EdgeIter> _Self; - - inline SGPredIterator(_EdgeIter startEdge) : oi(startEdge) {} - - inline bool operator==(const _Self& x) const { return oi == x.oi; } - inline bool operator!=(const _Self& x) const { return !operator==(x); } - - // operator*() differs for pred or succ iterator - inline _NodeType* operator*() const { return (_NodeType*)(*oi)->getSrc(); } - inline _NodeType* operator->() const { return operator*(); } - - inline _EdgeType* getEdge() const { return *(oi); } - - inline _Self &operator++() { ++oi; return *this; } // Preincrement - inline _Self operator++(int) { // Postincrement - _Self tmp(*this); ++*this; return tmp; - } - - inline _Self &operator--() { --oi; return *this; } // Predecrement - inline _Self operator--(int) { // Postdecrement - _Self tmp = *this; --*this; return tmp; - } -}; - -template -class SGSuccIterator : public bidirectional_iterator<_NodeType, ptrdiff_t> { -protected: - _EdgeIter oi; -public: - typedef SGSuccIterator<_NodeType, _EdgeType, _EdgeIter> _Self; - - inline SGSuccIterator(_EdgeIter startEdge) : oi(startEdge) {} - - inline bool operator==(const _Self& x) const { return oi == x.oi; } - inline bool operator!=(const _Self& x) const { return !operator==(x); } - - inline _NodeType* operator*() const { return (_NodeType*)(*oi)->getSink(); } - inline _NodeType* operator->() const { return operator*(); } - - inline _EdgeType* getEdge() const { return *(oi); } - - inline _Self &operator++() { ++oi; return *this; } // Preincrement - inline _Self operator++(int) { // Postincrement - _Self tmp(*this); ++*this; return tmp; - } - - inline _Self &operator--() { --oi; return *this; } // Predecrement - inline _Self operator--(int) { // Postdecrement - _Self tmp = *this; --*this; return tmp; - } -}; // // sg_pred_iterator