cranelift_codegen::ir::instructions

Struct BlockCall

source
pub struct BlockCall { /* private fields */ }
Expand description

A pair of a Block and its arguments, stored in a single EntityList internally.

NOTE: We don’t expose either value_to_block or block_to_value outside of this module because this operation is not generally safe. However, as the two share the same underlying layout, they can be stored in the same value pool.

BlockCall makes use of this shared layout by storing all of its contents (a block and its argument) in a single EntityList. This is a bit better than introducing a new entity type for the pair of a block name and the arguments entity list, as we don’t pay any indirection penalty to get to the argument values – they’re stored in-line with the block in the same list.

The BlockCall::new function guarantees this layout by requiring a block argument that’s written in as the first element of the EntityList. Any subsequent entries are always assumed to be real Values.

Implementations§

source§

impl BlockCall

source

pub fn new(block: Block, args: &[Value], pool: &mut ValueListPool) -> Self

Construct a BlockCall with the given block and arguments.

source

pub fn block(&self, pool: &ValueListPool) -> Block

Return the block for this BlockCall.

source

pub fn set_block(&mut self, block: Block, pool: &mut ValueListPool)

Replace the block for this BlockCall.

source

pub fn append_argument(&mut self, arg: Value, pool: &mut ValueListPool)

Append an argument to the block args.

source

pub fn args_slice<'a>(&self, pool: &'a ValueListPool) -> &'a [Value]

Return a slice for the arguments of this block.

source

pub fn args_slice_mut<'a>( &'a mut self, pool: &'a mut ValueListPool, ) -> &'a mut [Value]

Return a slice for the arguments of this block.

source

pub fn remove(&mut self, ix: usize, pool: &mut ValueListPool)

Remove the argument at ix from the argument list.

source

pub fn clear(&mut self, pool: &mut ValueListPool)

Clear out the arguments list.

source

pub fn extend<I>(&mut self, elements: I, pool: &mut ValueListPool)
where I: IntoIterator<Item = Value>,

Appends multiple elements to the arguments.

source

pub fn display<'a>(&self, pool: &'a ValueListPool) -> DisplayBlockCall<'a>

Return a value that can display this block call.

source

pub fn deep_clone(&self, pool: &mut ValueListPool) -> Self

Deep-clone the underlying list in the same pool. The returned list will have identical contents but changes to this list will not change its contents or vice-versa.

Trait Implementations§

source§

impl Clone for BlockCall

source§

fn clone(&self) -> BlockCall

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 Debug for BlockCall

source§

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

Formats the value using the given formatter. Read more
source§

impl Hash for BlockCall

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl PartialEq for BlockCall

source§

fn eq(&self, other: &BlockCall) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl Copy for BlockCall

source§

impl Eq for BlockCall

source§

impl StructuralPartialEq for BlockCall

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

source§

unsafe fn clone_to_uninit(&self, dst: *mut T)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. Read more
source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

source§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

source§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

source§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. 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 = 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.