rustc_middle::mir::traversal

Function reverse_postorder

source
pub fn reverse_postorder<'a, 'tcx>(
    body: &'a Body<'tcx>,
) -> impl Iterator<Item = (BasicBlock, &'a BasicBlockData<'tcx>)> + ExactSizeIterator + DoubleEndedIterator
Expand description

Reverse postorder traversal of a graph.

This function creates an iterator over the Body’s basic blocks, that:

  • returns basic blocks in a reverse postorder,
  • makes use of the BasicBlocks CFG cache’s reverse postorder.

Reverse postorder is the reverse order of a postorder traversal. This is different to a preorder traversal and represents a natural linearization of control-flow.


        A
       / \
      /   \
     B     C
      \   /
       \ /
        D

A reverse postorder traversal of this graph is either A B C D or A C B D Note that for a graph containing no loops (i.e., A DAG), this is equivalent to a topological sort.