diff options
author | Andrew Trick <atrick@apple.com> | 2011-08-03 23:27:28 +0000 |
---|---|---|
committer | Andrew Trick <atrick@apple.com> | 2011-08-03 23:27:28 +0000 |
commit | 5207936a24ab9e0bfaa10e798625df65143e3716 (patch) | |
tree | f35e3408dee9ba0464f640c81805d00b99d8685a /include/llvm/ADT/PostOrderIterator.h | |
parent | 0bc8bbb58dbab40396df064667d7061e16f442a8 (diff) | |
download | external_llvm-5207936a24ab9e0bfaa10e798625df65143e3716.zip external_llvm-5207936a24ab9e0bfaa10e798625df65143e3716.tar.gz external_llvm-5207936a24ab9e0bfaa10e798625df65143e3716.tar.bz2 |
An interface for iterating over a loop's blocks in DFS order.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@136838 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include/llvm/ADT/PostOrderIterator.h')
-rw-r--r-- | include/llvm/ADT/PostOrderIterator.h | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/include/llvm/ADT/PostOrderIterator.h b/include/llvm/ADT/PostOrderIterator.h index e3b4994..63a2b52 100644 --- a/include/llvm/ADT/PostOrderIterator.h +++ b/include/llvm/ADT/PostOrderIterator.h @@ -29,6 +29,14 @@ public: SetType Visited; }; +/// DFSetTraits - Allow the SetType used to record depth-first search results to +/// optionally record node postorder. +template<class SetType> +struct DFSetTraits { + static void finishPostorder( + typename SetType::iterator::value_type, SetType &) {} +}; + template<class SetType> class po_iterator_storage<SetType, true> { public: @@ -109,6 +117,8 @@ public: inline NodeType *operator->() const { return operator*(); } inline _Self& operator++() { // Preincrement + DFSetTraits<SetType>::finishPostorder(VisitStack.back().first, + this->Visited); VisitStack.pop_back(); if (!VisitStack.empty()) traverseChild(); |