From 94b3bd529a73eec418bd760d57cc221790aa4526 Mon Sep 17 00:00:00 2001 From: Rerumu <25379555+Rerumu@users.noreply.github.com> Date: Thu, 25 Aug 2022 20:22:42 -0400 Subject: [PATCH] Fix desired branch elision heuristic --- codegen/luau/src/analyzer/br_target.rs | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/codegen/luau/src/analyzer/br_target.rs b/codegen/luau/src/analyzer/br_target.rs index cebe09e..fd20b28 100644 --- a/codegen/luau/src/analyzer/br_target.rs +++ b/codegen/luau/src/analyzer/br_target.rs @@ -10,22 +10,34 @@ struct Visit { has_branch: bool, } +impl Visit { + fn set_branch(&mut self, br: &Br) { + if br.target() != 0 { + self.has_branch = true; + } + } +} + impl Visitor for Visit { - fn visit_br(&mut self, _: &Br) { - self.has_branch = true; + fn visit_br(&mut self, stat: &Br) { + self.set_branch(stat); } - fn visit_br_if(&mut self, _: &BrIf) { - self.has_branch = true; + fn visit_br_if(&mut self, stat: &BrIf) { + self.set_branch(stat.target()); } fn visit_br_table(&mut self, table: &BrTable) { - self.has_branch = true; + self.set_branch(table.default()); if table.data().is_empty() { return; } + for target in table.data() { + self.set_branch(target); + } + let id = table as *const _ as usize; let len = self.br_map.len() + 1;