Author: Carl Friedrich Bolz-Tereick <[email protected]>
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
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit