[pypy-svn] r69972 - in pypy/branch/virtual-forcing/pypy/jit/metainterp: . test
arigo at codespeak.net
arigo at codespeak.net
Tue Dec 8 11:12:00 CET 2009
Author: arigo
Date: Tue Dec 8 11:12:00 2009
New Revision: 69972
Modified:
pypy/branch/virtual-forcing/pypy/jit/metainterp/codewriter.py
pypy/branch/virtual-forcing/pypy/jit/metainterp/support.py
pypy/branch/virtual-forcing/pypy/jit/metainterp/test/test_virtualref.py
Log:
Implement 'jit_force_virtual' in JITted code too.
Modified: pypy/branch/virtual-forcing/pypy/jit/metainterp/codewriter.py
==============================================================================
--- pypy/branch/virtual-forcing/pypy/jit/metainterp/codewriter.py (original)
+++ pypy/branch/virtual-forcing/pypy/jit/metainterp/codewriter.py Tue Dec 8 11:12:00 2009
@@ -1577,8 +1577,7 @@
self.vable_flags[op.args[0]] = op.args[2].value
def serialize_op_jit_force_virtual(self, op):
- raise ForcingVirtualRef("forcing a virtual_ref, i.e. calling it, "
- "should not be seen by the JIT")
+ self._do_builtin_call(op, 'jit_force_virtual', op.args)
serialize_op_oostring = handle_builtin_call
serialize_op_oounicode = handle_builtin_call
Modified: pypy/branch/virtual-forcing/pypy/jit/metainterp/support.py
==============================================================================
--- pypy/branch/virtual-forcing/pypy/jit/metainterp/support.py (original)
+++ pypy/branch/virtual-forcing/pypy/jit/metainterp/support.py Tue Dec 8 11:12:00 2009
@@ -3,6 +3,7 @@
from pypy.rpython import rlist
from pypy.rpython.lltypesystem import rstr as ll_rstr, rdict as ll_rdict
from pypy.rpython.lltypesystem import rlist as lltypesystem_rlist
+from pypy.rpython.lltypesystem.lloperation import llop
from pypy.rpython.ootypesystem import rdict as oo_rdict
from pypy.rpython.llinterp import LLInterpreter
from pypy.rpython.extregistry import ExtRegistryEntry
@@ -136,6 +137,9 @@
def _ll_1_gc_identityhash(x):
return lltype.identityhash(x)
+def _ll_1_jit_force_virtual(inst):
+ return llop.jit_force_virtual(lltype.typeOf(inst), inst)
+
class LLtypeHelpers:
Modified: pypy/branch/virtual-forcing/pypy/jit/metainterp/test/test_virtualref.py
==============================================================================
--- pypy/branch/virtual-forcing/pypy/jit/metainterp/test/test_virtualref.py (original)
+++ pypy/branch/virtual-forcing/pypy/jit/metainterp/test/test_virtualref.py Tue Dec 8 11:12:00 2009
@@ -334,6 +334,32 @@
res = self.meta_interp(f, [15])
assert res == 1
+ def test_jit_force_virtual_seen(self):
+ myjitdriver = JitDriver(greens = [], reds = ['n'])
+ #
+ class XY:
+ pass
+ class ExCtx:
+ pass
+ exctx = ExCtx()
+ #
+ def f(n):
+ later = None
+ while n > 0:
+ myjitdriver.can_enter_jit(n=n)
+ myjitdriver.jit_merge_point(n=n)
+ xy = XY()
+ xy.n = n
+ exctx.topframeref = virtual_ref(xy)
+ n = exctx.topframeref().n - 1
+ exctx.topframeref = vref_None
+ virtual_ref_finish(xy)
+ return 1
+ #
+ res = self.meta_interp(f, [15])
+ assert res == 1
+ self.check_loops({}) # because we aborted tracing
+
class TestLLtype(VRefTests, LLJitMixin):
pass
More information about the Pypy-commit
mailing list