LLVM 22.0.0git
llvm::LoopBlocksTraversal Class Reference

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.

Public Member Functions

 LoopBlocksTraversal (LoopBlocksDFS &Storage, const LoopInfo *LInfo)
POTIterator begin ()
 Postorder traversal over the graph.
POTIterator end ()
bool visitPreorder (BasicBlock *BB)
 Called by po_iterator upon reaching a block via a CFG edge.
void finishPostorder (BasicBlock *BB)
 Called by po_iterator each time it advances, indicating a block's postorder.

Detailed Description

Traverse the blocks in a loop using a depth-first search.

Definition at line 200 of file LoopIterator.h.

Member Typedef Documentation

◆ POTIterator

Graph traversal iterator.

Definition at line 203 of file LoopIterator.h.

Constructor & Destructor Documentation

◆ LoopBlocksTraversal()

llvm::LoopBlocksTraversal::LoopBlocksTraversal ( LoopBlocksDFS & Storage,
const LoopInfo * LInfo )
inline

Definition at line 210 of file LoopIterator.h.

Member Function Documentation

◆ begin()

POTIterator llvm::LoopBlocksTraversal::begin ( )
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 216 of file LoopIterator.h.

References assert(), and llvm::po_ext_begin().

Referenced by llvm::LoopBlocksDFS::perform().

◆ end()

POTIterator llvm::LoopBlocksTraversal::end ( )
inline

Definition at line 221 of file LoopIterator.h.

References llvm::po_ext_end().

Referenced by llvm::LoopBlocksDFS::perform().

◆ finishPostorder()

void llvm::LoopBlocksTraversal::finishPostorder ( BasicBlock * BB)
inline

Called by po_iterator each time it advances, indicating a block's postorder.

Definition at line 240 of file LoopIterator.h.

References assert().

◆ visitPreorder()

bool llvm::LoopBlocksTraversal::visitPreorder ( BasicBlock * BB)
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 231 of file LoopIterator.h.


The documentation for this class was generated from the following file: