From ef164c45776bb139a3fa9c2b4be1b0832e79186f Mon Sep 17 00:00:00 2001 From: Aaron Councilman <aaronjc4@illinois.edu> Date: Mon, 11 Nov 2024 10:24:08 -0600 Subject: [PATCH] Fix juno call code-gen --- juno_frontend/src/codegen.rs | 20 ++++++++++++-------- juno_frontend/src/main.rs | 3 --- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/juno_frontend/src/codegen.rs b/juno_frontend/src/codegen.rs index ebc2bfb4..a76d4773 100644 --- a/juno_frontend/src/codegen.rs +++ b/juno_frontend/src/codegen.rs @@ -490,23 +490,27 @@ impl CodeGenerator<'_> { } // Create the call expression, a region specifically for it, and a region after that. - let mut call_region = self.builder.allocate_node(func_id); - let mut after_call_region = self.builder.allocate_node(func_id); + let mut call_region = ssa.create_block(&mut self.builder); + ssa.add_pred(call_region, block); + ssa.seal_block(call_region, &mut self.builder); + + let mut after_call_region = ssa.create_block(&mut self.builder); + ssa.add_pred(after_call_region, call_region); + ssa.seal_block(after_call_region, &mut self.builder); + let mut call = self.builder.allocate_node(func_id); let call_id = call.id(); - call_region.build_region(Box::new([block])); - after_call_region.build_region(Box::new([call_region.id()])); - block = after_call_region.id(); + call.build_call( - call_region.id(), + call_region, call_func, dynamic_constants.into(), arg_vals.into(), ); - let _ = self.builder.add_node(call_region); - let _ = self.builder.add_node(after_call_region); let _ = self.builder.add_node(call); + block = after_call_region; + // Read each of the "inout values" and perform the SSA update let inouts_index = self.builder.create_field_index(1); for (idx, var) in inouts.into_iter().enumerate() { diff --git a/juno_frontend/src/main.rs b/juno_frontend/src/main.rs index 72acd88d..f291b870 100644 --- a/juno_frontend/src/main.rs +++ b/juno_frontend/src/main.rs @@ -61,9 +61,6 @@ fn main() { if args.verify || args.verify_all { pm.add_pass(hercules_opt::pass::Pass::Verify); } - if args.x_dot { - pm.add_pass(hercules_opt::pass::Pass::Xdot(true)); - } add_verified_pass!(pm, args, PhiElim); if args.x_dot { pm.add_pass(hercules_opt::pass::Pass::Xdot(true)); -- GitLab