add predecessor computation
This commit is contained in:
parent
1d62b4bf47
commit
935ab611f0
3 changed files with 51 additions and 3 deletions
39
lisc/ssa.c
Normal file
39
lisc/ssa.c
Normal 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);
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue