diff options
Diffstat (limited to 'lisc/live.c')
-rw-r--r-- | lisc/live.c | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/lisc/live.c b/lisc/live.c index b0a4186..ea6414d 100644 --- a/lisc/live.c +++ b/lisc/live.c @@ -40,6 +40,7 @@ filllive(Fn *f) Ins *i; int z, m, n, chg, nlv; Bits u, v; + Mem *ma; assert(f->ntmp <= NBit*BITS); for (b=f->start; b; b=b->link) { @@ -83,8 +84,17 @@ Again: nlv -= BGET(b->in, i->to.val); BCLR(b->in, i->to.val); } - bset(i->arg[0], b, &nlv); - bset(i->arg[1], b, &nlv); + for (m=0; m<2; m++) + switch (rtype(i->arg[m])) { + case RAMem: + ma = &f->mem[i->arg[m].val & AMask]; + bset(ma->base, b, &nlv); + bset(ma->index, b, &nlv); + break; + default: + bset(i->arg[0], b, &nlv); + break; + } if (nlv > b->nlive) b->nlive = nlv; } |