Skip to content
Snippets Groups Projects

Do DC subst in float-collections

Merged rarbore2 requested to merge fix-float into main
1 file
+ 14
5
Compare changes
  • Side-by-side
  • Inline
use std::collections::BTreeMap;
use std::collections::{BTreeMap, HashMap};
use hercules_ir::*;
use hercules_ir::*;
@@ -83,10 +83,6 @@ pub fn float_collections(
@@ -83,10 +83,6 @@ pub fn float_collections(
.map(|(idx, node)| (NodeID::new(idx), node.clone()))
.map(|(idx, node)| (NodeID::new(idx), node.clone()))
.collect();
.collect();
let success = editors.get_mut(&caller).unwrap().edit(|mut edit| {
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 {
for (id, node) in calls {
let Node::Call {
let Node::Call {
control,
control,
@@ -97,6 +93,19 @@ pub fn float_collections(
@@ -97,6 +93,19 @@ pub fn float_collections(
else {
else {
panic!()
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);
let mut args = Vec::from(args);
args.extend(cons_ids.iter());
args.extend(cons_ids.iter());
let new_call = edit.add_node(Node::Call {
let new_call = edit.add_node(Node::Call {
Loading