pub struct DominatorTreePreorder { /* private fields */ }
Expand description
Optional pre-order information that can be computed for a dominator tree.
This data structure is computed from a DominatorTree
and provides:
- A forward traversable dominator tree through the
children()
iterator. - An ordering of blocks according to a dominator tree pre-order.
- Constant time dominance checks at the block granularity.
The information in this auxiliary data structure is not easy to update when the control flow graph changes, which is why it is kept separate.
Implementations§
Source§impl DominatorTreePreorder
Creating and computing the dominator tree pre-order.
impl DominatorTreePreorder
Creating and computing the dominator tree pre-order.
Sourcepub fn compute(&mut self, domtree: &DominatorTree)
pub fn compute(&mut self, domtree: &DominatorTree)
Recompute this data structure to match domtree
.
Source§impl DominatorTreePreorder
Query interface for the dominator tree pre-order.
impl DominatorTreePreorder
Query interface for the dominator tree pre-order.
Sourcepub fn children(&self, block: Block) -> ChildIter<'_> ⓘ
pub fn children(&self, block: Block) -> ChildIter<'_> ⓘ
Get an iterator over the direct children of block
in the dominator tree.
These are the block’s whose immediate dominator is an instruction in block
, ordered according
to the CFG reverse post-order.
Sourcepub fn dominates(&self, a: Block, b: Block) -> bool
pub fn dominates(&self, a: Block, b: Block) -> bool
Fast, constant time dominance check with block granularity.
This computes the same result as domtree.dominates(a, b)
, but in guaranteed fast constant
time. This is less general than the DominatorTree
method because it only works with block
program points.
A block is considered to dominate itself.
Sourcepub fn pre_cmp_block(&self, a: Block, b: Block) -> Ordering
pub fn pre_cmp_block(&self, a: Block, b: Block) -> Ordering
Compare two blocks according to the dominator pre-order.
Sourcepub fn pre_cmp<A, B>(&self, a: A, b: B, layout: &Layout) -> Ordering
pub fn pre_cmp<A, B>(&self, a: A, b: B, layout: &Layout) -> Ordering
Compare two program points according to the dominator tree pre-order.
This ordering of program points have the property that given a program point, pp, all the program points dominated by pp follow immediately and contiguously after pp in the order.