[pypy-svn] r74580 - in pypy/branch/blackhole-improvement/pypy/jit: codewriter codewriter/test metainterp

arigo at codespeak.net arigo at codespeak.net
Wed May 19 16:49:41 CEST 2010


Author: arigo
Date: Wed May 19 16:49:40 2010
New Revision: 74580

Modified:
   pypy/branch/blackhole-improvement/pypy/jit/codewriter/assembler.py
   pypy/branch/blackhole-improvement/pypy/jit/codewriter/test/test_assembler.py
   pypy/branch/blackhole-improvement/pypy/jit/codewriter/test/test_flatten.py
   pypy/branch/blackhole-improvement/pypy/jit/codewriter/test/test_regalloc.py
   pypy/branch/blackhole-improvement/pypy/jit/metainterp/pyjitpl.py
Log:
Do something reasonable for keepalives.


Modified: pypy/branch/blackhole-improvement/pypy/jit/codewriter/assembler.py
==============================================================================
--- pypy/branch/blackhole-improvement/pypy/jit/codewriter/assembler.py	(original)
+++ pypy/branch/blackhole-improvement/pypy/jit/codewriter/assembler.py	Wed May 19 16:49:40 2010
@@ -98,6 +98,12 @@
                 self.get_liveness_info(insn, 'ref'),
                 self.get_liveness_info(insn, 'float'))
             return
+        if insn[0] == 'keepalive':
+            # The 'keepalive' instruction is useful when doing register
+            # allocation, to ensure that the register holding the value is
+            # not overwritten too early.  But it does not need to be
+            # present at all in the final code.
+            return
         startposition = len(self.code)
         self.code.append("temporary placeholder")
         #

Modified: pypy/branch/blackhole-improvement/pypy/jit/codewriter/test/test_assembler.py
==============================================================================
--- pypy/branch/blackhole-improvement/pypy/jit/codewriter/test/test_assembler.py	(original)
+++ pypy/branch/blackhole-improvement/pypy/jit/codewriter/test/test_assembler.py	Wed May 19 16:49:40 2010
@@ -149,6 +149,13 @@
     assembler.assemble(ssarepr)
     assert assembler.indirectcalltargets == set(lst1).union(lst2)
 
+def test_assemble_keepalive():
+    ssarepr = SSARepr("test")
+    ssarepr.insns = [('keepalive', Register('ref', 2))]
+    assembler = Assembler()
+    jitcode = assembler.assemble(ssarepr)
+    assert jitcode.code == ""     # the keepalive is removed
+
 def test_num_regs():
     assembler = Assembler()
     ssarepr = SSARepr("test")

Modified: pypy/branch/blackhole-improvement/pypy/jit/codewriter/test/test_flatten.py
==============================================================================
--- pypy/branch/blackhole-improvement/pypy/jit/codewriter/test/test_flatten.py	(original)
+++ pypy/branch/blackhole-improvement/pypy/jit/codewriter/test/test_flatten.py	Wed May 19 16:49:40 2010
@@ -9,6 +9,7 @@
 from pypy.translator.unsimplify import varoftype
 from pypy.rlib.rarithmetic import ovfcheck
 from pypy.rlib.jit import dont_look_inside, _we_are_jitted, JitDriver
+from pypy.rlib.objectmodel import keepalive_until_here
 
 
 class FakeRegAlloc:
@@ -462,3 +463,21 @@
             can_enter_jit
             void_return
         """, transform=True)
+
+    def test_keepalive(self):
+        S = lltype.GcStruct('S')
+        def g():
+            return lltype.malloc(S)
+        def f(x):
+            p = g()
+            q = g()
+            keepalive_until_here(p)
+            keepalive_until_here(q)
+            return x
+        self.encoding_test(f, [5], """
+            G_residual_call_r_r $<* fn g>, <Descr>, R[], %r0
+            G_residual_call_r_r $<* fn g>, <Descr>, R[], %r1
+            keepalive %r0
+            keepalive %r1
+            int_return %i0
+        """, transform=True)

Modified: pypy/branch/blackhole-improvement/pypy/jit/codewriter/test/test_regalloc.py
==============================================================================
--- pypy/branch/blackhole-improvement/pypy/jit/codewriter/test/test_regalloc.py	(original)
+++ pypy/branch/blackhole-improvement/pypy/jit/codewriter/test/test_regalloc.py	Wed May 19 16:49:40 2010
@@ -8,6 +8,7 @@
 from pypy.objspace.flow.model import c_last_exception
 from pypy.rpython.lltypesystem import lltype, rclass
 from pypy.rlib.rarithmetic import ovfcheck
+from pypy.rlib.objectmodel import keepalive_until_here
 
 
 class TestRegAlloc:

Modified: pypy/branch/blackhole-improvement/pypy/jit/metainterp/pyjitpl.py
==============================================================================
--- pypy/branch/blackhole-improvement/pypy/jit/metainterp/pyjitpl.py	(original)
+++ pypy/branch/blackhole-improvement/pypy/jit/metainterp/pyjitpl.py	Wed May 19 16:49:40 2010
@@ -760,10 +760,6 @@
 ##            'len', [builtin.len_func, box], 'int')
 ##        self.generate_guard(pc, "guard_len", box, [intbox])
 
-    @FixME  #arguments("box")
-    def opimpl_keepalive(self, box):
-        pass     # xxx?
-
     def verify_green_args(self, varargs):
         num_green_args = self.metainterp.staticdata.num_green_args
         for i in range(num_green_args):



More information about the Pypy-commit mailing list