[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