pub struct Dominators<N: Idx> {
    start_node: N,
    post_order_rank: IndexVec<N, usize>,
    immediate_dominators: IndexVec<N, Option<N>>,
    time: IndexVec<N, Time>,
}
Expand description

Tracks the list of dominators for each node.

Fields§

§start_node: N§post_order_rank: IndexVec<N, usize>§immediate_dominators: IndexVec<N, Option<N>>§time: IndexVec<N, Time>

Implementations§

source§

impl<Node: Idx> Dominators<Node>

source

pub fn is_reachable(&self, node: Node) -> bool

Returns true if node is reachable from the start node.

source

pub fn immediate_dominator(&self, node: Node) -> Option<Node>

Returns the immediate dominator of node, if any.

source

pub fn dominators(&self, node: Node) -> Iter<'_, Node>

Provides an iterator over each dominator up the CFG, for the given Node. See the impl Iterator for Iter definition to understand how this works.

source

pub fn cmp_in_dominator_order(&self, lhs: Node, rhs: Node) -> Ordering

Provide deterministic ordering of nodes such that, if any two nodes have a dominator relationship, the dominator will always precede the dominated. (The relative ordering of two unrelated nodes will also be consistent, but otherwise the order has no meaning.) This method cannot be used to determine if either Node dominates the other.

source

pub fn dominates(&self, a: Node, b: Node) -> bool

Returns true if a dominates b.

Panics

Panics if b is unreachable.

Trait Implementations§

source§

impl<N: Clone + Idx> Clone for Dominators<N>

source§

fn clone(&self) -> Dominators<N>

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<N: Debug + Idx> Debug for Dominators<N>

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl<N> RefUnwindSafe for Dominators<N>where N: RefUnwindSafe,

§

impl<N> Send for Dominators<N>where N: Send,

§

impl<N> Sync for Dominators<N>where N: Sync,

§

impl<N> Unpin for Dominators<N>where N: Unpin,

§

impl<N> UnwindSafe for Dominators<N>where N: UnwindSafe,

Blanket Implementations§

source§

impl<T> Aligned for T

source§

const ALIGN: Alignment = const ALIGN: Alignment = Alignment::of::<Self>();

Alignment of Self.
source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for Twhere U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T> ToOwned for Twhere T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for Twhere U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<'a, T> Captures<'a> for Twhere T: ?Sized,

Layout§

Note: Unable to compute type layout, possibly due to this type having generic parameters. Layout can only be computed for concrete, fully-instantiated types.