always use build_gep wrapper

Signed-off-by: xermicus <cyrill@parity.io>
This commit is contained in:
xermicus
2024-03-19 11:57:46 +01:00
parent 2b9e40225d
commit 6436e1956b
2 changed files with 49 additions and 53 deletions
+35 -35
View File
@@ -662,7 +662,10 @@ where
) -> anyhow::Result<inkwell::values::BasicValueEnum<'ctx>> { ) -> anyhow::Result<inkwell::values::BasicValueEnum<'ctx>> {
match pointer.address_space { match pointer.address_space {
AddressSpace::Heap => { AddressSpace::Heap => {
let heap_pointer = self.get_global(crate::eravm::GLOBAL_HEAP_MEMORY_POINTER)?; let heap_pointer = self
.get_global(crate::eravm::GLOBAL_HEAP_MEMORY_POINTER)?
.value
.as_pointer_value();
// TODO: Ensure safe casts somehow // TODO: Ensure safe casts somehow
let offset = self.builder().build_ptr_to_int( let offset = self.builder().build_ptr_to_int(
@@ -670,17 +673,15 @@ where
self.integer_type(32), self.integer_type(32),
"offset_ptrtoint", "offset_ptrtoint",
)?; )?;
let pointer_value = unsafe { let pointer_value = self.build_gep(
self.builder.build_gep( Pointer::new(self.byte_type(), AddressSpace::Stack, heap_pointer),
self.byte_type(), &[offset],
heap_pointer.value.as_pointer_value(), self.byte_type(),
&[offset], "heap_offset_via_gep",
"heap_offset_via_gep", );
)
}?;
let value = self let value = self
.builder() .builder()
.build_load(pointer.r#type, pointer_value, name)?; .build_load(pointer.r#type, pointer_value.value, name)?;
self.basic_block() self.basic_block()
.get_last_instruction() .get_last_instruction()
.expect("Always exists") .expect("Always exists")
@@ -786,7 +787,9 @@ where
AddressSpace::Heap => { AddressSpace::Heap => {
let heap_pointer = self let heap_pointer = self
.get_global(crate::eravm::GLOBAL_HEAP_MEMORY_POINTER) .get_global(crate::eravm::GLOBAL_HEAP_MEMORY_POINTER)
.unwrap(); .unwrap()
.value
.as_pointer_value();
// TODO: Ensure safe casts somehow // TODO: Ensure safe casts somehow
let offset = self.builder().build_ptr_to_int( let offset = self.builder().build_ptr_to_int(
@@ -794,20 +797,19 @@ where
self.integer_type(32), self.integer_type(32),
"offset_ptrtoint", "offset_ptrtoint",
)?; )?;
let pointer_value = unsafe { let pointer_value = self.build_gep(
self.builder() Pointer::new(self.byte_type(), AddressSpace::Stack, heap_pointer),
.build_gep( &[offset],
self.byte_type(), self.byte_type(),
heap_pointer.value.as_pointer_value(), "heap_offset_via_gep",
&[offset], );
"heap_offset_via_gep",
)
.unwrap()
};
let value = self.build_byte_swap(value.as_basic_value_enum()); let value = self.build_byte_swap(value.as_basic_value_enum());
let instruction = self.builder.build_store(pointer_value, value).unwrap(); let instruction = self
.builder
.build_store(pointer_value.value, value)
.unwrap();
instruction instruction
.set_alignment(era_compiler_common::BYTE_LENGTH_BYTE as u32) .set_alignment(era_compiler_common::BYTE_LENGTH_BYTE as u32)
.expect("Alignment is valid"); .expect("Alignment is valid");
@@ -909,10 +911,7 @@ where
T: BasicType<'ctx>, T: BasicType<'ctx>,
{ {
assert_ne!(pointer.address_space, AddressSpace::Storage); assert_ne!(pointer.address_space, AddressSpace::Storage);
assert_ne!(pointer.address_space, AddressSpace::Heap);
assert_ne!(pointer.address_space, AddressSpace::HeapAuxiliary);
assert_ne!(pointer.address_space, AddressSpace::TransientStorage); assert_ne!(pointer.address_space, AddressSpace::TransientStorage);
assert_ne!(pointer.address_space, AddressSpace::Code);
let value = unsafe { let value = unsafe {
self.builder self.builder
@@ -1213,20 +1212,21 @@ where
// zkevm_opcode_defs::RetForwardPageType::UseHeap // zkevm_opcode_defs::RetForwardPageType::UseHeap
//}; //};
let heap_pointer = self.get_global(crate::eravm::GLOBAL_HEAP_MEMORY_POINTER)?; let heap_pointer = self
.get_global(crate::eravm::GLOBAL_HEAP_MEMORY_POINTER)?
.value
.as_pointer_value();
let offset_truncated = self.safe_truncate_int_to_i32(offset)?; let offset_truncated = self.safe_truncate_int_to_i32(offset)?;
let offset_into_heap = unsafe { let offset_into_heap = self.build_gep(
self.builder().build_gep( Pointer::new(self.byte_type(), AddressSpace::Stack, heap_pointer),
self.byte_type(), &[offset_truncated],
heap_pointer.value.as_pointer_value(), self.byte_type(),
&[offset_truncated], "heap_offset_via_gep",
"heap_offset_via_gep", );
)
}?;
let length_pointer = self.safe_truncate_int_to_i32(length)?; let length_pointer = self.safe_truncate_int_to_i32(length)?;
let offset_pointer = self.builder().build_ptr_to_int( let offset_pointer = self.builder().build_ptr_to_int(
offset_into_heap, offset_into_heap.value,
self.integer_type(32), self.integer_type(32),
"return_data_ptr_to_int", "return_data_ptr_to_int",
)?; )?;
+14 -18
View File
@@ -63,32 +63,28 @@ where
.get_global(crate::eravm::GLOBAL_HEAP_MEMORY_POINTER)? .get_global(crate::eravm::GLOBAL_HEAP_MEMORY_POINTER)?
.value .value
.as_pointer_value(); .as_pointer_value();
let destination = unsafe { let destination = context.build_gep(
context.builder().build_gep( Pointer::new(context.byte_type(), AddressSpace::Stack, heap_pointer),
context.byte_type(), &[context.safe_truncate_int_to_i32(destination_offset)?],
heap_pointer, context.byte_type(),
&[destination_offset], "heap_pointer_with_offset",
"calldata_pointer_with_offset", );
)
}?;
let calldata_pointer = context let calldata_pointer = context
.get_global(crate::eravm::GLOBAL_CALLDATA_POINTER)? .get_global(crate::eravm::GLOBAL_CALLDATA_POINTER)?
.value .value
.as_pointer_value(); .as_pointer_value();
let source = unsafe { let source = context.build_gep(
context.builder().build_gep( Pointer::new(context.byte_type(), AddressSpace::Stack, calldata_pointer),
context.byte_type(), &[context.safe_truncate_int_to_i32(source_offset)?],
calldata_pointer, context.byte_type(),
&[source_offset], "calldata_pointer_with_offset",
"calldata_pointer_with_offset", );
)
}?;
context.build_memcpy( context.build_memcpy(
context.intrinsics().memory_copy_from_generic, context.intrinsics().memory_copy_from_generic,
Pointer::new(context.byte_type(), AddressSpace::Stack, destination), destination,
Pointer::new(context.byte_type(), AddressSpace::Stack, source), source,
size, size,
"calldata_copy_memcpy_from_child", "calldata_copy_memcpy_from_child",
) )