From ceeebf42502e640fa09cb646df56915cf43c9030 Mon Sep 17 00:00:00 2001 From: lemon Date: Wed, 14 Jun 2023 21:58:36 +0200 Subject: cleanup --- regalloc.c | 29 ++++++++++++++--------------- 1 file changed, 14 insertions(+), 15 deletions(-) (limited to 'regalloc.c') diff --git a/regalloc.c b/regalloc.c index 40963ea..4801db9 100644 --- a/regalloc.c +++ b/regalloc.c @@ -37,6 +37,14 @@ static int allocreg(struct rega *ra, enum irclass cls, union ref ref, int excl); #define DBG(...) ((void)0) #endif +static void +freereg(struct rega *ra, int r) +{ + ra->regs[r] = NOREF; + if (isfpr(r)) ++ra->nfreefpr; + else ++ra->nfreegpr; +} + static void def(struct rega *ra, struct instr *ins, struct block *blk, int curi) { @@ -72,19 +80,12 @@ def(struct rega *ra, struct instr *ins, struct block *blk, int curi) } else { struct call *call = &calltab.p[ins->r.i]; for (int i = 0; i < 2; ++i) { - if (!call->abiret[0].ty.cls) break; - reg = call->abiret[0].reg; - ra->regs[reg] = NOREF; - if (isfpr(reg)) ++ra->nfreefpr; - else ++ra->nfreegpr; - return; + if (!call->abiret[i].ty.cls) break; + freereg(ra, call->abiret[i].reg); } + return; } - if (reg != -1) { - ra->regs[reg] = NOREF; - if (isfpr(reg)) ++ra->nfreefpr; - else ++ra->nfreegpr; - } + if (reg != -1) freereg(ra, reg); } static void @@ -147,7 +148,6 @@ spill(struct rega *ra, int reg, struct block *blk, int curi) { if (!ra->regs[reg].t) return; var = ra->regs[reg].i; assert(ra->regs[reg].t == RTMP && *(ushort *)&ra->allocs[var] == *(ushort *)&areg(reg)); - ra->regs[reg] = NOREF; s = allocstk(ra, var); DBG("-- spill %%%d %s -> s%d\n", var, mctarg->rnames[reg], s); instrtab[var].reg = 0; @@ -155,9 +155,7 @@ spill(struct rega *ra, int reg, struct block *blk, int curi) { load = mkinstr(Oloads1 + 2*ilog2(cls2siz[instrtab[var].cls]), instrtab[var].cls, mkref(RICON, s*8)); load.reg = reg+1; addstkslotref(insertinstr(blk, ++curi, load)); - if (isfpr(reg)) --ra->nfreefpr; - else --ra->nfreegpr; - + freereg(ra, reg); } #define mkmove(k, rd, rs) mkinstr(Omove, k, mkref(RREG, rd), mkref(RREG, rs)) @@ -369,6 +367,7 @@ regalloc(struct function *fn) } bscopy(fn->regusage, globusage, 1); free(ra.allocs); + vfree(&ra.freestk); } /* vim:set ts=3 sw=3 expandtab: */ -- cgit v1.2.3