diff options
-rw-r--r-- | mem.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/mem.c b/mem.c index dae9b55..fc3269c 100644 --- a/mem.c +++ b/mem.c @@ -304,12 +304,19 @@ coalesce(Fn *fn) for (u=t->use; u<&t->use[t->nuse]; u++) { assert(u->type == UIns); i = u->u.ins; - if (!req(i->to, R)) { + /* make loads crash */ + if (isload(i->op)) + i->arg[0] = CON_Z; + else if (i->op == Oargc) + i->arg[1] = CON_Z; + else if (!req(i->to, R)) { assert(rtype(i->to) == RTmp); vgrow(&stk, ++n); stk[n-1] = i->to.val; - } else + } else { + assert(!isarg(i->op)); *i = (Ins){.op = Onop}; + } } } vfree(stk); |