diff --git a/hercules_opt/src/float_collections.rs b/hercules_opt/src/float_collections.rs index 6ef050c2430a32673140db49543bbbf96462d58e..d64b3f806a5099c8eacdb296d5962b31357f8976 100644 --- a/hercules_opt/src/float_collections.rs +++ b/hercules_opt/src/float_collections.rs @@ -1,4 +1,4 @@ -use std::collections::BTreeMap; +use std::collections::{BTreeMap, HashMap}; use hercules_ir::*; @@ -83,10 +83,6 @@ pub fn float_collections( .map(|(idx, node)| (NodeID::new(idx), node.clone())) .collect(); let success = editors.get_mut(&caller).unwrap().edit(|mut edit| { - let cons_ids: Vec<_> = cons - .iter() - .map(|(_, node)| edit.add_node(node.clone())) - .collect(); for (id, node) in calls { let Node::Call { control, @@ -97,6 +93,19 @@ pub fn float_collections( else { panic!() }; + let dc_args = (0..dynamic_constants.len()) + .map(|i| edit.add_dynamic_constant(DynamicConstant::Parameter(i))); + let substs = dc_args + .zip(dynamic_constants.iter().map(|id| *id)) + .collect::<HashMap<_, _>>(); + let cons_ids: Vec<_> = cons + .iter() + .map(|(_, node)| { + let mut node = node.clone(); + substitute_dynamic_constants_in_node(&substs, &mut node, &mut edit); + edit.add_node(node) + }) + .collect(); let mut args = Vec::from(args); args.extend(cons_ids.iter()); let new_call = edit.add_node(Node::Call {