From 31db6796a6f4dc36b5343be69b38e3e53baf5e25 Mon Sep 17 00:00:00 2001
From: Russel Arbore <russel.jma@gmail.com>
Date: Mon, 24 Feb 2025 16:14:26 -0600
Subject: [PATCH] Transform conv test

---
 hercules_opt/src/fork_transforms.rs           |  8 +++++++-
 .../fork_join_tests/src/fork_join_tests.jn    |  3 ++-
 juno_samples/fork_join_tests/src/gpu.sch      | 20 ++++++++++++++++++-
 juno_samples/fork_join_tests/src/main.rs      |  2 +-
 4 files changed, 29 insertions(+), 4 deletions(-)

diff --git a/hercules_opt/src/fork_transforms.rs b/hercules_opt/src/fork_transforms.rs
index e635b3c0..ae3dfe22 100644
--- a/hercules_opt/src/fork_transforms.rs
+++ b/hercules_opt/src/fork_transforms.rs
@@ -695,7 +695,8 @@ pub fn fork_coalesce_helper(
 
         editor.edit(|mut edit| {
             let new_tid = edit.add_node(new_tid);
-            let edit = edit.replace_all_uses(tid, new_tid)?;
+            let mut edit = edit.replace_all_uses(tid, new_tid)?;
+            edit.sub_edit(tid, new_tid);
             Ok(edit)
         });
     }
@@ -1598,3 +1599,8 @@ pub fn clean_monoid_reduces(editor: &mut FunctionEditor, typing: &Vec<TypeID>) {
         }
     }
 }
+
+/*
+ * Looks for reads in fork-joins that are linear in the thread IDs for the fork-
+ * join.
+ */
diff --git a/juno_samples/fork_join_tests/src/fork_join_tests.jn b/juno_samples/fork_join_tests/src/fork_join_tests.jn
index 3b7c7833..334fc2bf 100644
--- a/juno_samples/fork_join_tests/src/fork_join_tests.jn
+++ b/juno_samples/fork_join_tests/src/fork_join_tests.jn
@@ -124,7 +124,8 @@ fn test8(input : i32) -> i32[8] {
 }
 
 #[entry]
-fn test9<r, c, z : usize>(input : i32[r, c]) -> i32[r, c] {
+fn test9<r, c : usize>(input : i32[r, c]) -> i32[r, c] {
+  const z = 3;
   const rad = z / 2;
   @const let out : i32[r, c];
 
diff --git a/juno_samples/fork_join_tests/src/gpu.sch b/juno_samples/fork_join_tests/src/gpu.sch
index c554fd50..ca17f692 100644
--- a/juno_samples/fork_join_tests/src/gpu.sch
+++ b/juno_samples/fork_join_tests/src/gpu.sch
@@ -73,6 +73,24 @@ dce(auto.test8);
 simplify-cfg(auto.test8);
 dce(auto.test8);
 
+fork-split(auto.test9@filter_loop);
+fork-unroll(auto.test9);
+fork-unroll(auto.test9);
+dce(auto.test9);
+ccp(auto.test9);
+gvn(auto.test9);
+phi-elim(auto.test9);
+dce(auto.test9);
+fixpoint {
+  predication(auto.test9);
+  simplify-cfg(auto.test9);
+}
+ccp(auto.test9);
+gvn(auto.test9);
+phi-elim(auto.test9);
+lift-dc-math(auto.test9);
+dce(auto.test9);
+
 ip-sroa(*);
 sroa(*);
 dce(*);
@@ -80,7 +98,7 @@ ccp(*);
 gvn(*);
 phi-elim(*);
 dce(*);
-gcm(*);
 
+gcm(*);
 float-collections(test2, auto.test2, test4, auto.test4, test5, auto.test5);
 gcm(*);
diff --git a/juno_samples/fork_join_tests/src/main.rs b/juno_samples/fork_join_tests/src/main.rs
index fa99f759..e66309b2 100644
--- a/juno_samples/fork_join_tests/src/main.rs
+++ b/juno_samples/fork_join_tests/src/main.rs
@@ -61,7 +61,7 @@ fn main() {
         let mut r = runner!(test9);
         let input = vec![1, 2, 3, 4, 5, 6, 7, 8, 9];
         let input = HerculesImmBox::from(&input as &[i32]);
-        let output = r.run(3, 3, 3, input.to()).await;
+        let output = r.run(3, 3, input.to()).await;
         let correct = vec![
             1 + 2 + 4 + 5,
             1 + 2 + 3 + 4 + 5 + 6,
-- 
GitLab