From d6ae7daab147e485e10c195581cdab3b18cf44ab Mon Sep 17 00:00:00 2001 From: xermicus Date: Mon, 15 Apr 2024 16:02:38 +0200 Subject: [PATCH] use opaque pointer types everywhere Signed-off-by: xermicus --- .../src/eravm/context/function/intrinsics.rs | 19 +++++++------------ .../eravm/context/function/llvm_runtime.rs | 18 ++++++------------ .../context/function/runtime/deployer_call.rs | 4 ++-- .../eravm/context/function/runtime/entry.rs | 4 ++-- crates/llvm-context/src/eravm/context/mod.rs | 15 ++++++--------- .../llvm-context/src/eravm/context/pointer.rs | 8 ++------ crates/llvm-context/src/eravm/utils.rs | 2 +- 7 files changed, 26 insertions(+), 44 deletions(-) diff --git a/crates/llvm-context/src/eravm/context/function/intrinsics.rs b/crates/llvm-context/src/eravm/context/function/intrinsics.rs index 165a06d..a71cd20 100644 --- a/crates/llvm-context/src/eravm/context/function/intrinsics.rs +++ b/crates/llvm-context/src/eravm/context/function/intrinsics.rs @@ -46,11 +46,10 @@ impl<'ctx> Intrinsics<'ctx> { ) -> Self { let void_type = llvm.void_type(); let bool_type = llvm.bool_type(); - let byte_type = llvm.custom_width_int_type(revive_common::BIT_LENGTH_BYTE as u32); let field_type = llvm.custom_width_int_type(revive_common::BIT_LENGTH_FIELD as u32); - let _stack_field_pointer_type = field_type.ptr_type(AddressSpace::Stack.into()); - let heap_field_pointer_type = byte_type.ptr_type(AddressSpace::Heap.into()); - let generic_byte_pointer_type = byte_type.ptr_type(AddressSpace::Generic.into()); + let _stack_field_pointer_type = llvm.ptr_type(AddressSpace::Stack.into()); + let heap_field_pointer_type = llvm.ptr_type(AddressSpace::Heap.into()); + let generic_byte_pointer_type = llvm.ptr_type(AddressSpace::Generic.into()); let trap = Self::declare( llvm, @@ -130,20 +129,16 @@ impl<'ctx> Intrinsics<'ctx> { match name { name if name == Self::FUNCTION_MEMORY_COPY => vec![ - field_type - .ptr_type(AddressSpace::Heap.into()) + llvm.ptr_type(AddressSpace::Heap.into()) .as_basic_type_enum(), - field_type - .ptr_type(AddressSpace::Heap.into()) + llvm.ptr_type(AddressSpace::Heap.into()) .as_basic_type_enum(), field_type.as_basic_type_enum(), ], name if name == Self::FUNCTION_MEMORY_COPY_FROM_GENERIC => vec![ - field_type - .ptr_type(AddressSpace::Heap.into()) + llvm.ptr_type(AddressSpace::Heap.into()) .as_basic_type_enum(), - field_type - .ptr_type(AddressSpace::Generic.into()) + llvm.ptr_type(AddressSpace::Generic.into()) .as_basic_type_enum(), field_type.as_basic_type_enum(), ], diff --git a/crates/llvm-context/src/eravm/context/function/llvm_runtime.rs b/crates/llvm-context/src/eravm/context/function/llvm_runtime.rs index 064b1d0..82fc944 100644 --- a/crates/llvm-context/src/eravm/context/function/llvm_runtime.rs +++ b/crates/llvm-context/src/eravm/context/function/llvm_runtime.rs @@ -186,8 +186,7 @@ impl<'ctx> LLVMRuntime<'ctx> { Self::FUNCTION_CXA_THROW, llvm.void_type().fn_type( vec![ - llvm.i8_type() - .ptr_type(AddressSpace::Stack.into()) + llvm.ptr_type(AddressSpace::Stack.into()) .as_basic_type_enum() .into(); 3 @@ -432,8 +431,7 @@ impl<'ctx> LLVMRuntime<'ctx> { Self::FUNCTION_MSTORE8, llvm.void_type().fn_type( vec![ - llvm.custom_width_int_type(revive_common::BIT_LENGTH_BYTE as u32) - .ptr_type(AddressSpace::Heap.into()) + llvm.ptr_type(AddressSpace::Heap.into()) .as_basic_type_enum() .into(), llvm.custom_width_int_type(revive_common::BIT_LENGTH_FIELD as u32) @@ -463,8 +461,7 @@ impl<'ctx> LLVMRuntime<'ctx> { llvm.custom_width_int_type(revive_common::BIT_LENGTH_FIELD as u32) .fn_type( vec![ - llvm.custom_width_int_type(revive_common::BIT_LENGTH_BYTE as u32) - .ptr_type(AddressSpace::Heap.into()) + llvm.ptr_type(AddressSpace::Heap.into()) .as_basic_type_enum() .into(), llvm.custom_width_int_type(revive_common::BIT_LENGTH_FIELD as u32) @@ -503,8 +500,7 @@ impl<'ctx> LLVMRuntime<'ctx> { llvm.custom_width_int_type(revive_common::BIT_LENGTH_FIELD as u32) .as_basic_type_enum() .into(), - llvm.custom_width_int_type(revive_common::BIT_LENGTH_FIELD as u32) - .ptr_type(AddressSpace::Stack.into()) + llvm.ptr_type(AddressSpace::Stack.into()) .as_basic_type_enum() .into(), ] @@ -537,8 +533,7 @@ impl<'ctx> LLVMRuntime<'ctx> { ); let mut external_call_arguments_by_ref: Vec = vec![ - llvm.custom_width_int_type(revive_common::BIT_LENGTH_BYTE as u32) - .ptr_type(AddressSpace::Generic.into()) + llvm.ptr_type(AddressSpace::Generic.into()) .as_basic_type_enum() .into(), llvm.custom_width_int_type(revive_common::BIT_LENGTH_FIELD as u32) @@ -563,8 +558,7 @@ impl<'ctx> LLVMRuntime<'ctx> { let external_call_result_type = llvm .struct_type( &[ - llvm.custom_width_int_type(revive_common::BIT_LENGTH_BYTE as u32) - .ptr_type(AddressSpace::Generic.into()) + llvm.ptr_type(AddressSpace::Generic.into()) .as_basic_type_enum(), llvm.bool_type().as_basic_type_enum(), ], diff --git a/crates/llvm-context/src/eravm/context/function/runtime/deployer_call.rs b/crates/llvm-context/src/eravm/context/function/runtime/deployer_call.rs index b3f78bb..34dc9f0 100644 --- a/crates/llvm-context/src/eravm/context/function/runtime/deployer_call.rs +++ b/crates/llvm-context/src/eravm/context/function/runtime/deployer_call.rs @@ -197,7 +197,7 @@ where context.build_store(result_pointer, context.field_const(0))?; let deployer_call_result_type = context.structure_type(&[ context - .byte_type() + .llvm() .ptr_type(AddressSpace::Generic.into()) .as_basic_type_enum(), context.bool_type().as_basic_type_enum(), @@ -266,7 +266,7 @@ where .const_zero(), ], context - .byte_type() + .llvm() .ptr_type(AddressSpace::Generic.into()) .as_basic_type_enum(), "deployer_call_result_abi_data_pointer", diff --git a/crates/llvm-context/src/eravm/context/function/runtime/entry.rs b/crates/llvm-context/src/eravm/context/function/runtime/entry.rs index 2b2af11..8bbd38e 100644 --- a/crates/llvm-context/src/eravm/context/function/runtime/entry.rs +++ b/crates/llvm-context/src/eravm/context/function/runtime/entry.rs @@ -44,7 +44,7 @@ impl Entry { context.set_global( crate::eravm::GLOBAL_HEAP_MEMORY_POINTER, - context.byte_type().ptr_type(AddressSpace::Generic.into()), + context.llvm().ptr_type(AddressSpace::Generic.into()), AddressSpace::Stack, context.xlen_type().get_undef(), ); @@ -145,7 +145,7 @@ impl Entry { input_pointer, &[calldata_size_casted], context - .byte_type() + .llvm() .ptr_type(AddressSpace::Generic.into()) .as_basic_type_enum(), "return_data_abi_initializer", diff --git a/crates/llvm-context/src/eravm/context/mod.rs b/crates/llvm-context/src/eravm/context/mod.rs index 88a2506..4e64de3 100644 --- a/crates/llvm-context/src/eravm/context/mod.rs +++ b/crates/llvm-context/src/eravm/context/mod.rs @@ -990,7 +990,7 @@ where self.set_basic_block(catch_block); let landing_pad_type = self.structure_type(&[ - self.byte_type() + self.llvm() .ptr_type(AddressSpace::Stack.into()) .as_basic_type_enum(), self.integer_type(revive_common::BIT_LENGTH_X32) @@ -1001,7 +1001,7 @@ where landing_pad_type, self.llvm_runtime.personality.value, &[self - .byte_type() + .llvm() .ptr_type(AddressSpace::Stack.into()) .const_zero() .as_basic_value_enum()], @@ -1272,7 +1272,7 @@ where let return_is_nil = self.builder().build_int_compare( inkwell::IntPredicate::EQ, end_of_memory, - self.byte_type().ptr_type(Default::default()).const_null(), + self.llvm().ptr_type(Default::default()).const_null(), "compare_end_of_memory_nil", )?; @@ -1350,7 +1350,7 @@ where pub fn write_abi_pointer(&mut self, pointer: Pointer<'ctx>, global_name: &str) { self.set_global( global_name, - self.byte_type().ptr_type(AddressSpace::Generic.into()), + self.llvm().ptr_type(AddressSpace::Generic.into()), AddressSpace::Stack, pointer.value, ); @@ -1528,11 +1528,8 @@ where .void_type() .fn_type(argument_types.as_slice(), false), 1 => self.field_type().fn_type(argument_types.as_slice(), false), - size if is_near_call_abi && self.is_system_mode() => { - let return_types: Vec<_> = vec![self.field_type().as_basic_type_enum(); size]; - let return_type = self - .structure_type(return_types.as_slice()) - .ptr_type(AddressSpace::Stack.into()); + _size if is_near_call_abi && self.is_system_mode() => { + let return_type = self.llvm().ptr_type(AddressSpace::Stack.into()); argument_types.insert(0, return_type.as_basic_type_enum().into()); return_type.fn_type(argument_types.as_slice(), false) } diff --git a/crates/llvm-context/src/eravm/context/pointer.rs b/crates/llvm-context/src/eravm/context/pointer.rs index d5595fa..60f2269 100644 --- a/crates/llvm-context/src/eravm/context/pointer.rs +++ b/crates/llvm-context/src/eravm/context/pointer.rs @@ -81,11 +81,7 @@ impl<'ctx> Pointer<'ctx> { let offset = context.safe_truncate_int_to_i32(offset).unwrap(); let value = context .builder - .build_int_to_ptr( - offset, - context.byte_type().ptr_type(address_space.into()), - name, - ) + .build_int_to_ptr(offset, context.llvm().ptr_type(address_space.into()), name) .unwrap(); Self::new(r#type, address_space, value) } @@ -115,7 +111,7 @@ impl<'ctx> Pointer<'ctx> { { let value = context.builder().build_address_space_cast( self.value, - self.r#type.ptr_type(address_space.into()), + context.llvm().ptr_type(address_space.into()), name, )?; diff --git a/crates/llvm-context/src/eravm/utils.rs b/crates/llvm-context/src/eravm/utils.rs index baa1f65..5014a7c 100644 --- a/crates/llvm-context/src/eravm/utils.rs +++ b/crates/llvm-context/src/eravm/utils.rs @@ -54,7 +54,7 @@ where context.build_call( context.llvm_runtime().cxa_throw, &[context - .byte_type() + .llvm() .ptr_type(AddressSpace::Stack.into()) .get_undef() .as_basic_value_enum(); 3],