diff options
| author | Quentin Carbonneaux <quentin.carbonneaux@yale.edu> | 2016-04-13 11:41:26 -0400 |
|---|---|---|
| committer | Quentin Carbonneaux <quentin.carbonneaux@yale.edu> | 2016-04-13 12:39:57 -0400 |
| commit | 491c55e6e0295904c8c5f996503b4e8b9e2e180c (patch) | |
| tree | b61a2d311046ea655419b3fc87168109e077f827 | |
| parent | 8992106928756d47697ea26f88b7b5eceacf3845 (diff) | |
| download | roux-491c55e6e0295904c8c5f996503b4e8b9e2e180c.tar.gz | |
handle odd jumps in blkdel() an renblk()
| -rw-r--r-- | ssa.c | 7 | ||||
| -rw-r--r-- | util.c | 2 |
2 files changed, 5 insertions, 4 deletions
@@ -154,15 +154,14 @@ fillrpo(Fn *f) n = 1 + rporec(f->start, f->nblk-1); f->nblk -= n; f->rpo = alloc(f->nblk * sizeof f->rpo[0]); - for (p=&f->start; *p;) { - b = *p; + for (p=&f->start; (b=*p);) { if (b->id == -1) { blkdel(b); *p = b->link; } else { b->id -= n; f->rpo[b->id] = b; - p=&(*p)->link; + p = &b->link; } } } @@ -453,7 +452,7 @@ renblk(Blk *b, Name **stk, Fn *fn) if (fn->tmp[t].visit) b->jmp.arg = getstk(t, b, stk); succ[0] = b->s1; - succ[1] = b->s2; + succ[1] = b->s2 == b->s1 ? 0 : b->s2; succ[2] = 0; for (ps=succ; (s=*ps); ps++) for (p=s->phi; p; p=p->link) { @@ -104,6 +104,8 @@ blkdel(Blk *b) Phi *p; uint a; + if (b->s1 == b->s2) /* do not delete twice */ + b->s2 = 0; for (ps=(Blk*[]){b->s1, b->s2, 0}; (s=*ps); ps++) { for (p=s->phi; p; p=p->link) { for (a=0; p->blk[a]!=b; a++) |
