diff --git a/hercules_opt/src/fork_transforms.rs b/hercules_opt/src/fork_transforms.rs
index fd6747d7a15628034bc98f7ef3ebc00631f8abae..539b7fd19efd6ed1db2f027c93c00774355f8f3a 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 a810dfbf5798de4c3bc6f11136ef1b8569243ccb..7187508a31240071849a26b85100e89607786b2f 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 f3c795ca951d51c7f095d813981938c998c3fd70..0000000000000000000000000000000000000000
--- 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 9d5a86ccbac9e7b33e4c2a81a8d1633062edef24..6b40001c2b3324176913b1e843934d422ed2e711 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 1bb6cf1342c7b2d167e5e92e908f34ce54d0e4b5..840f25a6e9dc986ab064adecbeba822ca47016d8 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 5c6aec5e6af2b48b84cdeff6abec0644975703dd..951ba51daa1e3857e50a35cf87cac34d7f07b649 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();