diff --git a/hercules_opt/src/outline.rs b/hercules_opt/src/outline.rs index c66933368aec08f9d3ea268549585a8282afa6ab..088e57750df0265883472ab111d5d0a6e5f21c6e 100644 --- a/hercules_opt/src/outline.rs +++ b/hercules_opt/src/outline.rs @@ -25,6 +25,7 @@ pub fn outline( dom: &DomTree, mut partition: BTreeSet<NodeID>, to_be_function_id: FunctionID, + outline_scalar_constants: bool, ) -> Option<Function> { // Step 1: do a whole bunch of analysis on the partition. let nodes = &editor.func().nodes; @@ -34,12 +35,14 @@ pub fn outline( .any(|id| nodes[id.idx()].is_start() || nodes[id.idx()].is_parameter() || nodes[id.idx()].is_return()), "PANIC: Can't outline a partition containing the start node, parameter nodes, or return nodes." ); - for (idx, node) in nodes.into_iter().enumerate() { - if let Node::Constant { id } = node - && editor.get_constant(*id).is_scalar() - { - // Usually, you don't want to explicitly outline scalar constants. - partition.remove(&NodeID::new(idx)); + if !outline_scalar_constants { + for (idx, node) in nodes.into_iter().enumerate() { + if let Node::Constant { id } = node + && editor.get_constant(*id).is_scalar() + { + // Usually, you don't want to explicitly outline scalar constants. + partition.remove(&NodeID::new(idx)); + } } } let mut top_nodes = partition.iter().filter(|id| { @@ -621,5 +624,6 @@ pub fn dumb_outline( dom, partition, to_be_function_id, + true, ) } diff --git a/juno_scheduler/src/pm.rs b/juno_scheduler/src/pm.rs index 44b14257cdcdc0e56d315e2a7059c14c62a399b7..675cfe1ca9f25f74f7c6ad3c969f3d2b9b9524fd 100644 --- a/juno_scheduler/src/pm.rs +++ b/juno_scheduler/src/pm.rs @@ -2160,6 +2160,7 @@ fn run_pass( &doms[func.idx()], nodes, new_func_id, + false, ); let Some(new_func) = new_func else { return Err(SchedulerError::PassError {