From: David Given Date: Thu, 27 Oct 2016 19:40:25 +0000 (+0200) Subject: Fix bug where some phis weren't being inserted when a given variable definition X-Git-Url: https://git.ndcode.org/public/gitweb.cgi?a=commitdiff_plain;h=51bd3ee4dd0aa7d83494f03fc7d836699dbee54a;p=ack.git Fix bug where some phis weren't being inserted when a given variable definition needed more than one phi (due to the dominance frontier containing more than one basic block). --- diff --git a/mach/proto/mcg/pass_ssa.c b/mach/proto/mcg/pass_ssa.c index 260ad9294..e0f835f17 100644 --- a/mach/proto/mcg/pass_ssa.c +++ b/mach/proto/mcg/pass_ssa.c @@ -185,12 +185,16 @@ static void ssa_convert(void) for (i=0; ioffset, bb->name); + for (j=0; joffset, dominates->name); + if (dominancefrontiers.item[j].left == bb) + { + struct basicblock* dominates = dominancefrontiers.item[j].right; + array_appendu(&needsphis, dominates); + array_appendu(&defining, dominates); + tracef('S', "S: local %d needs phi in block %s\n", current_local->offset, dominates->name); + } } }