Struct EvmCraneliftBuilder

Source
pub struct EvmCraneliftBuilder<'a> {
    pub(crate) module: &'a mut ModuleWrapper,
    pub(crate) comments: &'a mut CommentWriter,
    pub(crate) bcx: FunctionBuilder<'a>,
    pub(crate) ptr_type: Type,
    pub(crate) symbols: Symbols,
}
Expand description

The Cranelift-based EVM bytecode compiler function builder.

Fields§

§module: &'a mut ModuleWrapper§comments: &'a mut CommentWriter§bcx: FunctionBuilder<'a>§ptr_type: Type§symbols: Symbols

Trait Implementations§

Source§

impl BackendTypes for EvmCraneliftBuilder<'_>

Source§

type Type = <EvmCraneliftBackend as BackendTypes>::Type

Source§

type Value = <EvmCraneliftBackend as BackendTypes>::Value

Source§

type StackSlot = <EvmCraneliftBackend as BackendTypes>::StackSlot

Source§

type BasicBlock = <EvmCraneliftBackend as BackendTypes>::BasicBlock

Source§

type Function = <EvmCraneliftBackend as BackendTypes>::Function

Source§

impl<'a> Builder for EvmCraneliftBuilder<'a>

Source§

fn create_block(&mut self, name: &str) -> Self::BasicBlock

Source§

fn create_block_after( &mut self, after: Self::BasicBlock, name: &str, ) -> Self::BasicBlock

Source§

fn switch_to_block(&mut self, block: Self::BasicBlock)

Source§

fn seal_block(&mut self, block: Self::BasicBlock)

Source§

fn seal_all_blocks(&mut self)

Source§

fn set_current_block_cold(&mut self)

Source§

fn current_block(&mut self) -> Option<Self::BasicBlock>

Source§

fn block_addr(&mut self, _block: Self::BasicBlock) -> Option<Self::Value>

Source§

fn add_comment_to_current_inst(&mut self, comment: &str)

Source§

fn fn_param(&mut self, index: usize) -> Self::Value

Source§

fn num_fn_params(&self) -> usize

Source§

fn bool_const(&mut self, value: bool) -> Self::Value

Source§

fn iconst(&mut self, ty: Self::Type, value: i64) -> Self::Value

Sign-extends negative values to ty.
Source§

fn uconst(&mut self, ty: Self::Type, value: u64) -> Self::Value

Source§

fn iconst_256(&mut self, value: U256) -> Self::Value

Source§

fn str_const(&mut self, value: &str) -> Self::Value

Source§

fn nullptr(&mut self) -> Self::Value

Source§

fn new_stack_slot_raw(&mut self, ty: Self::Type, name: &str) -> Self::StackSlot

Source§

fn stack_load( &mut self, ty: Self::Type, slot: Self::StackSlot, name: &str, ) -> Self::Value

Source§

fn stack_store(&mut self, value: Self::Value, slot: Self::StackSlot)

Source§

fn stack_addr(&mut self, ty: Self::Type, slot: Self::StackSlot) -> Self::Value

Source§

fn load(&mut self, ty: Self::Type, ptr: Self::Value, name: &str) -> Self::Value

Source§

fn load_unaligned( &mut self, ty: Self::Type, ptr: Self::Value, name: &str, ) -> Self::Value

Source§

fn store(&mut self, value: Self::Value, ptr: Self::Value)

Source§

fn store_unaligned(&mut self, value: Self::Value, ptr: Self::Value)

Source§

fn nop(&mut self)

Source§

fn ret(&mut self, values: &[Self::Value])

Source§

fn icmp( &mut self, cond: IntCC, lhs: Self::Value, rhs: Self::Value, ) -> Self::Value

Source§

fn icmp_imm(&mut self, cond: IntCC, lhs: Self::Value, rhs: i64) -> Self::Value

Source§

fn is_null(&mut self, ptr: Self::Value) -> Self::Value

Source§

fn is_not_null(&mut self, ptr: Self::Value) -> Self::Value

Source§

fn br(&mut self, dest: Self::BasicBlock)

Source§

fn brif( &mut self, cond: Self::Value, then_block: Self::BasicBlock, else_block: Self::BasicBlock, )

Source§

fn switch( &mut self, index: Self::Value, default: Self::BasicBlock, targets: &[(u64, Self::BasicBlock)], default_is_cold: bool, )

Source§

fn br_indirect( &mut self, _address: Self::Value, _destinations: &[Self::BasicBlock], )

Source§

fn phi( &mut self, ty: Self::Type, incoming: &[(Self::Value, Self::BasicBlock)], ) -> Self::Value

Source§

fn select( &mut self, cond: Self::Value, then_value: Self::Value, else_value: Self::Value, ) -> Self::Value

Source§

fn lazy_select( &mut self, cond: Self::Value, ty: Self::Type, then_value: impl FnOnce(&mut Self) -> Self::Value, else_value: impl FnOnce(&mut Self) -> Self::Value, ) -> Self::Value

Source§

fn iadd(&mut self, lhs: Self::Value, rhs: Self::Value) -> Self::Value

Source§

fn isub(&mut self, lhs: Self::Value, rhs: Self::Value) -> Self::Value

Source§

fn imul(&mut self, lhs: Self::Value, rhs: Self::Value) -> Self::Value

Source§

fn udiv(&mut self, lhs: Self::Value, rhs: Self::Value) -> Self::Value

Source§

fn sdiv(&mut self, lhs: Self::Value, rhs: Self::Value) -> Self::Value

Source§

fn urem(&mut self, lhs: Self::Value, rhs: Self::Value) -> Self::Value

Source§

fn srem(&mut self, lhs: Self::Value, rhs: Self::Value) -> Self::Value

Source§

fn iadd_imm(&mut self, lhs: Self::Value, rhs: i64) -> Self::Value

Source§

fn isub_imm(&mut self, lhs: Self::Value, rhs: i64) -> Self::Value

Source§

fn imul_imm(&mut self, lhs: Self::Value, rhs: i64) -> Self::Value

Source§

fn uadd_overflow( &mut self, lhs: Self::Value, rhs: Self::Value, ) -> (Self::Value, Self::Value)

Source§

fn usub_overflow( &mut self, lhs: Self::Value, rhs: Self::Value, ) -> (Self::Value, Self::Value)

Source§

fn uadd_sat(&mut self, lhs: Self::Value, rhs: Self::Value) -> Self::Value

Source§

fn umax(&mut self, lhs: Self::Value, rhs: Self::Value) -> Self::Value

Source§

fn umin(&mut self, lhs: Self::Value, rhs: Self::Value) -> Self::Value

Source§

fn bswap(&mut self, value: Self::Value) -> Self::Value

Source§

fn bitor(&mut self, lhs: Self::Value, rhs: Self::Value) -> Self::Value

Source§

fn bitand(&mut self, lhs: Self::Value, rhs: Self::Value) -> Self::Value

Source§

fn bitxor(&mut self, lhs: Self::Value, rhs: Self::Value) -> Self::Value

Source§

fn bitnot(&mut self, value: Self::Value) -> Self::Value

Source§

fn bitor_imm(&mut self, lhs: Self::Value, rhs: i64) -> Self::Value

Source§

fn bitand_imm(&mut self, lhs: Self::Value, rhs: i64) -> Self::Value

Source§

fn bitxor_imm(&mut self, lhs: Self::Value, rhs: i64) -> Self::Value

Source§

fn ishl(&mut self, lhs: Self::Value, rhs: Self::Value) -> Self::Value

Source§

fn ushr(&mut self, lhs: Self::Value, rhs: Self::Value) -> Self::Value

Source§

fn sshr(&mut self, lhs: Self::Value, rhs: Self::Value) -> Self::Value

Source§

fn zext(&mut self, ty: Self::Type, value: Self::Value) -> Self::Value

Source§

fn sext(&mut self, ty: Self::Type, value: Self::Value) -> Self::Value

Source§

fn ireduce(&mut self, to: Self::Type, value: Self::Value) -> Self::Value

Source§

fn gep( &mut self, ty: Self::Type, ptr: Self::Value, indexes: &[Self::Value], name: &str, ) -> Self::Value

Source§

fn tail_call( &mut self, function: Self::Function, args: &[Self::Value], tail_call: TailCallKind, ) -> Option<Self::Value>

Source§

fn is_compile_time_known(&mut self, _value: Self::Value) -> Option<Self::Value>

Returns Some(is_value_compile_time), or None if unsupported.
Source§

fn memcpy(&mut self, dst: Self::Value, src: Self::Value, len: Self::Value)

Source§

fn unreachable(&mut self)

Source§

fn get_or_build_function( &mut self, name: &str, params: &[Self::Type], ret: Option<Self::Type>, linkage: Linkage, build: impl FnOnce(&mut Self), ) -> Self::Function

Source§

fn get_function(&mut self, name: &str) -> Option<Self::Function>

Source§

fn get_printf_function(&mut self) -> Self::Function

Source§

fn add_function( &mut self, name: &str, params: &[Self::Type], ret: Option<Self::Type>, address: Option<usize>, linkage: Linkage, ) -> Self::Function

Adds a function to the module that’s located at address. Read more
Source§

fn add_function_attribute( &mut self, function: Option<Self::Function>, attribute: Attribute, loc: FunctionAttributeLocation, )

Adds an attribute to a function, one of its parameters, or its return value. Read more
§

fn cstr_const(&mut self, value: &CStr) -> Self::Value

§

fn new_stack_slot(&mut self, ty: Self::Type, name: &str) -> Pointer<Self>

§

fn brif_cold( &mut self, cond: Self::Value, then_block: Self::BasicBlock, else_block: Self::BasicBlock, then_is_cold: bool, )

§

fn call( &mut self, function: Self::Function, args: &[Self::Value], ) -> Option<Self::Value>

§

fn memcpy_inline(&mut self, dst: Self::Value, src: Self::Value, len: i64)

Source§

impl TypeMethods for EvmCraneliftBuilder<'_>

Source§

fn type_ptr(&self) -> Self::Type

Source§

fn type_ptr_sized_int(&self) -> Self::Type

Source§

fn type_int(&self, bits: u32) -> Self::Type

Source§

fn type_array(&self, ty: Self::Type, size: u32) -> Self::Type

Source§

fn type_bit_width(&self, ty: Self::Type) -> u32

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.

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: 56 bytes