start using the solutions

This commit is contained in:
Folkert 2021-05-25 09:08:01 +02:00
parent 61f0fe0927
commit 2a61c3108e
4 changed files with 37 additions and 10 deletions

View file

@ -706,6 +706,7 @@ pub struct MonomorphizedModule<'a> {
pub type_problems: MutMap<ModuleId, Vec<solve::TypeError>>,
pub mono_problems: MutMap<ModuleId, Vec<roc_mono::ir::MonoProblem>>,
pub procedures: MutMap<(Symbol, TopLevelFunctionLayout<'a>), Proc<'a>>,
pub alias_analysis_solutions: AliasAnalysisSolutions,
pub exposed_to_host: MutMap<Symbol, Variable>,
pub header_sources: MutMap<ModuleId, (PathBuf, Box<str>)>,
pub sources: MutMap<ModuleId, (PathBuf, Box<str>)>,
@ -863,6 +864,19 @@ struct State<'a> {
pub layout_caches: std::vec::Vec<LayoutCache<'a>>,
pub procs: Procs<'a>,
pub alias_analysis_solutions: AliasAnalysisSolutions,
}
pub enum AliasAnalysisSolutions {
NotAvailable,
Available(morphic_lib::Solutions),
}
impl std::fmt::Debug for AliasAnalysisSolutions {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "AliasAnalysisSolutions {{}}")
}
}
#[derive(Debug)]
@ -1472,6 +1486,7 @@ where
specializations_in_flight: 0,
layout_caches: std::vec::Vec::with_capacity(num_cpus::get()),
procs: Procs::new_in(arena),
alias_analysis_solutions: AliasAnalysisSolutions::NotAvailable,
};
// We've now distributed one worker queue to each thread.
@ -2061,14 +2076,6 @@ fn update<'a>(
println!("{}", result);
}
if false {
let it = state.procedures.iter().map(|x| x.1);
if let Err(e) = roc_mono::alias_analysis::spec_program(it) {
println!("Error in alias analysis: {:?}", e)
}
}
Proc::insert_refcount_operations(arena, &mut state.procedures);
Proc::optimize_refcount_operations(
@ -2078,6 +2085,18 @@ fn update<'a>(
&mut state.procedures,
);
if true {
let it = state.procedures.iter().map(|x| x.1);
match roc_mono::alias_analysis::spec_program(it) {
Err(e) => panic!("Error in alias analysis: {:?}", e),
Ok(solutions) => {
state.alias_analysis_solutions =
AliasAnalysisSolutions::Available(solutions)
}
}
}
state.constrained_ident_ids.insert(module_id, ident_ids);
for (module_id, requested) in external_specializations_requested {
@ -2157,6 +2176,7 @@ fn finish_specialization(
let State {
procedures,
alias_analysis_solutions,
module_cache,
output_path,
platform_path,
@ -2218,6 +2238,7 @@ fn finish_specialization(
subs,
interns,
procedures,
alias_analysis_solutions,
sources,
header_sources,
timings: state.timings,