Author: Remi Meier <[email protected]>
Branch: stmgc-c4
Changeset: r66389:1ae1396869f6
Date: 2013-08-27 11:41 +0200
http://bitbucket.org/pypy/pypy/changeset/1ae1396869f6/

Log:    cleanup for last fix

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
@@ -399,6 +399,13 @@
                 self.reg_bindings[v] = loc
                 return loc
 
+    def update_spill_loc_if_necessary(self, var, current_loc):
+        """if variable var is in two locations (spilled and current_loc),
+        update spilled location with current_loc"""
+        spill_loc = self.frame_manager.get(var)
+        if spill_loc:
+            self.assembler.regalloc_mov(current_loc, spill_loc)
+
     def _spill_var(self, v, forbidden_vars, selected_reg,
                    need_lower_byte=False):
         v_to_spill = self._pick_variable_to_spill(v, forbidden_vars,
diff --git a/rpython/jit/backend/x86/regalloc.py 
b/rpython/jit/backend/x86/regalloc.py
--- a/rpython/jit/backend/x86/regalloc.py
+++ b/rpython/jit/backend/x86/regalloc.py
@@ -816,10 +816,10 @@
         argloc = self.rm.make_sure_var_in_reg(arg)
         self.perform_discard(op, [argloc])
 
-        spilled_loc = self.rm.frame_manager.get(arg)
-        if spilled_loc:
-            # spilled var, make sure it gets updated in the frame too
-            self.assembler.regalloc_mov(argloc, spilled_loc)
+        # if 'arg' is in two locations (once in argloc and once spilled
+        # on the frame), we need to ensure that both locations are
+        # updated with the possibly changed reference.
+        self.rm.update_spill_loc_if_necessary(arg, argloc)
 
 
     consider_cond_call_gc_wb_array = consider_cond_call_gc_wb
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to