pub struct ForwardControlFlowGraph {
pub root: usize,
pub predecessors: Vec<Vec<usize>>,
pub successors: Vec<Vec<usize>>,
pub dominators: DominatorTree,
pub dominance_frontier: Vec<Vec<usize>>,
pub sccs: Vec<StronglyConnectedRegion>,
pub scc_for_block: Vec<usize>,
pub loops: Vec<NaturalLoop>,
}Expand description
Forward-only CFG analysis used by SSA construction and machine backends.
Unlike ControlFlowGraph, this does not construct postdominators or
control dependence. SCC membership is retained because loop-sensitive
placement needs to reject irreducible cycles without materializing the
potentially dense reverse/control-dependence graphs.
Fields§
§root: usize§predecessors: Vec<Vec<usize>>§successors: Vec<Vec<usize>>§dominators: DominatorTree§dominance_frontier: Vec<Vec<usize>>§sccs: Vec<StronglyConnectedRegion>§scc_for_block: Vec<usize>§loops: Vec<NaturalLoop>Implementations§
Source§impl ForwardControlFlowGraph
impl ForwardControlFlowGraph
Sourcepub fn analyze(
successors: Vec<Vec<usize>>,
root: usize,
) -> Result<Self, CfgError>
pub fn analyze( successors: Vec<Vec<usize>>, root: usize, ) -> Result<Self, CfgError>
Analyze the forward properties of a graph without changing block IDs.
Sourcepub fn analyze_structure(
successors: Vec<Vec<usize>>,
root: usize,
) -> Result<Self, CfgError>
pub fn analyze_structure( successors: Vec<Vec<usize>>, root: usize, ) -> Result<Self, CfgError>
Analyze dominance, loops, and SCCs without constructing a dominance frontier.
This is for placement clients which issue dominance queries but do not construct SSA. The returned frontier table has one empty entry per block so accidental frontier use is explicit in tests and diagnostics.
Trait Implementations§
Source§impl Clone for ForwardControlFlowGraph
impl Clone for ForwardControlFlowGraph
Source§fn clone(&self) -> ForwardControlFlowGraph
fn clone(&self) -> ForwardControlFlowGraph
Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl Debug for ForwardControlFlowGraph
impl Debug for ForwardControlFlowGraph
impl Eq for ForwardControlFlowGraph
Source§impl PartialEq for ForwardControlFlowGraph
impl PartialEq for ForwardControlFlowGraph
Source§impl SsaCfg for ForwardControlFlowGraph
impl SsaCfg for ForwardControlFlowGraph
type FrontierIter<'a> = Copied<Iter<'a, usize>>
fn root(&self) -> usize
fn predecessors(&self) -> &[Vec<usize>]
fn successors(&self) -> &[Vec<usize>]
fn dominator_children(&self) -> &[Vec<usize>]
fn dominance_frontier_len(&self) -> usize
fn dominance_frontier(&self, block: usize) -> Self::FrontierIter<'_>
impl StructuralPartialEq for ForwardControlFlowGraph
Auto Trait Implementations§
impl Freeze for ForwardControlFlowGraph
impl RefUnwindSafe for ForwardControlFlowGraph
impl Send for ForwardControlFlowGraph
impl Sync for ForwardControlFlowGraph
impl Unpin for ForwardControlFlowGraph
impl UnsafeUnpin for ForwardControlFlowGraph
impl UnwindSafe for ForwardControlFlowGraph
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more