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

Fix editor bug when deleting created node

parent 8a9d8790
No related branches found
No related tags found
1 merge request!57Intraprocedural SROA
Pipeline #200282 passed
...@@ -505,7 +505,9 @@ pub fn repair_plan(plan: &mut Plan, new_function: &Function, edits: &[Edit]) { ...@@ -505,7 +505,9 @@ pub fn repair_plan(plan: &mut Plan, new_function: &Function, edits: &[Edit]) {
// Step 2: drop schedules for deleted nodes and create empty schedule lists // Step 2: drop schedules for deleted nodes and create empty schedule lists
// for added nodes. // for added nodes.
for deleted in total_edit.0.iter() { for deleted in total_edit.0.iter() {
plan.schedules[deleted.idx()] = vec![]; if deleted.idx() < plan.schedules.len() {
plan.schedules[deleted.idx()] = vec![];
}
} }
if !total_edit.1.is_empty() { if !total_edit.1.is_empty() {
assert_eq!( assert_eq!(
......
...@@ -243,15 +243,12 @@ pub fn sroa(editor: &mut FunctionEditor, reverse_postorder: &Vec<NodeID>, types: ...@@ -243,15 +243,12 @@ pub fn sroa(editor: &mut FunctionEditor, reverse_postorder: &Vec<NodeID>, types:
} }
// Actually deleting nodes seems to break things right now // Actually deleting nodes seems to break things right now
/*
println!("{:?}", to_delete);
editor.edit(|mut edit| { editor.edit(|mut edit| {
for node in to_delete { for node in to_delete {
edit = edit.delete_node(node)? edit = edit.delete_node(node)?
} }
Ok(edit) Ok(edit)
}); });
*/
} }
// An index tree is used to store results at many index lists // An index tree is used to store results at many index lists
......
...@@ -151,18 +151,17 @@ pub fn compile_ir( ...@@ -151,18 +151,17 @@ pub fn compile_ir(
if x_dot { if x_dot {
pm.add_pass(hercules_opt::pass::Pass::Xdot(true)); pm.add_pass(hercules_opt::pass::Pass::Xdot(true));
} }
// TEMPORARY add_pass!(pm, verify, Inline);
// Run SROA pretty early (though after inlining which can make SROA more effective) so that
// CCP, GVN, etc. can work on the result of SROA
add_pass!(pm, verify, SROA); add_pass!(pm, verify, SROA);
if x_dot { if x_dot {
pm.add_pass(hercules_opt::pass::Pass::Xdot(true)); pm.add_pass(hercules_opt::pass::Pass::Xdot(true));
} }
// TEMPORARY
add_pass!(pm, verify, Inline);
add_pass!(pm, verify, CCP); add_pass!(pm, verify, CCP);
add_pass!(pm, verify, DCE); add_pass!(pm, verify, DCE);
add_pass!(pm, verify, GVN); add_pass!(pm, verify, GVN);
add_pass!(pm, verify, DCE); add_pass!(pm, verify, DCE);
//add_pass!(pm, verify, SROA);
if x_dot { if x_dot {
pm.add_pass(hercules_opt::pass::Pass::Xdot(true)); pm.add_pass(hercules_opt::pass::Pass::Xdot(true));
} }
......
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