add predecessor computation

This commit is contained in:
Quentin Carbonneaux 2015-07-10 11:41:11 -04:00
parent 1d62b4bf47
commit 935ab611f0
3 changed files with 51 additions and 3 deletions

39
lisc/ssa.c Normal file
View file

@ -0,0 +1,39 @@
#include "lisc.h"
static void
addpred(Blk *bp, Blk *bc)
{
int i;
if (!bc->preds) {
bc->preds = alloc(bc->npreds * sizeof(Blk*));
for (i=0; i<bc->npreds; i++)
bc->preds[i] = 0;
}
for (i=0; bc->preds[i]; i++)
;
bc->preds[i] = bp;
}
void
fillpreds(Fn *f)
{
Blk *b;
for (b=f->start; b; b=b->link) {
b->npreds = 0;
free(b->preds);
}
for (b=f->start; b; b=b->link) {
if (b->s1)
b->s1->npreds++;
if (b->s2)
b->s2->npreds++;
}
for (b=f->start; b; b=b->link) {
if (b->s1)
addpred(b, b->s1);
if (b->s2)
addpred(b, b->s2);
}
}