diff options
| author | 2026-01-04 14:28:42 +0100 | |
|---|---|---|
| committer | 2026-01-04 14:28:42 +0100 | |
| commit | 65d56cb113ebf09664bbade47b1c4c2e960ba336 (patch) | |
| tree | d72259647097bcaea0915a57f6433eb0d9d48a7b /ir/abi0.c | |
| parent | b826bf418330b9b13a26195ee541e9e7fd9e77ac (diff) | |
ir bugfixes
Diffstat (limited to 'ir/abi0.c')
| -rw-r--r-- | ir/abi0.c | 9 |
1 files changed, 7 insertions, 2 deletions
@@ -425,8 +425,10 @@ abi0(struct function *fn) union ref r[2]; int curi = blk->ins.n; load2regs(r, mkirtype(fn->retty), blk->jmp.arg[0], fn->nabiret, fn->abiret, r2off, blk, &curi); - for (int i = 0; i < fn->nabiret; ++i) + for (int i = 0; i < fn->nabiret; ++i) { blk->jmp.arg[i] = r[i]; + adduse(blk, USERJUMP, r[i]); + } } else { /* aggregate return (arg[0] is pointer to return value) */ if (rvovar == -1) { @@ -436,7 +438,10 @@ abi0(struct function *fn) insertinstr(blk, blk->ins.n, mkarginstr(typ, blk->jmp.arg[0])); insertinstr(blk, blk->ins.n, mkintrin(INstructcopy, 0, 2)); } else assert(blk->jmp.arg[0].bits == mkref(RTMP, rvovar).bits); - if (fn->abiret[0].ty.cls) blk->jmp.arg[0] = rvovar == -1 ? sret : mkref(RTMP, rvovar); + if (fn->abiret[0].ty.cls) { + blk->jmp.arg[0] = rvovar == -1 ? sret : mkref(RTMP, rvovar); + adduse(blk, USERJUMP, blk->jmp.arg[0]); + } else memset(blk->jmp.arg, 0, sizeof blk->jmp.arg); } } |