Author: Carl Friedrich Bolz-Tereick <cfb...@gmx.de> Branch: regalloc-playground Changeset: r92245:f19f3e988faf Date: 2017-08-24 10:20 +0200 http://bitbucket.org/pypy/pypy/changeset/f19f3e988faf/
Log: cleanups diff --git a/rpython/jit/backend/llsupport/regalloc.py b/rpython/jit/backend/llsupport/regalloc.py --- a/rpython/jit/backend/llsupport/regalloc.py +++ b/rpython/jit/backend/llsupport/regalloc.py @@ -403,23 +403,18 @@ self.free_regs.remove(loc) return loc - def _spill_var(self, v, forbidden_vars, selected_reg, + def _spill_var(self, forbidden_vars, selected_reg, need_lower_byte=False): - v_to_spill = self._pick_variable_to_spill(v, forbidden_vars, + v_to_spill = self._pick_variable_to_spill(forbidden_vars, selected_reg, need_lower_byte=need_lower_byte) loc = self.reg_bindings[v_to_spill] + self.assembler.num_spills += 1 + self._sync_var(v_to_spill) del self.reg_bindings[v_to_spill] - self.assembler.num_spills += 1 - if self.frame_manager.get(v_to_spill) is None: - newloc = self.frame_manager.loc(v_to_spill) - self.assembler.regalloc_mov(loc, newloc) - else: - self.assembler.num_spills_to_existing += 1 return loc - def _pick_variable_to_spill(self, v, forbidden_vars, selected_reg=None, + def _pick_variable_to_spill(self, forbidden_vars, selected_reg=None, need_lower_byte=False, vars=None): - # YYY v is unused, remove # try to spill a variable that has no further real usages, ie that only # appears in failargs or in a jump @@ -529,7 +524,7 @@ if selected_reg in self.free_regs: self.assembler.regalloc_mov(immloc, selected_reg) return selected_reg - loc = self._spill_var(v, forbidden_vars, selected_reg) + loc = self._spill_var(forbidden_vars, selected_reg) self.free_regs.append(loc) self.assembler.regalloc_mov(immloc, loc) return loc @@ -578,12 +573,8 @@ self._check_type(result_v) self._check_type(v) if isinstance(v, Const): - if self.free_regs: - loc = self.free_regs.pop() - else: - loc = self._spill_var(v, forbidden_vars, None) + loc = self.force_allocate_reg(result_v, forbidden_vars) self.assembler.regalloc_mov(self.convert_to_imm(v), loc) - self.reg_bindings[result_v] = loc return loc if v not in self.reg_bindings: # v not in a register. allocate one for result_v and move v there @@ -605,11 +596,13 @@ return loc def _sync_var(self, v): + self.assembler.num_spills += 1 if not self.frame_manager.get(v): - self.assembler.num_moves_calls += 1 reg = self.reg_bindings[v] to = self.frame_manager.loc(v) self.assembler.regalloc_mov(reg, to) + else: + self.assembler.num_spills_to_existing += 1 # otherwise it's clean def _bc_spill(self, v, new_free_regs): @@ -1102,6 +1095,7 @@ return LifetimeManager(longevity) +# YYY unused? def is_comparison_or_ovf_op(opnum): return rop.is_comparison(opnum) or rop.is_ovf(opnum) diff --git a/rpython/jit/backend/llsupport/test/test_regalloc.py b/rpython/jit/backend/llsupport/test/test_regalloc.py --- a/rpython/jit/backend/llsupport/test/test_regalloc.py +++ b/rpython/jit/backend/llsupport/test/test_regalloc.py @@ -334,7 +334,7 @@ longevity.fixed_register(35, r2, b2) loc = longevity.try_pick_free_reg(0, b3, [r1, r2]) - # r2 is picked, otherwise b0 can't b0 can't end up in r1 + # r2 is picked, otherwise b0 can't end up in r1 assert loc is r2 loc = longevity.try_pick_free_reg(0, b4, [r1, r2]) @@ -1303,7 +1303,6 @@ i5 = escape_i() jump(i4, i5, descr=targettoken) ''' - self.targettoken._fake_arglocs = [r5, r6] emitted = self.allocate(ops) assert emitted == [ ('escape_i', r0, []), _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit