aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/ir.c8
-rw-r--r--src/ir_abi0.c1
2 files changed, 5 insertions, 4 deletions
diff --git a/src/ir.c b/src/ir.c
index f515adb..298f26b 100644
--- a/src/ir.c
+++ b/src/ir.c
@@ -450,8 +450,8 @@ filluses(Function *fn)
}
for (int i = 0; i < blk->ins.n; ++i) {
int ins = blk->ins.p[i];
- adduse(blk, ins, instrtab[ins].l);
- adduse(blk, ins, instrtab[ins].r);
+ for (int i = 0; i < opnoper[instrtab[ins].op]; ++i)
+ adduse(blk, ins, instrtab[ins].oper[i]);
}
adduse(blk, USERJUMP, blk->jmp.arg[0]);
adduse(blk, USERJUMP, blk->jmp.arg[1]);
@@ -466,8 +466,8 @@ newinstr(Block *at, Instr ins)
int new = allocinstr();
instrtab[new] = ins;
if (at) {
- adduse(at, new, ins.l);
- adduse(at, new, ins.r);
+ for (int i = 0; i < opnoper[ins.op]; ++i)
+ adduse(at, new, ins.oper[i]);
}
return new;
}
diff --git a/src/ir_abi0.c b/src/ir_abi0.c
index 8722438..dd8bc40 100644
--- a/src/ir_abi0.c
+++ b/src/ir_abi0.c
@@ -428,6 +428,7 @@ abi0(Function *fn)
if (isagg(fn->retty) && blk->jmp.t == Jret && blk->jmp.arg[0].bits) {
assert(!blk->jmp.arg[1].bits);
if (fn->nabiret) { /* aggregate return in register(s) */
+ deluse(blk, USERJUMP, blk->jmp.arg[0]);
Ref r[2];
int curi = blk->ins.n;
load2regs(r, mkirtype(fn->retty), blk->jmp.arg[0], fn->nabiret, fn->abiret, r2off, blk, &curi);