From 4710ab4e512bcf0ce803325dba7f78f3cba106a8 Mon Sep 17 00:00:00 2001
From: Russel Arbore <russel.jma@gmail.com>
Date: Wed, 12 Feb 2025 10:45:04 -0600
Subject: [PATCH 1/3] fix getting dc params, add graphs for paper

---
 .gitignore                               |   1 +
 hercules_opt/src/inline.rs               |  35 +++++++---------
 hercules_opt/src/interprocedural_sroa.rs |  26 ++++++------
 juno_scheduler/src/default.rs            |   1 +
 paper_resources/arr_sum_ir.dot           |  49 +++++++++++++++++++++++
 paper_resources/arr_sum_ir.pdf           | Bin 0 -> 17654 bytes
 6 files changed, 78 insertions(+), 34 deletions(-)
 create mode 100644 paper_resources/arr_sum_ir.dot
 create mode 100644 paper_resources/arr_sum_ir.pdf

diff --git a/.gitignore b/.gitignore
index 87af5349..516108dd 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,5 +1,6 @@
 /target
 *.dot
+!paper_resources/*.dot
 *.bc
 *.out
 *.ll
diff --git a/hercules_opt/src/inline.rs b/hercules_opt/src/inline.rs
index 848d957f..f01b2366 100644
--- a/hercules_opt/src/inline.rs
+++ b/hercules_opt/src/inline.rs
@@ -24,21 +24,19 @@ pub fn inline(editors: &mut [FunctionEditor], callgraph: &CallGraph) {
         .map(|editor| collapse_returns(editor))
         .collect();
 
-    // Step 3: verify that each possible dynamic constant parameter index has a
-    // single unique dynamic constant ID. If this isn't true, dynamic constant
-    // substitution won't work, and this should be true anyway!
-    let mut found_idxs = HashMap::new();
-    for id in editors[0].dynamic_constant_ids() {
-        let dc = editors[0].get_dynamic_constant(id);
-        if let DynamicConstant::Parameter(idx) = *dc {
-            assert!(!found_idxs.contains_key(&idx));
-            found_idxs.insert(idx, id);
-        }
-    }
-    let mut dc_param_idx_to_dc_id = vec![];
-    for idx in 0..found_idxs.len() {
-        dc_param_idx_to_dc_id.push(found_idxs[&idx]);
-    }
+    // Step 3: get dynamic constant IDs for parameters.
+    let max_num_dc_params = editors
+        .iter()
+        .map(|editor| editor.func().num_dynamic_constants)
+        .max()
+        .unwrap();
+    let mut dc_args = vec![];
+    editors[0].edit(|mut edit| {
+        dc_args = (0..max_num_dc_params as usize)
+            .map(|i| edit.add_dynamic_constant(DynamicConstant::Parameter(i)))
+            .collect();
+        Ok(edit)
+    });
 
     // Step 4: run inlining on each function individually. Iterate the functions
     // in topological order.
@@ -49,12 +47,7 @@ pub fn inline(editors: &mut [FunctionEditor], callgraph: &CallGraph) {
         // 2. Shared references to all of the functions called by that function.
         let callees = callgraph.get_callees(to_inline_id);
         let editor_refs = get_mut_and_immuts(editors, to_inline_id, callees);
-        inline_func(
-            editor_refs.0,
-            editor_refs.1,
-            &single_return_nodes,
-            &dc_param_idx_to_dc_id,
-        );
+        inline_func(editor_refs.0, editor_refs.1, &single_return_nodes, &dc_args);
     }
 }
 
diff --git a/hercules_opt/src/interprocedural_sroa.rs b/hercules_opt/src/interprocedural_sroa.rs
index b345f9bc..944ef8fd 100644
--- a/hercules_opt/src/interprocedural_sroa.rs
+++ b/hercules_opt/src/interprocedural_sroa.rs
@@ -235,18 +235,18 @@ fn compress_return_products(editors: &mut Vec<FunctionEditor>, all_callsites_edi
     // dc_param_idx_to_dc_id to get the id of the dynamic constants in the function,
     // and then replace dc_param_idx_to_dc_id[i] with call.dynamic_constants[i],
     // for all i.
-    let mut found_idxs = HashMap::new();
-    for id in editors[0].dynamic_constant_ids() {
-        let dc = editors[0].get_dynamic_constant(id);
-        if let DynamicConstant::Parameter(idx) = *dc {
-            assert!(!found_idxs.contains_key(&idx));
-            found_idxs.insert(idx, id);
-        }
-    }
-    let mut dc_param_idx_to_dc_id = vec![];
-    for idx in 0..found_idxs.len() {
-        dc_param_idx_to_dc_id.push(found_idxs[&idx]);
-    }
+    let max_num_dc_params = editors
+        .iter()
+        .map(|editor| editor.func().num_dynamic_constants)
+        .max()
+        .unwrap();
+    let mut dc_args = vec![];
+    editors[0].edit(|mut edit| {
+        dc_args = (0..max_num_dc_params as usize)
+            .map(|i| edit.add_dynamic_constant(DynamicConstant::Parameter(i)))
+            .collect();
+        Ok(edit)
+    });
 
     // Step 2. Modify the return type of all editors corresponding to a function
     // for which we can edit every callsite, and the return type is a product.
@@ -314,7 +314,7 @@ fn compress_return_products(editors: &mut Vec<FunctionEditor>, all_callsites_edi
             // a better abstraction around bulk replacement.
 
             let new_dcs = (*dynamic_constants).to_vec();
-            let old_dcs = dc_param_idx_to_dc_id[..new_dcs.len()].to_vec();
+            let old_dcs = dc_args[..new_dcs.len()].to_vec();
             assert_eq!(old_dcs.len(), new_dcs.len());
             let substs = old_dcs
                 .into_iter()
diff --git a/juno_scheduler/src/default.rs b/juno_scheduler/src/default.rs
index 3f4af107..8ef3d662 100644
--- a/juno_scheduler/src/default.rs
+++ b/juno_scheduler/src/default.rs
@@ -64,6 +64,7 @@ pub fn default_schedule() -> ScheduleStmt {
         DCE,
         GVN,
         DCE,
+        Xdot,
         LiftDCMath,
         DCE,
         GVN,
diff --git a/paper_resources/arr_sum_ir.dot b/paper_resources/arr_sum_ir.dot
new file mode 100644
index 00000000..7479b259
--- /dev/null
+++ b/paper_resources/arr_sum_ir.dot
@@ -0,0 +1,49 @@
+digraph "Module" {
+margin=0;
+subgraph sum {
+label="sum<1>"
+style=invis
+cluster=true
+ranksep=1;
+nodesep=1;
+start_0_0 [xlabel=0, label=<Start<BR /><FONT POINT-SIZE="8">Control</FONT>>, color=darkred];
+parameter_0_1 [xlabel=1, label=<Parameter (#0)<BR /><FONT POINT-SIZE="8">Array(Float32, #0)</FONT>>, color=darkblue];
+dynamic_constant_0_2 [xlabel=2, label=<DynamicConstant (#0)<BR /><FONT POINT-SIZE="8">UnsignedInteger64</FONT>>, color=darkblue];
+projection_0_3 [xlabel=3, label=<Projection<BR /><FONT POINT-SIZE="8">Control</FONT>>, color=darkred];
+add_0_4 [xlabel=4, label=<Add<BR /><FONT POINT-SIZE="8">UnsignedInteger64</FONT>>, color=darkblue];
+add_0_5 [xlabel=5, label=<Add<BR /><FONT POINT-SIZE="8">Float32</FONT>>, color=darkblue];
+read_0_6 [xlabel=6, label=<Read<BR /><FONT POINT-SIZE="8">Float32</FONT>>, color=darkblue];
+lt_0_7 [xlabel=7, label=<LT<BR /><FONT POINT-SIZE="8">Boolean</FONT>>, color=darkblue];
+if_0_8 [xlabel=8, label=<If<BR /><FONT POINT-SIZE="8">Control</FONT>>, color=darkred];
+projection_0_9 [xlabel=9, label=<Projection<BR /><FONT POINT-SIZE="8">Control</FONT>>, color=darkred];
+return_0_10 [xlabel=10, label=<Return>, color=darkred];
+constant_0_11 [xlabel=11, label=<Constant (0)<BR /><FONT POINT-SIZE="8">UnsignedInteger64</FONT>>, color=darkblue];
+constant_0_12 [xlabel=12, label=<Constant (1)<BR /><FONT POINT-SIZE="8">UnsignedInteger64</FONT>>, color=darkblue];
+constant_0_13 [xlabel=13, label=<Constant (0)<BR /><FONT POINT-SIZE="8">Float32</FONT>>, color=darkblue];
+phi_0_14 [xlabel=14, label=<Phi<BR /><FONT POINT-SIZE="8">UnsignedInteger64</FONT>>, color=darkblue];
+phi_0_15 [xlabel=15, label=<Phi<BR /><FONT POINT-SIZE="8">Float32</FONT>>, color=darkblue];
+region_0_16 [xlabel=16, label=<Region<BR /><FONT POINT-SIZE="8">Control</FONT>>, color=darkred];
+if_0_8 -> projection_0_3 [color=black, style="dashed"];
+phi_0_14 -> add_0_4 [color=black, style=""];
+constant_0_12 -> add_0_4 [color=black, style=""];
+phi_0_15 -> add_0_5 [color=black, style=""];
+read_0_6 -> add_0_5 [color=black, style=""];
+parameter_0_1 -> read_0_6 [color=black, style=""];
+phi_0_14 -> read_0_6 [color=black, style=""];
+add_0_4 -> lt_0_7 [color=black, style=""];
+dynamic_constant_0_2 -> lt_0_7 [color=black, style=""];
+if_0_8 -> region_0_16 [dir=back, color=black, style="dashed"];
+lt_0_7 -> if_0_8 [color=black, style="dotted"];
+if_0_8 -> projection_0_9 [color=black, style="dashed"];
+projection_0_9 -> return_0_10 [color=black, style="dashed"];
+add_0_5 -> return_0_10 [color=black, style="dotted"];
+constant_0_11 -> phi_0_14 [color=black, style=""];
+phi_0_14 -> add_0_4 [dir=back, color=black, style=""];
+region_0_16 -> phi_0_14 [color=black, style="dotted"];
+constant_0_13 -> phi_0_15 [color=black, style=""];
+add_0_5 -> phi_0_15 [color=black, style=""];
+region_0_16 -> phi_0_15 [color=black, style="dotted"];
+start_0_0 -> region_0_16 [color=black, style="dashed"];
+projection_0_3 -> region_0_16 [color=black, style="dashed"];
+}
+}
diff --git a/paper_resources/arr_sum_ir.pdf b/paper_resources/arr_sum_ir.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..61c5e4314dd3a4a61064e228fc6ec50acc17232c
GIT binary patch
literal 17654
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
b^m=hgVo^y&5ztqL<|YOvT&k+B{%%|V9i0^-

literal 0
HcmV?d00001

-- 
GitLab


From 95eb830ac1bb0acf05b8fd18eaf52968c7dbab5c Mon Sep 17 00:00:00 2001
From: Russel Arbore <russel.jma@gmail.com>
Date: Wed, 12 Feb 2025 10:52:27 -0600
Subject: [PATCH 2/3] matmul fig

---
 juno_scheduler/src/default.rs |   1 -
 paper_resources/matmul_ir.dot |  59 ++++++++++++++++++++++++++++++++++
 paper_resources/matmul_ir.pdf | Bin 0 -> 19057 bytes
 3 files changed, 59 insertions(+), 1 deletion(-)
 create mode 100644 paper_resources/matmul_ir.dot
 create mode 100644 paper_resources/matmul_ir.pdf

diff --git a/juno_scheduler/src/default.rs b/juno_scheduler/src/default.rs
index 8ef3d662..3f4af107 100644
--- a/juno_scheduler/src/default.rs
+++ b/juno_scheduler/src/default.rs
@@ -64,7 +64,6 @@ pub fn default_schedule() -> ScheduleStmt {
         DCE,
         GVN,
         DCE,
-        Xdot,
         LiftDCMath,
         DCE,
         GVN,
diff --git a/paper_resources/matmul_ir.dot b/paper_resources/matmul_ir.dot
new file mode 100644
index 00000000..58aad695
--- /dev/null
+++ b/paper_resources/matmul_ir.dot
@@ -0,0 +1,59 @@
+digraph "Module" {
+margin=0;
+subgraph matmul {
+label="matmul<3>"
+style=invis
+cluster=true
+ranksep=1;
+nodesep=1;
+start_0_0 [xlabel=0, label=<Start<BR /><FONT POINT-SIZE="8">Control</FONT>>, color=darkred];
+parameter_0_1 [xlabel=1, label=<Parameter (#0)<BR /><FONT POINT-SIZE="8">Array(Integer32, #0, #1)</FONT>>, color=darkblue];
+parameter_0_2 [xlabel=2, label=<Parameter (#1)<BR /><FONT POINT-SIZE="8">Array(Integer32, #1, #2)</FONT>>, color=darkblue];
+fork_0_3 [xlabel=3, label=<Fork (#0, #2)<BR /><FONT POINT-SIZE="8">Control</FONT><BR /><FONT POINT-SIZE="8">ParallelFork</FONT>>, color=darkred];
+thread_id_0_4 [xlabel=4, label=<ThreadID (0)<BR /><FONT POINT-SIZE="8">UnsignedInteger64</FONT>>, color=darkblue];
+thread_id_0_5 [xlabel=5, label=<ThreadID (1)<BR /><FONT POINT-SIZE="8">UnsignedInteger64</FONT>>, color=darkblue];
+fork_0_6 [xlabel=6, label=<Fork (#1)<BR /><FONT POINT-SIZE="8">Control</FONT><BR /><FONT POINT-SIZE="8">Vectorizable</FONT>>, color=darkred];
+thread_id_0_7 [xlabel=7, label=<ThreadID (0)<BR /><FONT POINT-SIZE="8">UnsignedInteger64</FONT>>, color=darkblue];
+join_0_8 [xlabel=8, label=<Join<BR /><FONT POINT-SIZE="8">Control</FONT>>, color=darkred];
+join_0_9 [xlabel=9, label=<Join<BR /><FONT POINT-SIZE="8">Control</FONT>>, color=darkred];
+reduce_0_10 [xlabel=10, label=<Reduce<BR /><FONT POINT-SIZE="8">Array(Integer32, #0, #2)</FONT><BR /><FONT POINT-SIZE="8">ParallelReduce</FONT>>, color=darkblue];
+return_0_11 [xlabel=11, label=<Return>, color=darkred];
+read_0_12 [xlabel=12, label=<Read<BR /><FONT POINT-SIZE="8">Integer32</FONT>>, color=darkblue];
+read_0_13 [xlabel=13, label=<Read<BR /><FONT POINT-SIZE="8">Integer32</FONT>>, color=darkblue];
+mul_0_14 [xlabel=14, label=<Mul<BR /><FONT POINT-SIZE="8">Integer32</FONT>>, color=darkblue];
+reduce_0_15 [xlabel=15, label=<Reduce<BR /><FONT POINT-SIZE="8">Integer32</FONT><BR /><FONT POINT-SIZE="8">TightAssociative</FONT>>, color=darkblue];
+add_0_16 [xlabel=16, label=<Add<BR /><FONT POINT-SIZE="8">Integer32</FONT>>, color=darkblue];
+write_0_17 [xlabel=17, label=<Write<BR /><FONT POINT-SIZE="8">Array(Integer32, #0, #2)</FONT>>, color=darkblue];
+constant_0_18 [xlabel=18, label=<Constant ([])<BR /><FONT POINT-SIZE="8">Array(Integer32, #0, #2)</FONT><BR /><FONT POINT-SIZE="8">NoResetConstant</FONT>>, color=darkblue];
+constant_0_19 [xlabel=19, label=<Constant (0)<BR /><FONT POINT-SIZE="8">Integer32</FONT>>, color=darkblue];
+start_0_0 -> fork_0_3 [color=black, style="dashed"];
+fork_0_3 -> thread_id_0_4 [color=black, style="dotted"];
+fork_0_3 -> thread_id_0_5 [color=black, style="dotted"];
+fork_0_3 -> fork_0_6 [color=black, style="dashed"];
+fork_0_6 -> thread_id_0_7 [color=black, style="dotted"];
+fork_0_6 -> join_0_8 [color=black, style="dashed"];
+join_0_8 -> join_0_9 [color=black, style="dashed"];
+join_0_9 -> reduce_0_10 [color=black, style="dotted"];
+constant_0_18 -> reduce_0_10 [color=black, style=""];
+write_0_17 -> reduce_0_10 [color=black, style=""];
+join_0_9 -> return_0_11 [color=black, style="dashed"];
+reduce_0_10 -> return_0_11 [color=black, style="dotted"];
+parameter_0_1 -> read_0_12 [color=black, style=""];
+thread_id_0_4 -> read_0_12 [color=black, style=""];
+thread_id_0_7 -> read_0_12 [color=black, style=""];
+parameter_0_2 -> read_0_13 [color=black, style=""];
+thread_id_0_7 -> read_0_13 [color=black, style=""];
+thread_id_0_5 -> read_0_13 [color=black, style=""];
+read_0_12 -> mul_0_14 [color=black, style=""];
+read_0_13 -> mul_0_14 [color=black, style=""];
+join_0_8 -> reduce_0_15 [color=black, style="dotted"];
+constant_0_19 -> reduce_0_15 [color=black, style=""];
+add_0_16 -> reduce_0_15 [color=black, style=""];
+mul_0_14 -> add_0_16 [color=black, style=""];
+reduce_0_15 -> add_0_16 [color=black, style=""];
+reduce_0_10 -> write_0_17 [color=black, style=""];
+reduce_0_15 -> write_0_17 [color=black, style=""];
+thread_id_0_4 -> write_0_17 [color=black, style=""];
+thread_id_0_5 -> write_0_17 [color=black, style=""];
+}
+}
diff --git a/paper_resources/matmul_ir.pdf b/paper_resources/matmul_ir.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..c21aa38ce056fc42f8dd52cdca7a0f9e4c215694
GIT binary patch
literal 19057
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
VZ_L)iRiPw_zzS1-izK2+{{f&7_3{7!

literal 0
HcmV?d00001

-- 
GitLab


From d452e969d2df6f881b9d6059c50c2de9c7eede6d Mon Sep 17 00:00:00 2001
From: Russel Arbore <russel.jma@gmail.com>
Date: Wed, 12 Feb 2025 11:04:59 -0600
Subject: [PATCH 3/3] improve matmul fig

---
 paper_resources/matmul_ir.dot |   2 ++
 paper_resources/matmul_ir.pdf | Bin 19057 -> 19165 bytes
 2 files changed, 2 insertions(+)

diff --git a/paper_resources/matmul_ir.dot b/paper_resources/matmul_ir.dot
index 58aad695..ab3f4464 100644
--- a/paper_resources/matmul_ir.dot
+++ b/paper_resources/matmul_ir.dot
@@ -55,5 +55,7 @@ reduce_0_10 -> write_0_17 [color=black, style=""];
 reduce_0_15 -> write_0_17 [color=black, style=""];
 thread_id_0_4 -> write_0_17 [color=black, style=""];
 thread_id_0_5 -> write_0_17 [color=black, style=""];
+parameter_0_1 -> thread_id_0_4 [style=invis];
+parameter_0_2 -> thread_id_0_5 [style=invis];
 }
 }
diff --git a/paper_resources/matmul_ir.pdf b/paper_resources/matmul_ir.pdf
index c21aa38ce056fc42f8dd52cdca7a0f9e4c215694..f4afd5892deada4c5997fdeb80f34cc5aeacbdb3 100644
GIT binary patch
delta 14549
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

delta 14489
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

-- 
GitLab