[pypy-svn] r74644 - in pypy/branch/blackhole-improvement/pypy/jit/codewriter: . test
arigo at codespeak.net
arigo at codespeak.net
Fri May 21 18:51:26 CEST 2010
Author: arigo
Date: Fri May 21 18:51:24 2010
New Revision: 74644
Modified:
pypy/branch/blackhole-improvement/pypy/jit/codewriter/jtransform.py
pypy/branch/blackhole-improvement/pypy/jit/codewriter/test/test_flatten.py
Log:
Next test.
Modified: pypy/branch/blackhole-improvement/pypy/jit/codewriter/jtransform.py
==============================================================================
--- pypy/branch/blackhole-improvement/pypy/jit/codewriter/jtransform.py (original)
+++ pypy/branch/blackhole-improvement/pypy/jit/codewriter/jtransform.py Fri May 21 18:51:24 2010
@@ -293,13 +293,6 @@
op1 = self._prepare_builtin_call(op, oopspec_name, args)
return self.handle_residual_call(op1)
- def _handle_virtual_ref_call(self, op, oopspec_name, args):
- vrefinfo = self.callcontrol.virtualref_info
- heaptracker.register_known_gctype(self.cpu,
- vrefinfo.jit_virtual_ref_vtable,
- vrefinfo.JIT_VIRTUAL_REF)
- return SpaceOperation(oopspec_name, list(args), op.result)
-
handle_residual_indirect_call = handle_residual_call
def handle_regular_indirect_call(self, op):
@@ -679,6 +672,19 @@
def handle_jit_marker__can_enter_jit(self, op, jitdriver):
return SpaceOperation('can_enter_jit', [], None)
+ # ----------
+ # VirtualRefs.
+
+ def _handle_virtual_ref_call(self, op, oopspec_name, args):
+ vrefinfo = self.callcontrol.virtualref_info
+ heaptracker.register_known_gctype(self.cpu,
+ vrefinfo.jit_virtual_ref_vtable,
+ vrefinfo.JIT_VIRTUAL_REF)
+ return SpaceOperation(oopspec_name, list(args), op.result)
+
+ def rewrite_op_jit_force_virtual(self, op):
+ return self._do_builtin_call(op)
+
# ____________________________________________________________
def _with_prefix(prefix):
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 Fri May 21 18:51:24 2010
@@ -75,7 +75,13 @@
jit_virtual_ref_vtable = lltype.malloc(rclass.OBJECT_VTABLE,
immortal=True)
def guess_call_kind(self, op):
- return 'builtin'
+ if hasattr(op.args[0].value._obj.graph.func, 'oopspec'):
+ return 'builtin'
+ return 'residual'
+ def getcalldescr(self, op):
+ return FakeDescr()
+ def calldescr_canraise(self, calldescr):
+ return False
# ____________________________________________________________
@@ -576,7 +582,6 @@
""", transform=True, liveness=True)
def test_vref_simple(self):
- from pypy.jit.codewriter.call import CallControl
class X:
pass
def f():
@@ -586,3 +591,19 @@
virtual_ref %r0 -> %r1
ref_return %r1
""", transform=True, cc=FakeCallControlWithVRefInfo())
+
+ def test_vref_forced(self):
+ class X:
+ pass
+ def f():
+ vref = jit.virtual_ref(X())
+ return vref()
+ # The call vref() is a jit_force_virtual operation in the original
+ # graph. It becomes in the JitCode a residual call to a helper that
+ # contains itself a jit_force_virtual.
+ self.encoding_test(f, [], """
+ new_with_vtable <Descr> -> %r0
+ virtual_ref %r0 -> %r1
+ residual_call_r_r $<* fn _ll_1_jit_force_virtual__objectPtr>, <Descr>, R[%r1] -> %r2
+ ref_return %r2
+ """, transform=True, cc=FakeCallControlWithVRefInfo())
More information about the Pypy-commit
mailing list