diff --git a/hercules_cg/src/gpu.rs b/hercules_cg/src/gpu.rs index be797b2a09b48890806638b2fc78306ea2f13aca..21d284b3336b03541cac170f9a3a8edde6dc366e 100644 --- a/hercules_cg/src/gpu.rs +++ b/hercules_cg/src/gpu.rs @@ -22,6 +22,7 @@ pub fn gpu_codegen<W: Write>( control_subgraph: &Subgraph, bbs: &BasicBlocks, collection_objects: &FunctionCollectionObjects, + fork_join_map: &HashMap<NodeID, NodeID>, w: &mut W, ) -> Result<(), Error> { /* @@ -80,7 +81,6 @@ pub fn gpu_codegen<W: Write>( .collect(); - let fork_join_map = fork_join_map(function, control_subgraph); let join_fork_map: HashMap<NodeID, NodeID> = fork_join_map .iter() .map(|(fork, join)| (*join, *fork)) @@ -239,7 +239,7 @@ struct GPUContext<'a> { bbs: &'a BasicBlocks, kernel_params: &'a GPUKernelParams, def_use_map: &'a ImmutableDefUseMap, - fork_join_map: HashMap<NodeID, NodeID>, + fork_join_map: &'a HashMap<NodeID, NodeID>, join_fork_map: HashMap<NodeID, NodeID>, fork_reduce_map: HashMap<NodeID, Vec<NodeID>>, reduct_reduce_map: HashMap<NodeID, Vec<NodeID>>, diff --git a/hercules_opt/src/pass.rs b/hercules_opt/src/pass.rs index bb70bf08b4d71a6ac138fb8a70d62eab3d051d3d..9b4c09aaa24402e0eae8560494c214a760c71034 100644 --- a/hercules_opt/src/pass.rs +++ b/hercules_opt/src/pass.rs @@ -984,11 +984,13 @@ impl PassManager { self.make_control_subgraphs(); self.make_collection_objects(); self.make_callgraph(); + self.make_fork_join_maps(); let typing = self.typing.as_ref().unwrap(); let control_subgraphs = self.control_subgraphs.as_ref().unwrap(); let bbs = self.bbs.as_ref().unwrap(); let collection_objects = self.collection_objects.as_ref().unwrap(); let callgraph = self.callgraph.as_ref().unwrap(); + let fork_join_maps = self.fork_join_maps.as_ref().unwrap(); let devices = device_placement(&self.module.functions, &callgraph); @@ -1029,6 +1031,7 @@ impl PassManager { &control_subgraphs[idx], &bbs[idx], &collection_objects[&FunctionID::new(idx)], + &fork_join_maps[idx], &mut cuda_ir, ) .unwrap(),