Skip to content
Snippets Groups Projects
Commit 9de4d3bb authored by Aaron Councilman's avatar Aaron Councilman
Browse files

Make fork coalesce use one edit to handle partial selection properly

parent 8159c6c1
No related branches found
No related tags found
1 merge request!205Fork reshape
Pipeline #201824 passed
...@@ -686,40 +686,33 @@ pub fn fork_coalesce_helper( ...@@ -686,40 +686,33 @@ pub fn fork_coalesce_helper(
// CHECKME / FIXME: Might need to be added the other way. // CHECKME / FIXME: Might need to be added the other way.
new_factors.append(&mut inner_dims.to_vec()); new_factors.append(&mut inner_dims.to_vec());
for tid in inner_tids { editor.edit(|mut edit| {
let (fork, dim) = editor.func().nodes[tid.idx()].try_thread_id().unwrap(); for tid in inner_tids {
let new_tid = Node::ThreadID { let (fork, dim) = edit.get_node(tid).try_thread_id().unwrap();
control: fork, let new_tid = Node::ThreadID {
dimension: dim + num_outer_dims, control: fork,
}; dimension: dim + num_outer_dims,
};
editor.edit(|mut edit| {
let new_tid = edit.add_node(new_tid); let new_tid = edit.add_node(new_tid);
let edit = edit.replace_all_uses(tid, new_tid)?; edit = edit.replace_all_uses(tid, new_tid)?;
Ok(edit) }
});
}
// Fuse Reductions // Fuse Reductions
for (outer_reduce, inner_reduce) in pairs { for (outer_reduce, inner_reduce) in pairs {
let (_, outer_init, _) = editor.func().nodes[outer_reduce.idx()] let (_, outer_init, _) = edit.get_node(outer_reduce)
.try_reduce() .try_reduce()
.unwrap(); .unwrap();
let (_, inner_init, _) = editor.func().nodes[inner_reduce.idx()] let (_, inner_init, _) = edit.get_node(inner_reduce)
.try_reduce() .try_reduce()
.unwrap(); .unwrap();
editor.edit(|mut edit| {
// Set inner init to outer init. // Set inner init to outer init.
edit = edit =
edit.replace_all_uses_where(inner_init, outer_init, |usee| *usee == inner_reduce)?; edit.replace_all_uses_where(inner_init, outer_init, |usee| *usee == inner_reduce)?;
edit = edit.replace_all_uses(outer_reduce, inner_reduce)?; edit = edit.replace_all_uses(outer_reduce, inner_reduce)?;
edit = edit.delete_node(outer_reduce)?; edit = edit.delete_node(outer_reduce)?;
}
Ok(edit)
});
}
editor.edit(|mut edit| {
let new_fork = Node::Fork { let new_fork = Node::Fork {
control: outer_pred, control: outer_pred,
factors: new_factors.into(), factors: new_factors.into(),
...@@ -734,9 +727,7 @@ pub fn fork_coalesce_helper( ...@@ -734,9 +727,7 @@ pub fn fork_coalesce_helper(
edit = edit.delete_node(outer_fork)?; edit = edit.delete_node(outer_fork)?;
Ok(edit) Ok(edit)
}); })
true
} }
pub fn split_any_fork( pub fn split_any_fork(
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment