aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorlemon <lsof@mailbox.org>2023-08-07 22:56:21 +0200
committerlemon <lsof@mailbox.org>2023-08-07 22:56:21 +0200
commit1f4b206aa39097ebacdfd645aa2a81a3350b004e (patch)
tree9b6cb9429f4ea5fe3aae0cbbb58e67cc6d36b966
parentcc5bee5519e26b075d0d0dc28527a05fd9b8c987 (diff)
hm
-rw-r--r--regalloc.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/regalloc.c b/regalloc.c
index 96e81d8..3dc93f0 100644
--- a/regalloc.c
+++ b/regalloc.c
@@ -41,7 +41,7 @@ addstkslotref(union ref inst)
static int allocreg(struct rega *ra, enum irclass cls, union ref ref, uvlong excl);
-#if 0
+#if 1
#define DBG(...) if(ccopt.dbg.r) efmt(__VA_ARGS__)
static void
dumpallocs(const char *s, struct rmap *m)
@@ -294,7 +294,7 @@ use(struct rega *ra, struct block *blk, int curi, enum op op, int hint, union re
}
if (ref->t != RTMP) return;
- iuse = &instrtab[blk->ins.p[curi]];
+ iuse = curi < blk->ins.n ? &instrtab[blk->ins.p[curi]] : NULL;
ins = &instrtab[ref->i];
if (!ins->cls) return;
if (!(alloc = imap_get(&ra->m.allocs, ref->i)) || alloc->t != AREG) {
@@ -303,8 +303,8 @@ use(struct rega *ra, struct block *blk, int curi, enum op op, int hint, union re
/* ensure spill isn't overwritten by dest
* e.g. in R0 = add %s, 7 => can't spill %s to R0 */
s = alloc->a;
- if (iuse->reg) excl = rsset(excl, iuse->reg-1);
- } else if (iuse->inplace && iuse->reg && ref == &iuse->r
+ if (iuse && iuse->reg) excl = rsset(excl, iuse->reg-1);
+ } else if (iuse && iuse->inplace && iuse->reg && ref == &iuse->r
&& iuse->l.bits != mkref(RREG, iuse->reg-1).bits) {
/* ensure in an inplace operation rhs reg cannot overlap dest reg
* e.g. in R0 = sub R1, %x => cannot allocate %x to R0