From dfff5eecca3f6a133fb4c82f29d221a4f406ed13 Mon Sep 17 00:00:00 2001
From: Russel Arbore <russel.jma@gmail.com>
Date: Thu, 27 Feb 2025 14:20:22 -0600
Subject: [PATCH] srad cpu schedule

---
 juno_samples/rodinia/srad/build.rs    |  2 ++
 juno_samples/rodinia/srad/src/cpu.sch | 35 +++++++++++++++++++++++++++
 juno_samples/rodinia/srad/src/srad.jn | 13 +++++-----
 3 files changed, 44 insertions(+), 6 deletions(-)
 create mode 100644 juno_samples/rodinia/srad/src/cpu.sch

diff --git a/juno_samples/rodinia/srad/build.rs b/juno_samples/rodinia/srad/build.rs
index 36ba6120..5e1f78f7 100644
--- a/juno_samples/rodinia/srad/build.rs
+++ b/juno_samples/rodinia/srad/build.rs
@@ -13,6 +13,8 @@ fn main() {
     JunoCompiler::new()
         .file_in_src("srad.jn")
         .unwrap()
+        .schedule_in_src("cpu.sch")
+        .unwrap()
         .build()
         .unwrap();
 }
diff --git a/juno_samples/rodinia/srad/src/cpu.sch b/juno_samples/rodinia/srad/src/cpu.sch
new file mode 100644
index 00000000..1a81ddad
--- /dev/null
+++ b/juno_samples/rodinia/srad/src/cpu.sch
@@ -0,0 +1,35 @@
+macro simpl!(X) {
+  ccp(X);
+  simplify-cfg(X);
+  lift-dc-math(X);
+  gvn(X);
+  phi-elim(X);
+  dce(X);
+  infer-schedules(X);
+}
+
+phi-elim(*);
+let loop1 = outline(srad@loop1);
+let loop2 = outline(srad@loop2);
+let loop3 = outline(srad@loop3);
+simpl!(*);
+const-inline(*);
+crc(*);
+slf(*);
+write-predication(*);
+simpl!(*);
+predication(*);
+simpl!(*);
+predication(*);
+simpl!(*);
+fixpoint {
+  forkify(*);
+  fork-guard-elim(*);
+  fork-coalesce(*);
+}
+simpl!(*);
+
+fork-split(*);
+unforkify(*);
+
+gcm(*);
diff --git a/juno_samples/rodinia/srad/src/srad.jn b/juno_samples/rodinia/srad/src/srad.jn
index 5eea647c..3e016a99 100644
--- a/juno_samples/rodinia/srad/src/srad.jn
+++ b/juno_samples/rodinia/srad/src/srad.jn
@@ -38,7 +38,7 @@ fn srad<nrows, ncols: usize>(
 
     // These loops should really be interchanged, but they aren't in the
     // Rodinia source (though they are in the HPVM source)
-    for i in 0..nrows {
+    @loop1 for i in 0..nrows {
       for j in 0..ncols {
         let tmp = image[j, i];
         sum += tmp;
@@ -57,7 +57,7 @@ fn srad<nrows, ncols: usize>(
 
     let c : f32[ncols, nrows];
 
-    for j in 0..ncols {
+    @loop2 for j in 0..ncols {
       for i in 0..nrows {
         let Jc = image[j, i];
         dN[j, i] = image[j, iN[i] as u64] - Jc;
@@ -75,14 +75,15 @@ fn srad<nrows, ncols: usize>(
         let qsqr = num / (den * den);
 
         let den = (qsqr - q0sqr) / (q0sqr * (1 + q0sqr));
-        c[j, i] = 1.0 / (1.0 + den);
+	let val = 1.0 / (1.0 + den);
 
-        if c[j, i] < 0      { c[j, i] = 0; }
-        else if c[j, i] > 1 { c[j, i] = 1; }
+        if val < 0      { c[j, i] = 0; }
+        else if val > 1 { c[j, i] = 1; }
+	else            { c[j, i] = val; }
       }
     }
 
-    for j in 0..ncols {
+    @loop3 for j in 0..ncols {
       for i in 0..nrows {
         let cN = c[j, i];
         let cS = c[j, iS[i] as u64];
-- 
GitLab