aboutsummaryrefslogtreecommitdiff
path: root/spill.c
diff options
context:
space:
mode:
Diffstat (limited to 'spill.c')
-rw-r--r--spill.c20
1 files changed, 7 insertions, 13 deletions
diff --git a/spill.c b/spill.c
index 67c6540..4fb7a29 100644
--- a/spill.c
+++ b/spill.c
@@ -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--;