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<'_>
impl BackendTypes for EvmCraneliftBuilder<'_>
type Type = <EvmCraneliftBackend as BackendTypes>::Type
type Value = <EvmCraneliftBackend as BackendTypes>::Value
type StackSlot = <EvmCraneliftBackend as BackendTypes>::StackSlot
type BasicBlock = <EvmCraneliftBackend as BackendTypes>::BasicBlock
type Function = <EvmCraneliftBackend as BackendTypes>::Function
Source§impl<'a> Builder for EvmCraneliftBuilder<'a>
impl<'a> Builder for EvmCraneliftBuilder<'a>
fn create_block(&mut self, name: &str) -> Self::BasicBlock
fn create_block_after( &mut self, after: Self::BasicBlock, name: &str, ) -> Self::BasicBlock
fn switch_to_block(&mut self, block: Self::BasicBlock)
fn seal_block(&mut self, block: Self::BasicBlock)
fn seal_all_blocks(&mut self)
fn set_current_block_cold(&mut self)
fn current_block(&mut self) -> Option<Self::BasicBlock>
fn block_addr(&mut self, _block: Self::BasicBlock) -> Option<Self::Value>
fn add_comment_to_current_inst(&mut self, comment: &str)
fn fn_param(&mut self, index: usize) -> Self::Value
fn num_fn_params(&self) -> usize
fn bool_const(&mut self, value: bool) -> Self::Value
Source§fn iconst(&mut self, ty: Self::Type, value: i64) -> Self::Value
fn iconst(&mut self, ty: Self::Type, value: i64) -> Self::Value
Sign-extends negative values to
ty
.fn uconst(&mut self, ty: Self::Type, value: u64) -> Self::Value
fn iconst_256(&mut self, value: U256) -> Self::Value
fn str_const(&mut self, value: &str) -> Self::Value
fn nullptr(&mut self) -> Self::Value
fn new_stack_slot_raw(&mut self, ty: Self::Type, name: &str) -> Self::StackSlot
fn stack_load( &mut self, ty: Self::Type, slot: Self::StackSlot, name: &str, ) -> Self::Value
fn stack_store(&mut self, value: Self::Value, slot: Self::StackSlot)
fn stack_addr(&mut self, ty: Self::Type, slot: Self::StackSlot) -> Self::Value
fn load(&mut self, ty: Self::Type, ptr: Self::Value, name: &str) -> Self::Value
fn load_unaligned( &mut self, ty: Self::Type, ptr: Self::Value, name: &str, ) -> Self::Value
fn store(&mut self, value: Self::Value, ptr: Self::Value)
fn store_unaligned(&mut self, value: Self::Value, ptr: Self::Value)
fn nop(&mut self)
fn ret(&mut self, values: &[Self::Value])
fn icmp( &mut self, cond: IntCC, lhs: Self::Value, rhs: Self::Value, ) -> Self::Value
fn icmp_imm(&mut self, cond: IntCC, lhs: Self::Value, rhs: i64) -> Self::Value
fn is_null(&mut self, ptr: Self::Value) -> Self::Value
fn is_not_null(&mut self, ptr: Self::Value) -> Self::Value
fn br(&mut self, dest: Self::BasicBlock)
fn brif( &mut self, cond: Self::Value, then_block: Self::BasicBlock, else_block: Self::BasicBlock, )
fn switch( &mut self, index: Self::Value, default: Self::BasicBlock, targets: &[(u64, Self::BasicBlock)], default_is_cold: bool, )
fn br_indirect( &mut self, _address: Self::Value, _destinations: &[Self::BasicBlock], )
fn phi( &mut self, ty: Self::Type, incoming: &[(Self::Value, Self::BasicBlock)], ) -> Self::Value
fn select( &mut self, cond: Self::Value, then_value: Self::Value, else_value: Self::Value, ) -> Self::Value
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
fn iadd(&mut self, lhs: Self::Value, rhs: Self::Value) -> Self::Value
fn isub(&mut self, lhs: Self::Value, rhs: Self::Value) -> Self::Value
fn imul(&mut self, lhs: Self::Value, rhs: Self::Value) -> Self::Value
fn udiv(&mut self, lhs: Self::Value, rhs: Self::Value) -> Self::Value
fn sdiv(&mut self, lhs: Self::Value, rhs: Self::Value) -> Self::Value
fn urem(&mut self, lhs: Self::Value, rhs: Self::Value) -> Self::Value
fn srem(&mut self, lhs: Self::Value, rhs: Self::Value) -> Self::Value
fn iadd_imm(&mut self, lhs: Self::Value, rhs: i64) -> Self::Value
fn isub_imm(&mut self, lhs: Self::Value, rhs: i64) -> Self::Value
fn imul_imm(&mut self, lhs: Self::Value, rhs: i64) -> Self::Value
fn uadd_overflow( &mut self, lhs: Self::Value, rhs: Self::Value, ) -> (Self::Value, Self::Value)
fn usub_overflow( &mut self, lhs: Self::Value, rhs: Self::Value, ) -> (Self::Value, Self::Value)
fn uadd_sat(&mut self, lhs: Self::Value, rhs: Self::Value) -> Self::Value
fn umax(&mut self, lhs: Self::Value, rhs: Self::Value) -> Self::Value
fn umin(&mut self, lhs: Self::Value, rhs: Self::Value) -> Self::Value
fn bswap(&mut self, value: Self::Value) -> Self::Value
fn bitor(&mut self, lhs: Self::Value, rhs: Self::Value) -> Self::Value
fn bitand(&mut self, lhs: Self::Value, rhs: Self::Value) -> Self::Value
fn bitxor(&mut self, lhs: Self::Value, rhs: Self::Value) -> Self::Value
fn bitnot(&mut self, value: Self::Value) -> Self::Value
fn bitor_imm(&mut self, lhs: Self::Value, rhs: i64) -> Self::Value
fn bitand_imm(&mut self, lhs: Self::Value, rhs: i64) -> Self::Value
fn bitxor_imm(&mut self, lhs: Self::Value, rhs: i64) -> Self::Value
fn ishl(&mut self, lhs: Self::Value, rhs: Self::Value) -> Self::Value
fn ushr(&mut self, lhs: Self::Value, rhs: Self::Value) -> Self::Value
fn sshr(&mut self, lhs: Self::Value, rhs: Self::Value) -> Self::Value
fn zext(&mut self, ty: Self::Type, value: Self::Value) -> Self::Value
fn sext(&mut self, ty: Self::Type, value: Self::Value) -> Self::Value
fn ireduce(&mut self, to: Self::Type, value: Self::Value) -> Self::Value
fn gep( &mut self, ty: Self::Type, ptr: Self::Value, indexes: &[Self::Value], name: &str, ) -> Self::Value
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>
fn is_compile_time_known(&mut self, _value: Self::Value) -> Option<Self::Value>
Returns
Some(is_value_compile_time)
, or None
if unsupported.fn memcpy(&mut self, dst: Self::Value, src: Self::Value, len: Self::Value)
fn unreachable(&mut self)
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
fn get_function(&mut self, name: &str) -> Option<Self::Function>
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
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 moreSource§fn add_function_attribute(
&mut self,
function: Option<Self::Function>,
attribute: Attribute,
loc: FunctionAttributeLocation,
)
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<'_>
impl TypeMethods for EvmCraneliftBuilder<'_>
Auto Trait Implementations§
impl<'a> Freeze for EvmCraneliftBuilder<'a>
impl<'a> !RefUnwindSafe for EvmCraneliftBuilder<'a>
impl<'a> Send for EvmCraneliftBuilder<'a>
impl<'a> !Sync for EvmCraneliftBuilder<'a>
impl<'a> Unpin for EvmCraneliftBuilder<'a>
impl<'a> !UnwindSafe for EvmCraneliftBuilder<'a>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
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