From 762f52b714871b475db7aceb4fc6784333df5e82 Mon Sep 17 00:00:00 2001 From: Richard Feldman Date: Fri, 16 Feb 2024 20:32:13 -0500 Subject: [PATCH] Use ListLenU64 where it's needed over ListLenUsize --- crates/compiler/mono/src/ir/pattern.rs | 27 ++++++++++++-------------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/crates/compiler/mono/src/ir/pattern.rs b/crates/compiler/mono/src/ir/pattern.rs index 155b3a2641..e04d6f72f4 100644 --- a/crates/compiler/mono/src/ir/pattern.rs +++ b/crates/compiler/mono/src/ir/pattern.rs @@ -1397,22 +1397,20 @@ pub(crate) fn build_list_index_probe<'a>( list_sym: Symbol, list_index: &ListIndex, ) -> (Symbol, impl DoubleEndedIterator>) { - let usize_layout = Layout::usize(env.target_info); - let list_index = list_index.0; let index_sym = env.unique_symbol(); 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_store = (index_sym, usize_layout, index_expr); + let index_store = (index_sym, Layout::U64, index_expr); (None, None, index_store) } else { let len_sym = env.unique_symbol(); let len_expr = Expr::Call(Call { call_type: CallType::LowLevel { - op: LowLevel::ListLenUsize, + op: LowLevel::ListLenU64, update_mode: env.next_update_mode_id(), }, 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]), }); - let len_store = (len_sym, usize_layout, len_expr); - let offset_store = (offset_sym, usize_layout, offset_expr); - let index_store = (index_sym, usize_layout, index_expr); + let len_store = (len_sym, Layout::U64, len_expr); + let offset_store = (offset_sym, Layout::U64, offset_expr); + let index_store = (index_sym, Layout::U64, index_expr); (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 { is_productive = true; - let usize_layout = Layout::usize(env.target_info); - let total_dropped = list_arity.min_len(); - let total_dropped_sym = env.unique_symbol(); 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_expr = Expr::Call(Call { 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(), }, 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]), }); let needed_stores = [ - (total_dropped_sym, total_dropped_expr, usize_layout), - (list_len_sym, list_len_expr, usize_layout), - (rest_len_sym, rest_len_expr, usize_layout), - (start_sym, start_expr, usize_layout), + (total_dropped_sym, total_dropped_expr, Layout::U64), + (list_len_sym, list_len_expr, Layout::U64), + (rest_len_sym, rest_len_expr, Layout::U64), + (start_sym, start_expr, Layout::U64), (*rest_sym, rest_expr, list_layout), ]; for (sym, expr, lay) in needed_stores.into_iter().rev() {