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