load_roc_value by layoutrepr

This commit is contained in:
Ayaz Hafiz 2023-06-16 21:44:23 -05:00
parent 07f40baf62
commit 390e9f8648
No known key found for this signature in database
GPG key ID: 0E2A37416A25EF58
9 changed files with 95 additions and 36 deletions

View file

@ -261,7 +261,7 @@ fn build_transform_caller_help<'a, 'ctx>(
let argument = load_roc_value(
env,
layout_interner,
*layout,
layout_interner.get_repr(*layout),
cast_ptr,
"zig_helper_load_opaque",
);
@ -287,8 +287,13 @@ fn build_transform_caller_help<'a, 'ctx>(
env.builder
.build_pointer_cast(closure_ptr, closure_type, "cast_opaque_closure");
let closure_data =
load_roc_value(env, layout_interner, layout, closure_cast, "load_closure");
let closure_data = load_roc_value(
env,
layout_interner,
layout_interner.get_repr(layout),
closure_cast,
"load_closure",
);
arguments_cast.push(closure_data);
}
@ -520,8 +525,20 @@ pub fn build_eq_wrapper<'a, 'ctx>(
.build_pointer_cast(value_ptr2, value_type, "load_opaque");
// load_roc_value(env, *element_layout, elem_ptr, "get_elem")
let value1 = load_roc_value(env, layout_interner, layout, value_cast1, "load_opaque");
let value2 = load_roc_value(env, layout_interner, layout, value_cast2, "load_opaque");
let value1 = load_roc_value(
env,
layout_interner,
layout_interner.get_repr(layout),
value_cast1,
"load_opaque",
);
let value2 = load_roc_value(
env,
layout_interner,
layout_interner.get_repr(layout),
value_cast2,
"load_opaque",
);
let result = crate::llvm::compare::generic_eq(
env,
@ -610,8 +627,20 @@ pub fn build_compare_wrapper<'a, 'ctx>(
env.builder
.build_pointer_cast(value_ptr2, value_ptr_type, "load_opaque");
let value1 = load_roc_value(env, layout_interner, layout, value_cast1, "load_opaque");
let value2 = load_roc_value(env, layout_interner, layout, value_cast2, "load_opaque");
let value1 = load_roc_value(
env,
layout_interner,
layout_interner.get_repr(layout),
value_cast1,
"load_opaque",
);
let value2 = load_roc_value(
env,
layout_interner,
layout_interner.get_repr(layout),
value_cast2,
"load_opaque",
);
increment_refcount_layout(env, layout_interner, layout_ids, 1, value1, layout);
increment_refcount_layout(env, layout_interner, layout_ids, 1, value2, layout);

View file

@ -1125,7 +1125,7 @@ pub(crate) fn build_exp_expr<'a, 'ctx>(
load_roc_value(
env,
layout_interner,
layout,
layout_interner.get_repr(layout),
value.into_pointer_value(),
"load_boxed_value",
)
@ -1357,7 +1357,7 @@ pub(crate) fn build_exp_expr<'a, 'ctx>(
load_roc_value(
env,
layout_interner,
field_layouts[*index as usize],
layout_interner.get_repr(field_layouts[*index as usize]),
element_ptr,
"load_element",
)
@ -2054,7 +2054,7 @@ fn lookup_at_index_ptr<'a, 'ctx>(
let result = load_roc_value(
env,
layout_interner,
field_layout,
layout_interner.get_repr(field_layout),
elem_ptr,
"load_at_index_ptr_old",
);
@ -2102,7 +2102,7 @@ fn lookup_at_index_ptr2<'a, 'ctx>(
let result = load_roc_value(
env,
layout_interner,
field_layout,
layout_interner.get_repr(field_layout),
elem_ptr,
"load_at_index_ptr",
);
@ -2378,22 +2378,16 @@ fn list_literal<'a, 'ctx>(
pub fn load_roc_value<'a, 'ctx>(
env: &Env<'a, 'ctx, '_>,
layout_interner: &STLayoutInterner<'a>,
layout: InLayout<'a>,
layout: LayoutRepr<'a>,
source: PointerValue<'ctx>,
name: &str,
) -> BasicValueEnum<'ctx> {
let basic_type = basic_type_from_layout(env, layout_interner, layout_interner.get_repr(layout));
let basic_type = basic_type_from_layout(env, layout_interner, layout);
if layout_interner.is_passed_by_reference(layout) {
if layout.is_passed_by_reference(layout_interner) {
let alloca = entry_block_alloca_zerofill(env, basic_type, name);
store_roc_value(
env,
layout_interner,
layout_interner.get_repr(layout),
alloca,
source.into(),
);
store_roc_value(env, layout_interner, layout, alloca, source.into());
alloca.into()
} else {

View file

@ -161,7 +161,7 @@ pub(crate) fn list_get_unsafe<'a, 'ctx>(
load_roc_value(
env,
layout_interner,
element_layout,
layout_interner.get_repr(element_layout),
elem_ptr,
"list_get_load_element",
)
@ -723,7 +723,7 @@ where
let elem = load_roc_value(
env,
layout_interner,
element_layout,
layout_interner.get_repr(element_layout),
element_ptr,
"incrementing_element_loop_load",
);

View file

@ -25,7 +25,7 @@ pub(crate) fn decode_from_utf8_result<'a, 'ctx>(
load_roc_value(
env,
layout_interner,
layout,
layout_interner.get_repr(layout),
pointer,
"load_decode_from_utf8_result",
)

View file

@ -579,14 +579,26 @@ fn build_list_eq_help<'a, 'ctx>(
let elem_ptr = unsafe {
builder.new_build_in_bounds_gep(element_type, ptr1, &[curr_index], "load_index")
};
load_roc_value(env, layout_interner, element_layout, elem_ptr, "get_elem")
load_roc_value(
env,
layout_interner,
layout_interner.get_repr(element_layout),
elem_ptr,
"get_elem",
)
};
let elem2 = {
let elem_ptr = unsafe {
builder.new_build_in_bounds_gep(element_type, ptr2, &[curr_index], "load_index")
};
load_roc_value(env, layout_interner, element_layout, elem_ptr, "get_elem")
load_roc_value(
env,
layout_interner,
layout_interner.get_repr(element_layout),
elem_ptr,
"get_elem",
)
};
let are_equal = build_eq(
@ -1318,14 +1330,14 @@ fn eq_ptr_to_struct<'a, 'ctx>(
let struct1 = load_roc_value(
env,
layout_interner,
struct_layout,
layout_interner.get_repr(struct_layout),
struct1_ptr,
"load_struct1",
);
let struct2 = load_roc_value(
env,
layout_interner,
struct_layout,
layout_interner.get_repr(struct_layout),
struct2_ptr,
"load_struct2",
);
@ -1466,8 +1478,20 @@ fn build_box_eq_help<'a, 'ctx>(
let box1 = box1.into_pointer_value();
let box2 = box2.into_pointer_value();
let value1 = load_roc_value(env, layout_interner, inner_layout, box1, "load_box1");
let value2 = load_roc_value(env, layout_interner, inner_layout, box2, "load_box2");
let value1 = load_roc_value(
env,
layout_interner,
layout_interner.get_repr(inner_layout),
box1,
"load_box1",
);
let value2 = load_roc_value(
env,
layout_interner,
layout_interner.get_repr(inner_layout),
box2,
"load_box2",
);
let is_equal = build_eq(
env,

View file

@ -364,7 +364,13 @@ fn build_clone<'a, 'ctx>(
build_copy(env, ptr, cursors.offset, cursors.extra_offset.into());
let source = value.into_pointer_value();
let value = load_roc_value(env, layout_interner, inner_layout, source, "inner");
let value = load_roc_value(
env,
layout_interner,
layout_interner.get_repr(inner_layout),
source,
"inner",
);
let inner_width = env
.ptr_int()

View file

@ -277,7 +277,7 @@ pub(crate) fn run_low_level<'a, 'ctx>(
load_roc_value(
env,
layout_interner,
layout,
layout_interner.get_repr(layout),
roc_return_alloca,
"str_to_num_result",
)
@ -2235,7 +2235,7 @@ fn build_int_unary_op<'a, 'ctx, 'env>(
load_roc_value(
env,
layout_interner,
return_layout,
layout_interner.get_repr(return_layout),
roc_return_alloca,
"num_to_int",
)

View file

@ -945,7 +945,13 @@ fn modify_refcount_box_help<'a, 'ctx>(
{
env.builder.position_at_end(do_recurse_block);
let inner = load_roc_value(env, layout_interner, inner_layout, boxed, "inner");
let inner = load_roc_value(
env,
layout_interner,
layout_interner.get_repr(inner_layout),
boxed,
"inner",
);
modify_refcount_layout(
env,
@ -1348,7 +1354,7 @@ fn build_rec_union_recursive_decrement<'a, 'ctx>(
let field = load_roc_value(
env,
layout_interner,
*field_layout,
layout_interner.get_repr(*field_layout),
elem_pointer,
"decrement_struct_field",
);

View file

@ -155,7 +155,7 @@ fn index_struct_ptr<'a, 'ctx>(
load_roc_value(
env,
layout_interner,
field_layout,
layout_interner.get_repr(field_layout),
field_value,
"struct_field",
)