From 881248849fda7222741aca6bb4c37ccb8864fa1b Mon Sep 17 00:00:00 2001 From: Aaron Councilman <aaronjc4@illinois.edu> Date: Tue, 19 Nov 2024 08:10:43 -0600 Subject: [PATCH] Fix editor bug when deleting created node --- hercules_opt/src/editor.rs | 4 +++- hercules_opt/src/sroa.rs | 3 --- juno_frontend/src/lib.rs | 7 +++---- 3 files changed, 6 insertions(+), 8 deletions(-) diff --git a/hercules_opt/src/editor.rs b/hercules_opt/src/editor.rs index 95fd1669..bf7cede2 100644 --- a/hercules_opt/src/editor.rs +++ b/hercules_opt/src/editor.rs @@ -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 // for added nodes. 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() { assert_eq!( diff --git a/hercules_opt/src/sroa.rs b/hercules_opt/src/sroa.rs index b9380197..2dd0049b 100644 --- a/hercules_opt/src/sroa.rs +++ b/hercules_opt/src/sroa.rs @@ -243,15 +243,12 @@ pub fn sroa(editor: &mut FunctionEditor, reverse_postorder: &Vec<NodeID>, types: } // Actually deleting nodes seems to break things right now - /* - println!("{:?}", to_delete); editor.edit(|mut edit| { for node in to_delete { edit = edit.delete_node(node)? } Ok(edit) }); - */ } // An index tree is used to store results at many index lists diff --git a/juno_frontend/src/lib.rs b/juno_frontend/src/lib.rs index d4263fe8..49249fc7 100644 --- a/juno_frontend/src/lib.rs +++ b/juno_frontend/src/lib.rs @@ -151,18 +151,17 @@ pub fn compile_ir( if x_dot { 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); if x_dot { pm.add_pass(hercules_opt::pass::Pass::Xdot(true)); } - // TEMPORARY - add_pass!(pm, verify, Inline); add_pass!(pm, verify, CCP); add_pass!(pm, verify, DCE); add_pass!(pm, verify, GVN); add_pass!(pm, verify, DCE); - //add_pass!(pm, verify, SROA); if x_dot { pm.add_pass(hercules_opt::pass::Pass::Xdot(true)); } -- GitLab