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).
This commit is contained in:
David Given 2016-10-27 21:40:25 +02:00
parent 9977ce841a
commit 51bd3ee4dd

View file

@ -185,14 +185,18 @@ static void ssa_convert(void)
for (i=0; i<defining.count; i++)
{
struct basicblock* bb = defining.item[i];
struct basicblock* dominates = pmap_findleft(&dominancefrontiers, bb);
if (dominates)
tracef('S', "S: local %d in defined in block %s\n", current_local->offset, bb->name);
for (j=0; j<dominancefrontiers.count; j++)
{
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);
}
}
}
/* Add empty phi nodes. */