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

Tracks the list of dominators for each node.

Fields§

§post_order_rank: IndexVec<N, usize>§immediate_dominators: IndexVec<N, Option<N>>

Implementations§

source§

impl<Node: Idx> Dominators<Node>

source

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

Whether the given Node has an immediate dominator.

source

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

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 dominates(&self, dom: Node, node: Node) -> bool

source

pub fn rank_partial_cmp(&self, lhs: Node, rhs: Node) -> Option<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.

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> 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,

const: unstable · source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

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

const: unstable · source§

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

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

const: unstable · source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

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

const: unstable · 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.
const: unstable · 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.
const: unstable · 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,

source§

impl<T> Erased for T

Layout§

Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...) attributes. Please see the Rust Reference’s “Type Layout” chapter for details on type layout guarantees.

Size: 48 bytes