diff --git a/hercules_opt/src/loop_bound_canon.rs b/hercules_opt/src/loop_bound_canon.rs index 680236f168c04fb26f8f8befd9ea865835235fca..3c6dc7ae028cad477969705bd453aedb4dcb167b 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 115cf171989303f0cef999cdfc6bbc1c1fb05e94..ad226a7aa7c9d2270f4480b8825324198046521a 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 d83ff0bb5df2a2814d550faeb800a4f0392e15c4..32f16063cc003d08c30b2e1401628e5a09085f55 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);