mirror of
https://github.com/roc-lang/roc.git
synced 2025-09-29 14:54:47 +00:00
Use ListLenU64 where it's needed over ListLenUsize
This commit is contained in:
parent
37b154df4f
commit
762f52b714
1 changed files with 12 additions and 15 deletions
|
@ -1397,22 +1397,20 @@ pub(crate) fn build_list_index_probe<'a>(
|
||||||
list_sym: Symbol,
|
list_sym: Symbol,
|
||||||
list_index: &ListIndex,
|
list_index: &ListIndex,
|
||||||
) -> (Symbol, impl DoubleEndedIterator<Item = Store<'a>>) {
|
) -> (Symbol, impl DoubleEndedIterator<Item = Store<'a>>) {
|
||||||
let usize_layout = Layout::usize(env.target_info);
|
|
||||||
|
|
||||||
let list_index = list_index.0;
|
let list_index = list_index.0;
|
||||||
let index_sym = env.unique_symbol();
|
let index_sym = env.unique_symbol();
|
||||||
|
|
||||||
let (opt_len_store, opt_offset_store, index_store) = if list_index >= 0 {
|
let (opt_len_store, opt_offset_store, index_store) = if list_index >= 0 {
|
||||||
let index_expr = Expr::Literal(Literal::Int((list_index as i128).to_ne_bytes()));
|
let index_expr = Expr::Literal(Literal::Int((list_index as i128).to_ne_bytes()));
|
||||||
|
|
||||||
let index_store = (index_sym, usize_layout, index_expr);
|
let index_store = (index_sym, Layout::U64, index_expr);
|
||||||
|
|
||||||
(None, None, index_store)
|
(None, None, index_store)
|
||||||
} else {
|
} else {
|
||||||
let len_sym = env.unique_symbol();
|
let len_sym = env.unique_symbol();
|
||||||
let len_expr = Expr::Call(Call {
|
let len_expr = Expr::Call(Call {
|
||||||
call_type: CallType::LowLevel {
|
call_type: CallType::LowLevel {
|
||||||
op: LowLevel::ListLenUsize,
|
op: LowLevel::ListLenU64,
|
||||||
update_mode: env.next_update_mode_id(),
|
update_mode: env.next_update_mode_id(),
|
||||||
},
|
},
|
||||||
arguments: env.arena.alloc([list_sym]),
|
arguments: env.arena.alloc([list_sym]),
|
||||||
|
@ -1430,9 +1428,9 @@ pub(crate) fn build_list_index_probe<'a>(
|
||||||
arguments: env.arena.alloc([len_sym, offset_sym]),
|
arguments: env.arena.alloc([len_sym, offset_sym]),
|
||||||
});
|
});
|
||||||
|
|
||||||
let len_store = (len_sym, usize_layout, len_expr);
|
let len_store = (len_sym, Layout::U64, len_expr);
|
||||||
let offset_store = (offset_sym, usize_layout, offset_expr);
|
let offset_store = (offset_sym, Layout::U64, offset_expr);
|
||||||
let index_store = (index_sym, usize_layout, index_expr);
|
let index_store = (index_sym, Layout::U64, index_expr);
|
||||||
|
|
||||||
(Some(len_store), Some(offset_store), index_store)
|
(Some(len_store), Some(offset_store), index_store)
|
||||||
};
|
};
|
||||||
|
@ -1560,17 +1558,16 @@ fn store_list_rest<'a>(
|
||||||
if let Some((index, Some(rest_sym))) = opt_rest {
|
if let Some((index, Some(rest_sym))) = opt_rest {
|
||||||
is_productive = true;
|
is_productive = true;
|
||||||
|
|
||||||
let usize_layout = Layout::usize(env.target_info);
|
|
||||||
|
|
||||||
let total_dropped = list_arity.min_len();
|
let total_dropped = list_arity.min_len();
|
||||||
|
|
||||||
let total_dropped_sym = env.unique_symbol();
|
let total_dropped_sym = env.unique_symbol();
|
||||||
let total_dropped_expr = Expr::Literal(Literal::Int((total_dropped as u128).to_ne_bytes()));
|
let total_dropped_expr = Expr::Literal(Literal::Int((total_dropped as u128).to_ne_bytes()));
|
||||||
|
|
||||||
let list_len_sym = env.unique_symbol();
|
let list_len_sym = env.unique_symbol();
|
||||||
let list_len_expr = Expr::Call(Call {
|
let list_len_expr = Expr::Call(Call {
|
||||||
call_type: CallType::LowLevel {
|
call_type: CallType::LowLevel {
|
||||||
op: LowLevel::ListLenUsize,
|
// Must use ListLenU64 here because we're using it with List.sublist,
|
||||||
|
// which takes U64s for start and len.
|
||||||
|
op: LowLevel::ListLenU64,
|
||||||
update_mode: env.next_update_mode_id(),
|
update_mode: env.next_update_mode_id(),
|
||||||
},
|
},
|
||||||
arguments: env.arena.alloc([list_sym]),
|
arguments: env.arena.alloc([list_sym]),
|
||||||
|
@ -1596,10 +1593,10 @@ fn store_list_rest<'a>(
|
||||||
arguments: env.arena.alloc([list_sym, start_sym, rest_len_sym]),
|
arguments: env.arena.alloc([list_sym, start_sym, rest_len_sym]),
|
||||||
});
|
});
|
||||||
let needed_stores = [
|
let needed_stores = [
|
||||||
(total_dropped_sym, total_dropped_expr, usize_layout),
|
(total_dropped_sym, total_dropped_expr, Layout::U64),
|
||||||
(list_len_sym, list_len_expr, usize_layout),
|
(list_len_sym, list_len_expr, Layout::U64),
|
||||||
(rest_len_sym, rest_len_expr, usize_layout),
|
(rest_len_sym, rest_len_expr, Layout::U64),
|
||||||
(start_sym, start_expr, usize_layout),
|
(start_sym, start_expr, Layout::U64),
|
||||||
(*rest_sym, rest_expr, list_layout),
|
(*rest_sym, rest_expr, list_layout),
|
||||||
];
|
];
|
||||||
for (sym, expr, lay) in needed_stores.into_iter().rev() {
|
for (sym, expr, lay) in needed_stores.into_iter().rev() {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue