LLVM
8.0.1
|
Traverse the blocks in a loop using a depth-first search. More...
#include "llvm/Analysis/LoopIterator.h"
Public Types | |
typedef po_iterator< BasicBlock *, LoopBlocksTraversal, true > | POTIterator |
Graph traversal iterator. More... | |
Public Member Functions | |
LoopBlocksTraversal (LoopBlocksDFS &Storage, LoopInfo *LInfo) | |
POTIterator | begin () |
Postorder traversal over the graph. More... | |
POTIterator | end () |
bool | visitPreorder (BasicBlock *BB) |
Called by po_iterator upon reaching a block via a CFG edge. More... | |
void | finishPostorder (BasicBlock *BB) |
Called by po_iterator each time it advances, indicating a block's postorder. More... | |
Traverse the blocks in a loop using a depth-first search.
Definition at line 201 of file LoopIterator.h.
Graph traversal iterator.
Definition at line 204 of file LoopIterator.h.
|
inline |
Definition at line 211 of file LoopIterator.h.
|
inline |
Postorder traversal over the graph.
This only needs to be done once. po_iterator "automatically" calls back to visitPreorder and finishPostorder to record the DFS result.
Definition at line 217 of file LoopIterator.h.
References assert(), llvm::LoopBase< BlockT, LoopT >::getHeader(), llvm::LoopBase< BlockT, LoopT >::getNumBlocks(), and llvm::po_ext_begin().
Referenced by llvm::LoopBlocksDFS::perform().
|
inline |
Definition at line 222 of file LoopIterator.h.
References llvm::LoopBase< BlockT, LoopT >::getHeader(), and llvm::po_ext_end().
Referenced by llvm::LoopBlocksDFS::perform().
|
inline |
Called by po_iterator each time it advances, indicating a block's postorder.
Definition at line 241 of file LoopIterator.h.
References assert(), and llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT, BucketT >::count().
|
inline |
Called by po_iterator upon reaching a block via a CFG edge.
If this block is contained in the loop and has not been visited, then mark it preorder visited and return true.
TODO: If anyone is interested, we could record preorder numbers here.
Definition at line 232 of file LoopIterator.h.
References llvm::LoopBase< BlockT, LoopT >::contains(), llvm::LoopInfoBase< BlockT, LoopT >::getLoopFor(), and llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT, BucketT >::insert().