Revert "Store layouts in a layout-buffer for expects"

This reverts commit bba6e36a18.
This commit is contained in:
Ayaz Hafiz 2022-12-14 14:05:46 -06:00
parent bba6e36a18
commit 897b69b072
No known key found for this signature in database
GPG key ID: 0E2A37416A25EF58
8 changed files with 30 additions and 67 deletions

View file

@ -2222,7 +2222,7 @@ macro_rules! debug_print_ir {
}
macro_rules! debug_check_ir {
($state:expr, $arena:expr, $interner:expr, $layout_buffers:expr, $flag:path) => {
($state:expr, $arena:expr, $interner:expr, $flag:path) => {
dbg_do!($flag, {
use roc_mono::debug::{check_procs, format_problems};
@ -2233,7 +2233,7 @@ macro_rules! debug_check_ir {
let procedures = &$state.procedures;
let problems = check_procs($arena, $interner, $layout_buffers, procedures);
let problems = check_procs($arena, $interner, procedures);
if !problems.is_empty() {
let formatted = format_problems(&interns, $interner, problems);
eprintln!("IR PROBLEMS FOUND:\n{formatted}");
@ -2958,18 +2958,10 @@ fn update<'a>(
.unwrap()
.expect("outstanding references to global layout interener, but we just drained all layout caches");
let layout_buffers = &state.module_cache.layout_buffers;
log!("specializations complete from {:?}", module_id);
debug_print_ir!(state, &layout_interner, ROC_PRINT_IR_AFTER_SPECIALIZATION);
debug_check_ir!(
state,
arena,
&layout_interner,
layout_buffers,
ROC_CHECK_MONO_IR
);
debug_check_ir!(state, arena, &layout_interner, ROC_CHECK_MONO_IR);
let ident_ids = state.constrained_ident_ids.get_mut(&module_id).unwrap();

View file

@ -2,7 +2,7 @@
use bumpalo::Bump;
use roc_collections::{MutMap, VecMap, VecSet};
use roc_module::symbol::{ModuleId, Symbol};
use roc_module::symbol::Symbol;
use crate::{
ir::{
@ -10,7 +10,6 @@ use crate::{
ModifyRc, Param, Proc, ProcLayout, Stmt,
},
layout::{Builtin, Layout, STLayoutInterner, TagIdIntType, UnionLayout},
LayoutBuffer,
};
pub enum UseKind {
@ -133,7 +132,6 @@ impl<'a> Problems<'a> {
pub fn check_procs<'a>(
arena: &'a Bump,
interner: &'a STLayoutInterner<'a>,
layout_buffers: &VecMap<ModuleId, LayoutBuffer<'a>>,
procs: &'a Procs<'a>,
) -> Problems<'a> {
let mut problems = Default::default();
@ -151,7 +149,6 @@ pub fn check_procs<'a>(
venv: Default::default(),
joinpoints: Default::default(),
line: 0,
layout_buffers,
};
ctx.check_proc(proc);
}
@ -169,7 +166,6 @@ struct Ctx<'a, 'r> {
proc: &'a Proc<'a>,
proc_layout: ProcLayout<'a>,
procs: &'r Procs<'a>,
layout_buffers: &'r VecMap<ModuleId, LayoutBuffer<'a>>,
call_spec_ids: CallSpecIds,
ret_layout: Layout<'a>,
venv: VEnv<'a>,
@ -328,10 +324,8 @@ impl<'a, 'r> Ctx<'a, 'r> {
Layout::Builtin(Builtin::Bool),
UseKind::ExpectCond,
);
let layout_buffer = self.layout_buffers.get(&condition.module_id()).unwrap();
let layouts = layout_buffer.iter_slice(layouts);
for (sym, lay) in lookups.iter().zip(layouts) {
self.check_sym_layout(*sym, lay, UseKind::ExpectLookup);
self.check_sym_layout(*sym, *lay, UseKind::ExpectLookup);
}
self.check_stmt(remainder);
}

View file

@ -1207,7 +1207,7 @@ impl<'a, 'i> Context<'a, 'i> {
condition: *condition,
region: *region,
lookups,
layouts: *layouts,
layouts,
remainder: b,
});
@ -1231,7 +1231,7 @@ impl<'a, 'i> Context<'a, 'i> {
condition: *condition,
region: *region,
lookups,
layouts: *layouts,
layouts,
remainder: b,
});

View file

@ -13,7 +13,6 @@ use roc_can::abilities::SpecializationId;
use roc_can::expr::{AnnotatedMark, ClosureData, ExpectLookup, IntValue};
use roc_can::module::ExposedByModule;
use roc_collections::all::{default_hasher, BumpMap, BumpMapDefault, MutMap};
use roc_collections::soa::Slice;
use roc_collections::VecMap;
use roc_debug_flags::dbg_do;
#[cfg(debug_assertions)]
@ -1625,7 +1624,7 @@ pub enum Stmt<'a> {
condition: Symbol,
region: Region,
lookups: &'a [Symbol],
layouts: Slice<Layout<'a>>,
layouts: &'a [Layout<'a>],
/// what happens after the expect
remainder: &'a Stmt<'a>,
},
@ -1633,7 +1632,7 @@ pub enum Stmt<'a> {
condition: Symbol,
region: Region,
lookups: &'a [Symbol],
layouts: Slice<Layout<'a>>,
layouts: &'a [Layout<'a>],
/// what happens after the expect
remainder: &'a Stmt<'a>,
},
@ -6599,14 +6598,11 @@ pub fn from_can<'a>(
}
}
let layouts_slice = env.layout_buffer.reserve(layouts.len());
env.layout_buffer.set_reserved(layouts_slice, layouts);
let mut stmt = Stmt::Expect {
condition: cond_symbol,
region: loc_condition.region,
lookups: lookups.into_bump_slice(),
layouts: layouts_slice,
layouts: layouts.into_bump_slice(),
remainder: env.arena.alloc(rest),
};
@ -6658,14 +6654,11 @@ pub fn from_can<'a>(
}
}
let layouts_slice = env.layout_buffer.reserve(layouts.len());
env.layout_buffer.set_reserved(layouts_slice, layouts);
let mut stmt = Stmt::ExpectFx {
condition: cond_symbol,
region: loc_condition.region,
lookups: lookups.into_bump_slice(),
layouts: layouts_slice,
layouts: layouts.into_bump_slice(),
remainder: env.arena.alloc(rest),
};
@ -7106,7 +7099,7 @@ fn substitute_in_stmt_help<'a>(
condition: substitute(subs, *condition).unwrap_or(*condition),
region: *region,
lookups: new_lookups.into_bump_slice(),
layouts: *layouts,
layouts,
remainder: new_remainder,
};
@ -7132,7 +7125,7 @@ fn substitute_in_stmt_help<'a>(
condition: substitute(subs, *condition).unwrap_or(*condition),
region: *region,
lookups: new_lookups.into_bump_slice(),
layouts: *layouts,
layouts,
remainder: new_remainder,
};

View file

@ -11,19 +11,14 @@ impl<'a> LayoutBuffer<'a> {
Slice::extend_new(&mut self.0, std::iter::repeat(Layout::VOID).take(size))
}
pub fn set_reserved<I>(&mut self, slice: Slice<Layout<'a>>, layouts: I)
where
I: IntoIterator<Item = Layout<'a>>,
I::IntoIter: ExactSizeIterator,
{
let layouts = layouts.into_iter();
pub fn set_reserved(
&mut self,
slice: Slice<Layout<'a>>,
layouts: impl ExactSizeIterator<Item = Layout<'a>>,
) {
debug_assert_eq!(layouts.len(), slice.len());
for (index, layout) in slice.indices().zip(layouts) {
self.0[index] = layout;
}
}
pub fn iter_slice(&self, slice: Slice<Layout<'a>>) -> impl Iterator<Item = Layout<'a>> + '_ {
self.0[slice.indices()].iter().copied()
}
}

View file

@ -208,7 +208,7 @@ fn function_s<'a, 'i>(
condition: *condition,
region: *region,
lookups,
layouts: *layouts,
layouts,
remainder: new_continuation,
};
@ -233,7 +233,7 @@ fn function_s<'a, 'i>(
condition: *condition,
region: *region,
lookups,
layouts: *layouts,
layouts,
remainder: new_continuation,
};
@ -452,7 +452,7 @@ fn function_d_main<'a, 'i>(
condition: *condition,
region: *region,
lookups,
layouts: *layouts,
layouts,
remainder: b,
};
@ -464,7 +464,7 @@ fn function_d_main<'a, 'i>(
condition: *condition,
region: *region,
lookups,
layouts: *layouts,
layouts,
remainder: b,
};
@ -485,7 +485,7 @@ fn function_d_main<'a, 'i>(
condition: *condition,
region: *region,
lookups,
layouts: *layouts,
layouts,
remainder: b,
};
@ -497,7 +497,7 @@ fn function_d_main<'a, 'i>(
condition: *condition,
region: *region,
lookups,
layouts: *layouts,
layouts,
remainder: b,
};
@ -669,7 +669,7 @@ fn function_r<'a, 'i>(env: &mut Env<'a, 'i>, stmt: &'a Stmt<'a>) -> &'a Stmt<'a>
condition: *condition,
region: *region,
lookups,
layouts: *layouts,
layouts,
remainder: b,
};
@ -689,7 +689,7 @@ fn function_r<'a, 'i>(env: &mut Env<'a, 'i>, stmt: &'a Stmt<'a>) -> &'a Stmt<'a>
condition: *condition,
region: *region,
lookups,
layouts: *layouts,
layouts,
remainder: b,
};

View file

@ -267,7 +267,7 @@ fn insert_jumps<'a>(
condition: *condition,
region: *region,
lookups,
layouts: *layouts,
layouts,
remainder: cont,
})),
None => None,
@ -291,7 +291,7 @@ fn insert_jumps<'a>(
condition: *condition,
region: *region,
lookups,
layouts: *layouts,
layouts,
remainder: cont,
})),
None => None,

View file

@ -15,18 +15,15 @@ const EXPANDED_STACK_SIZE: usize = 8 * 1024 * 1024;
use bumpalo::Bump;
use roc_collections::all::MutMap;
use roc_collections::VecMap;
use roc_load::ExecutionMode;
use roc_load::LoadConfig;
use roc_load::LoadMonomorphizedError;
use roc_load::Threading;
use roc_module::symbol::Interns;
use roc_module::symbol::ModuleId;
use roc_module::symbol::Symbol;
use roc_mono::ir::Proc;
use roc_mono::ir::ProcLayout;
use roc_mono::layout::STLayoutInterner;
use roc_mono::LayoutBuffer;
use test_mono_macros::*;
const TARGET_INFO: roc_target::TargetInfo = roc_target::TargetInfo::default_x86_64();
@ -140,7 +137,6 @@ fn compiles_to_ir(test_name: &str, src: &str, mode: &str, no_check: bool) {
exposed_to_host,
layout_interner,
interns,
layout_buffers,
..
} = loaded;
@ -156,13 +152,7 @@ fn compiles_to_ir(test_name: &str, src: &str, mode: &str, no_check: bool) {
let main_fn_symbol = exposed_to_host.values.keys().copied().next();
if !no_check {
check_procedures(
arena,
&interns,
&layout_interner,
&layout_buffers,
&procedures,
);
check_procedures(arena, &interns, &layout_interner, &procedures);
}
verify_procedures(test_name, layout_interner, procedures, main_fn_symbol);
@ -172,11 +162,10 @@ fn check_procedures<'a>(
arena: &'a Bump,
interns: &Interns,
interner: &STLayoutInterner<'a>,
layout_buffers: &VecMap<ModuleId, LayoutBuffer<'a>>,
procedures: &MutMap<(Symbol, ProcLayout<'a>), Proc<'a>>,
) {
use roc_mono::debug::{check_procs, format_problems};
let problems = check_procs(arena, interner, layout_buffers, procedures);
let problems = check_procs(arena, interner, procedures);
if problems.is_empty() {
return;
}