[pypy-svn] r66982 - pypy/branch/pyjitpl5/pypy/jit/backend/x86
fijal at codespeak.net
fijal at codespeak.net
Wed Aug 19 16:50:58 CEST 2009
Author: fijal
Date: Wed Aug 19 16:50:58 2009
New Revision: 66982
Modified:
pypy/branch/pyjitpl5/pypy/jit/backend/x86/regalloc.py
Log:
(pedronis, fijal) Refactor the code, remove the code duplication
Modified: pypy/branch/pyjitpl5/pypy/jit/backend/x86/regalloc.py
==============================================================================
--- pypy/branch/pyjitpl5/pypy/jit/backend/x86/regalloc.py (original)
+++ pypy/branch/pyjitpl5/pypy/jit/backend/x86/regalloc.py Wed Aug 19 16:50:58 2009
@@ -362,16 +362,7 @@
loc = self.free_regs.pop()
self.Load(v, convert_to_imm(v), loc)
return loc
- v_to_spill = self.pick_variable_to_spill(v, forbidden_vars, selected_reg)
- loc = self.loc(v_to_spill)
- if v_to_spill not in self.stack_bindings or v_to_spill in self.dirty_stack:
- newloc = self.stack_loc(v_to_spill)
- try:
- del self.dirty_stack[v_to_spill]
- except KeyError:
- pass
- self.Store(v_to_spill, loc, newloc)
- del self.reg_bindings[v_to_spill]
+ loc = self._spill_var(v, forbidden_vars, selected_reg)
self.free_regs.append(loc)
self.Load(v, convert_to_imm(v), loc)
return loc
@@ -385,13 +376,14 @@
loc = self.try_allocate_reg(v, selected_reg)
if loc:
return loc
- return self._spill_var(v, forbidden_vars, selected_reg)
+ loc = self._spill_var(v, forbidden_vars, selected_reg)
+ self.reg_bindings[v] = loc
+ return loc
def _spill_var(self, v, forbidden_vars, selected_reg):
v_to_spill = self.pick_variable_to_spill(v, forbidden_vars, selected_reg)
loc = self.reg_bindings[v_to_spill]
del self.reg_bindings[v_to_spill]
- self.reg_bindings[v] = loc
if v_to_spill not in self.stack_bindings or v_to_spill in self.dirty_stack:
newloc = self.stack_loc(v_to_spill)
try:
More information about the Pypy-commit
mailing list