diff options
author | Quentin Carbonneaux <quentin.carbonneaux@yale.edu> | 2015-07-16 03:10:57 -0400 |
---|---|---|
committer | Quentin Carbonneaux <quentin.carbonneaux@yale.edu> | 2015-09-15 23:01:28 -0400 |
commit | 9b2823a9f4d5ccb6ca50ee664ee67623147473db (patch) | |
tree | de4bfa7085b885ceb818f7d71ab59fd478aaab9d /lisc | |
parent | f3eb798d54d13b900edf769bc512e15856287a9c (diff) | |
download | roux-9b2823a9f4d5ccb6ca50ee664ee67623147473db.tar.gz |
simplify liveness
Diffstat (limited to 'lisc')
-rw-r--r-- | lisc/live.c | 24 |
1 files changed, 10 insertions, 14 deletions
diff --git a/lisc/live.c b/lisc/live.c index 56dda71..4d37f72 100644 --- a/lisc/live.c +++ b/lisc/live.c @@ -1,9 +1,10 @@ #include "lisc.h" -static inline int -issym(Ref r) +static inline void +symadd(Bits *b, Ref r) { - return !req(r, R) && r.type == RSym; + if (!req(r, R) && r.type == RSym) + BSET(*b, r.val); } /* liveness analysis @@ -31,20 +32,15 @@ filllive(Fn *f) u = &use[b->id]; for (p=b->phi; p; p=p->link) { for (a=0; a<p->narg; a++) - if (issym(p->arg[a])) - BSET(p->blk[a]->out, p->arg[a].val); - BSET(*k, p->to.val); + symadd(&p->blk[a]->out, p->arg[a]); + symadd(k, p->to); } for (i=b->ins; i-b->ins < b->nins; i++) { - if (issym(i->to)) - BSET(*k, i->to.val); - if (issym(i->arg[0])) - BSET(*u, i->arg[0].val); - if (issym(i->arg[1])) - BSET(*u, i->arg[1].val); + symadd(k, i->to); + symadd(u, i->arg[0]); + symadd(u, i->arg[1]); } - if (issym(b->jmp.arg)) - BSET(*u, b->jmp.arg.val); + symadd(u, b->jmp.arg); } Again: chg = 0; |