diff options
Diffstat (limited to 'spill.c')
| -rw-r--r-- | spill.c | 20 |
1 files changed, 7 insertions, 13 deletions
@@ -406,26 +406,20 @@ spill(Fn *fn) if (rtype(b->jmp.arg) == RCall) v->t[0] |= T.retregs(b->jmp.arg, 0); } - for (t=Tmp0; bsiter(b->out, &t); t++) - if (!bshas(v, t)) - slot(t); - bscopy(b->out, v); - - /* 2. process the block instructions */ if (rtype(b->jmp.arg) == RTmp) { t = b->jmp.arg.val; assert(KBASE(tmp[t].cls) == 0); - lvarg[0] = bshas(v, t); bsset(v, t); - bscopy(u, v); limit2(v, 0, 0, NULL); - if (!bshas(v, t)) { - if (!lvarg[0]) - bsclr(u, t); + if (!bshas(v, t)) b->jmp.arg = slot(t); - } - reloads(u, v); } + for (t=Tmp0; bsiter(b->out, &t); t++) + if (!bshas(v, t)) + slot(t); + bscopy(b->out, v); + + /* 2. process the block instructions */ curi = &insb[NIns]; for (i=&b->ins[b->nins]; i!=b->ins;) { i--; |
