[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