aboutsummaryrefslogtreecommitdiffstats
path: root/include/llvm/ADT/PostOrderIterator.h
diff options
context:
space:
mode:
authorAndrew Trick <atrick@apple.com>2011-08-03 23:27:28 +0000
committerAndrew Trick <atrick@apple.com>2011-08-03 23:27:28 +0000
commit5207936a24ab9e0bfaa10e798625df65143e3716 (patch)
treef35e3408dee9ba0464f640c81805d00b99d8685a /include/llvm/ADT/PostOrderIterator.h
parent0bc8bbb58dbab40396df064667d7061e16f442a8 (diff)
downloadexternal_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.h10
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();