cache the initial context in inc_dec

This commit is contained in:
Folkert 2021-07-25 21:20:04 +02:00
parent f76195d05c
commit 31e1fe8870
2 changed files with 17 additions and 12 deletions

View file

@ -1259,14 +1259,25 @@ fn update_jp_live_vars(j: JoinPointId, ys: &[Param], v: &Stmt<'_>, m: &mut JPLiv
m.insert(j, j_live_vars); m.insert(j, j_live_vars);
} }
pub fn visit_proc<'a>( pub fn visit_procs<'a>(
arena: &'a Bump, arena: &'a Bump,
param_map: &'a ParamMap<'a>, param_map: &'a ParamMap<'a>,
proc: &mut Proc<'a>, procs: &mut MutMap<(Symbol, ProcLayout<'a>), Proc<'a>>,
layout: ProcLayout<'a>,
) { ) {
let ctx = Context::new(arena, param_map); let ctx = Context::new(arena, param_map);
for (key, proc) in procs.iter_mut() {
visit_proc(arena, param_map, &ctx, proc, key.1);
}
}
fn visit_proc<'a>(
arena: &'a Bump,
param_map: &'a ParamMap<'a>,
ctx: &Context<'a>,
proc: &mut Proc<'a>,
layout: ProcLayout<'a>,
) {
let params = match param_map.get_symbol(proc.name, layout) { let params = match param_map.get_symbol(proc.name, layout) {
Some(slice) => slice, Some(slice) => slice,
None => Vec::from_iter_in( None => Vec::from_iter_in(

View file

@ -222,9 +222,7 @@ impl<'a> Proc<'a> {
) { ) {
let borrow_params = arena.alloc(crate::borrow::infer_borrow(arena, procs)); let borrow_params = arena.alloc(crate::borrow::infer_borrow(arena, procs));
for (key, proc) in procs.iter_mut() { crate::inc_dec::visit_procs(arena, borrow_params, procs);
crate::inc_dec::visit_proc(arena, borrow_params, proc, key.1);
}
} }
pub fn insert_reset_reuse_operations<'i>( pub fn insert_reset_reuse_operations<'i>(
@ -430,9 +428,7 @@ impl<'a> Procs<'a> {
let borrow_params = arena.alloc(crate::borrow::infer_borrow(arena, &result)); let borrow_params = arena.alloc(crate::borrow::infer_borrow(arena, &result));
for (key, proc) in result.iter_mut() { crate::inc_dec::visit_procs(arena, borrow_params, &mut result);
crate::inc_dec::visit_proc(arena, borrow_params, proc, key.1);
}
result result
} }
@ -473,9 +469,7 @@ impl<'a> Procs<'a> {
let borrow_params = arena.alloc(crate::borrow::infer_borrow(arena, &result)); let borrow_params = arena.alloc(crate::borrow::infer_borrow(arena, &result));
for (key, proc) in result.iter_mut() { crate::inc_dec::visit_procs(arena, borrow_params, &mut result);
crate::inc_dec::visit_proc(arena, borrow_params, proc, key.1);
}
(result, borrow_params) (result, borrow_params)
} }