mirror of
https://github.com/pezkuwichain/revive.git
synced 2026-06-17 02:01:01 +00:00
always use build_gep wrapper
Signed-off-by: xermicus <cyrill@parity.io>
This commit is contained in:
@@ -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",
|
||||||
)?;
|
)?;
|
||||||
|
|||||||
@@ -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",
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user