Skip to main content

Live

Struct Live 

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

What is live where.

Implementations§

Source§

impl Live

Source

pub fn of(func: &Func, order: &Order) -> Self

Works it out for a function laid out in that order.

Source

pub fn range(&self, reg: Reg) -> Option<Range>

Where a virtual register is live, or None for one this function never mentions and for a physical register.

Source

pub fn live_in(&self, block: Block) -> impl Iterator<Item = Reg> + '_

Every virtual register that arrives in a block already holding a value.

The block’s own parameters are not among them. A parameter is written where it arrives, which makes it a value the block defines rather than one it inherits.

Source

pub fn live_out(&self, block: Block) -> impl Iterator<Item = Reg> + '_

Every virtual register that is still wanted after a block, which is what its successors and the arguments its terminator carries between them ask for.

Source

pub fn anywhere_in(&self, reg: Reg, block: Block) -> bool

Whether a value is live anywhere in a block.

An interval has no holes in it, so a value live in two blocks is treated as live in every block laid out between them, whether or not it reaches them. This answers the question the interval cannot: a value is live somewhere in a block when it arrives live, or leaves live, or is written there, and in no other block.

Which matters wherever the answer decides something rather than describes it. The order the blocks are in here is the one the function came in, and crate::layout puts them in a different one afterwards, so a block between two others in this order is not between them in the code. A call in such a block would otherwise take every register it destroys away from every value laid out around it, including values whose loop the call is nowhere near. tamnd/rucc#982.

Trait Implementations§

Source§

impl Clone for Live

Source§

fn clone(&self) -> Live

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

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

Performs copy-assignment from source. Read more
Source§

impl Debug for Live

Source§

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

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl Freeze for Live

§

impl RefUnwindSafe for Live

§

impl Send for Live

§

impl Sync for Live

§

impl Unpin for Live

§

impl UnsafeUnpin for Live

§

impl UnwindSafe for Live

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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. 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> ToOwned for T
where T: Clone,

Source§

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

Source§

type Error = !

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

fn try_from(value: U) -> Result<T, !>

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.