Author: Richard Plangger <planri...@gmail.com>
Branch: fix-longevity
Changeset: r82441:efbb3a7664a1
Date: 2016-02-23 15:28 +0100
http://bitbucket.org/pypy/pypy/changeset/efbb3a7664a1/

Log:    (remi, plan_rich) resolved one issue in the allocation. this avoids
        reloading from the frame if one variable is already in a register

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
@@ -559,8 +559,9 @@
             # store result in the same place
             loc = self.reg_bindings[v]
             del self.reg_bindings[v]
-            if self.frame_manager.get(v) is None:
+            if self.frame_manager.get(v) is None or self.free_regs:
                 self._move_variable_away(v, loc)
+
             self.reg_bindings[result_v] = loc
         else:
             self._reallocate_from_to(v, result_v)
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
@@ -249,6 +249,24 @@
         loc = rm.loc(b1)
         assert isinstance(loc, FakeReg)
         loc = rm.loc(b0)
+        assert isinstance(loc, FakeReg)
+        assert len(asm.moves) == 2
+
+    def test_force_result_in_register_reload_parameter_from_frame_later(self):
+        b0, b1 = newboxes(0, 0)
+        longevity = {b0: (0, 1), b1: (0, 1)}
+        fm = TFrameManager()
+        asm = MockAsm()
+        rm = RegisterManager(longevity, frame_manager=fm, assembler=asm)
+        rm.free_regs = rm.free_regs[:1]
+        rm.all_regs = rm.free_regs[:]
+        rm.next_instruction()
+        fm.loc(b0)
+        rm.force_result_in_reg(b1, b0)
+        rm._check_invariants()
+        loc = rm.loc(b1)
+        assert isinstance(loc, FakeReg)
+        loc = rm.loc(b0)
         assert isinstance(loc, FakeFramePos)
         assert len(asm.moves) == 1
 
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to