From a8a2fc3b61e010278a1ca622cd6aaab6f77ff140 Mon Sep 17 00:00:00 2001 From: Russel Arbore <russel.jma@gmail.com> Date: Wed, 12 Feb 2025 17:13:04 -0600 Subject: [PATCH] Just do fork unrolling --- hercules_opt/src/fork_transforms.rs | 15 +++++++++++++++ hercules_opt/src/lib.rs | 2 -- hercules_opt/src/unroll.rs | 18 ------------------ juno_scheduler/src/compile.rs | 2 +- juno_scheduler/src/ir.rs | 2 +- juno_scheduler/src/pm.rs | 12 ++++++------ 6 files changed, 23 insertions(+), 28 deletions(-) delete mode 100644 hercules_opt/src/unroll.rs diff --git a/hercules_opt/src/fork_transforms.rs b/hercules_opt/src/fork_transforms.rs index fd6747d7..539b7fd1 100644 --- a/hercules_opt/src/fork_transforms.rs +++ b/hercules_opt/src/fork_transforms.rs @@ -1164,3 +1164,18 @@ fn fork_interchange( edit.delete_node(fork) }); } + +/* + * Run fork unrolling on all fork-joins that are mutable in an editor. + */ +pub fn fork_unroll_all_forks(editor: &mut FunctionEditor, fork_joins: &HashMap<NodeID, NodeID>) { + for (fork, join) in fork_joins { + if editor.is_mutable(*fork) && fork_unroll(editor, *fork, *join) { + break; + } + } +} + +pub fn fork_unroll(editor: &mut FunctionEditor, fork: NodeID, join: NodeID) -> bool { + false +} diff --git a/hercules_opt/src/lib.rs b/hercules_opt/src/lib.rs index a810dfbf..7187508a 100644 --- a/hercules_opt/src/lib.rs +++ b/hercules_opt/src/lib.rs @@ -23,7 +23,6 @@ pub mod simplify_cfg; pub mod slf; pub mod sroa; pub mod unforkify; -pub mod unroll; pub mod utils; pub use crate::ccp::*; @@ -49,5 +48,4 @@ pub use crate::simplify_cfg::*; pub use crate::slf::*; pub use crate::sroa::*; pub use crate::unforkify::*; -pub use crate::unroll::*; pub use crate::utils::*; diff --git a/hercules_opt/src/unroll.rs b/hercules_opt/src/unroll.rs deleted file mode 100644 index f3c795ca..00000000 --- a/hercules_opt/src/unroll.rs +++ /dev/null @@ -1,18 +0,0 @@ -use bitvec::prelude::*; - -use hercules_ir::*; - -use crate::*; - -/* - * Run loop unrolling on all loops that are mutable in an editor. - */ -pub fn loop_unroll_all_loops(editor: &mut FunctionEditor, loops: &LoopTree) { - for (header, contents) in loops.bottom_up_loops() { - if editor.is_mutable(header) { - loop_unroll(editor, header, contents); - } - } -} - -pub fn loop_unroll(editor: &mut FunctionEditor, header: NodeID, contents: &BitVec<u8, Lsb0>) {} diff --git a/juno_scheduler/src/compile.rs b/juno_scheduler/src/compile.rs index 9d5a86cc..6b40001c 100644 --- a/juno_scheduler/src/compile.rs +++ b/juno_scheduler/src/compile.rs @@ -113,8 +113,8 @@ impl FromStr for Appliable { "fork-dim-merge" => Ok(Appliable::Pass(ir::Pass::ForkDimMerge)), "fork-interchange" => Ok(Appliable::Pass(ir::Pass::ForkInterchange)), "fork-chunk" | "fork-tile" => Ok(Appliable::Pass(ir::Pass::ForkChunk)), + "fork-unroll" | "unroll" => Ok(Appliable::Pass(ir::Pass::ForkUnroll)), "lift-dc-math" => Ok(Appliable::Pass(ir::Pass::LiftDCMath)), - "loop-unroll" | "unroll" => Ok(Appliable::Pass(ir::Pass::LoopUnroll)), "outline" => Ok(Appliable::Pass(ir::Pass::Outline)), "phi-elim" => Ok(Appliable::Pass(ir::Pass::PhiElim)), "predication" => Ok(Appliable::Pass(ir::Pass::Predication)), diff --git a/juno_scheduler/src/ir.rs b/juno_scheduler/src/ir.rs index 1bb6cf13..840f25a6 100644 --- a/juno_scheduler/src/ir.rs +++ b/juno_scheduler/src/ir.rs @@ -16,6 +16,7 @@ pub enum Pass { ForkGuardElim, ForkInterchange, ForkSplit, + ForkUnroll, Forkify, GCM, GVN, @@ -23,7 +24,6 @@ pub enum Pass { Inline, InterproceduralSROA, LiftDCMath, - LoopUnroll, Outline, PhiElim, Predication, diff --git a/juno_scheduler/src/pm.rs b/juno_scheduler/src/pm.rs index 5c6aec5e..951ba51d 100644 --- a/juno_scheduler/src/pm.rs +++ b/juno_scheduler/src/pm.rs @@ -1665,19 +1665,19 @@ fn run_pass( pm.delete_gravestones(); pm.clear_analyses(); } - Pass::LoopUnroll => { + Pass::ForkUnroll => { assert_eq!(args.len(), 0); - pm.make_loops(); - let loops = pm.loops.take().unwrap(); - for (func, loops) in build_selection(pm, selection, false) + pm.make_fork_join_maps(); + let fork_join_maps = pm.fork_join_maps.take().unwrap(); + for (func, fork_join_map) in build_selection(pm, selection, false) .into_iter() - .zip(loops.iter()) + .zip(fork_join_maps.iter()) { let Some(mut func) = func else { continue; }; - loop_unroll_all_loops(&mut func, loops); + fork_unroll_all_forks(&mut func, fork_join_map); changed |= func.modified(); } pm.delete_gravestones(); -- GitLab