From 8dabbb84ffe44aa90c1a08800ab58f4fbd328473 Mon Sep 17 00:00:00 2001 From: Xavier Routh <xrouth2@illinois.edu> Date: Tue, 18 Feb 2025 11:05:22 -0600 Subject: [PATCH] fix to canonicalize all loops --- hercules_opt/src/loop_bound_canon.rs | 5 ++- juno_samples/fork_join_tests/src/cpu.sch | 5 ++- juno_scheduler/src/pm.rs | 48 +++++++++++++----------- 3 files changed, 35 insertions(+), 23 deletions(-) diff --git a/hercules_opt/src/loop_bound_canon.rs b/hercules_opt/src/loop_bound_canon.rs index 680236f1..3c6dc7ae 100644 --- a/hercules_opt/src/loop_bound_canon.rs +++ b/hercules_opt/src/loop_bound_canon.rs @@ -47,6 +47,8 @@ pub fn canonicalize_single_loop_bounds( ) -> bool { let function = editor.func(); + println!("canonicalizing {:?}", l.header); + let Some(loop_condition) = get_loop_exit_conditions(function, l, control_subgraph) else { return false; }; @@ -65,7 +67,7 @@ pub fn canonicalize_single_loop_bounds( if has_canonical_iv(editor, l, &ivs).is_some() { // println!("has canon iv!"); - return true; + return false; } let loop_bound_iv_phis = get_loop_condition_ivs(editor, l, &ivs, &loop_condition); @@ -305,5 +307,6 @@ pub fn canonicalize_single_loop_bounds( Ok(edit) }); + println!("result: {:?}", result); return result; } diff --git a/juno_samples/fork_join_tests/src/cpu.sch b/juno_samples/fork_join_tests/src/cpu.sch index 115cf171..ad226a7a 100644 --- a/juno_samples/fork_join_tests/src/cpu.sch +++ b/juno_samples/fork_join_tests/src/cpu.sch @@ -34,9 +34,12 @@ xdot[true](auto.test2); fixpoint panic after 20 { forkify(*); fork-guard-elim(*); - fork-coalesce(*); + fork-coalesce(*); + dce(*); } +xdot[true](auto.test2); + dce(*); gvn(*); diff --git a/juno_scheduler/src/pm.rs b/juno_scheduler/src/pm.rs index d83ff0bb..32f16063 100644 --- a/juno_scheduler/src/pm.rs +++ b/juno_scheduler/src/pm.rs @@ -2728,29 +2728,35 @@ fn run_pass( } Pass::LoopBoundCanon => { assert_eq!(args.len(), 0); + loop { + let mut inner_changed = false; + pm.make_fork_join_maps(); + pm.make_loops(); + pm.make_control_subgraphs(); + let fork_join_maps = pm.fork_join_maps.take().unwrap(); + let loops = pm.loops.take().unwrap(); + let control_subgraphs = pm.control_subgraphs.take().unwrap(); - pm.make_fork_join_maps(); - pm.make_loops(); - pm.make_control_subgraphs(); - let fork_join_maps = pm.fork_join_maps.take().unwrap(); - let loops = pm.loops.take().unwrap(); - let control_subgraphs = pm.control_subgraphs.take().unwrap(); - - for (((func, fork_join_map), loops), control_subgraph) in - build_selection(pm, selection, false) - .into_iter() - .zip(fork_join_maps.iter()) - .zip(loops.iter()) - .zip(control_subgraphs.iter()) - { - let Some(mut func) = func else { - continue; - }; - loop_bound_canon_toplevel(&mut func, fork_join_map, control_subgraph, loops); - changed |= func.modified(); + for (((func, fork_join_map), loops), control_subgraph) in + build_selection(pm, selection.clone(), false) + .into_iter() + .zip(fork_join_maps.iter()) + .zip(loops.iter()) + .zip(control_subgraphs.iter()) + { + let Some(mut func) = func else { + continue; + }; + loop_bound_canon_toplevel(&mut func, fork_join_map, control_subgraph, loops); + changed |= func.modified(); + inner_changed |= func.modified(); + } + pm.delete_gravestones(); + pm.clear_analyses(); + if !inner_changed { + break; + } } - pm.delete_gravestones(); - pm.clear_analyses(); } } println!("Ran Pass: {:?}", pass); -- GitLab