Skip to main content

UseDefInfo

Struct UseDefInfo 

Source
pub struct UseDefInfo { /* private fields */ }
Expand description

Use-def / def-use information for a single function.

Implementations§

Source§

impl UseDefInfo

Source

pub fn compute(func: &Function) -> Self

Walk all instructions in func and collect definition and use info.

Source

pub fn def_block(&self, id: InstrId) -> Option<BlockId>

The block in which id is defined, or None if not found.

Source

pub fn uses_of(&self, vref: ValueRef) -> &[(BlockId, InstrId)]

All use sites of vref: (block, instruction) pairs.

For phi incoming values the block is the phi’s own block, not the predecessor. Use phi_uses_of when correct predecessor-block semantics are needed (liveness, mem2reg).

Returns an empty slice if the value has no uses.

Source

pub fn phi_uses_of(&self, vref: ValueRef) -> &[(BlockId, InstrId)]

Phi-specific use sites of vref with predecessor-block semantics.

For each phi [vref, %pred] instruction that uses vref, returns a (pred, phi_instr_id) pair. This is the correct view for SSA liveness analysis (the value must be live-out of pred) and for phi elimination (copies are inserted at the end of pred).

Returns an empty slice if vref does not appear in any phi incoming list.

Source

pub fn is_dead(&self, vref: ValueRef) -> bool

true if vref has no recorded uses (dead value).

Auto Trait Implementations§

Blanket Implementations§

Source§

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

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

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

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where 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 T
where 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, U> TryFrom<U> for T
where U: Into<T>,

Source§

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 T
where U: TryFrom<T>,

Source§

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.