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

Fix SROA edit issues

parent 8df0ef85
No related branches found
No related tags found
1 merge request!57Intraprocedural SROA
Pipeline #200286 passed
......@@ -212,6 +212,7 @@ pub fn sroa(editor: &mut FunctionEditor, reverse_postorder: &Vec<NodeID>, types:
// enough information to process a particular node, we add it back to the worklist
let mut next_id: usize = editor.func().nodes.len();
let mut to_insert = BTreeMap::new();
let mut to_replace : Vec<(NodeID, NodeID)> = vec![];
while let Some(mut item) = worklist.pop_front() {
if let WorkItem::Unhandled(node) = item {
......@@ -299,7 +300,7 @@ pub fn sroa(editor: &mut FunctionEditor, reverse_postorder: &Vec<NodeID>, types:
let read_info = index_map.lookup(indices);
match read_info {
IndexTree::Leaf(field) => {
editor.edit(|edit| edit.replace_all_uses(node, *field));
to_replace.push((node, *field));
}
_ => {}
}
......@@ -426,12 +427,17 @@ pub fn sroa(editor: &mut FunctionEditor, reverse_postorder: &Vec<NodeID>, types:
}
// Create new nodes nodes
for (node_id, node) in to_insert {
editor.edit(|mut edit| {
editor.edit(|mut edit| {
for (node_id, node) in to_insert {
let id = edit.add_node(node);
assert!(node_id == id.idx());
Ok(edit)
});
assert_eq!(node_id, id.idx());
}
Ok(edit)
});
// Replace uses of old reads
for (old, new) in to_replace {
editor.edit(|edit| edit.replace_all_uses(old, new));
}
// Remove nodes
......
......@@ -69,11 +69,11 @@ impl fmt::Display for ErrorMessage {
match self {
ErrorMessage::SemanticError(errs) => {
for err in errs {
write!(f, "{}", err)?;
write!(f, "{}\n", err)?;
}
}
ErrorMessage::SchedulingError(msg) => {
write!(f, "{}", msg)?;
write!(f, "{}\n", msg)?;
}
}
Ok(())
......
fn test_call(x : i32, y : f32) -> (i32, f32) {
let res = (x, y);
if x < 13 { res = (x + 1, y); }
for i = 0 to 10 {
if i % 2 == 0 {
res.0 += 1;
} else {
res.1 *= 2.0;
}
}
return res;
}
......
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