[pypy-commit] pypy inline-virtualref-2: bring over the test
alex_gaynor
noreply at buildbot.pypy.org
Wed Jan 23 14:41:44 CET 2013
Author: Alex Gaynor <alex.gaynor at gmail.com>
Branch: inline-virtualref-2
Changeset: r60371:029788868de3
Date: 2013-01-23 05:15 -0800
http://bitbucket.org/pypy/pypy/changeset/029788868de3/
Log: bring over the test
diff --git a/rpython/jit/metainterp/test/test_virtualref.py b/rpython/jit/metainterp/test/test_virtualref.py
--- a/rpython/jit/metainterp/test/test_virtualref.py
+++ b/rpython/jit/metainterp/test/test_virtualref.py
@@ -1,19 +1,20 @@
import py
-from rpython.rtyper.lltypesystem import lltype, llmemory, lloperation
+
+from rpython.rtyper.lltypesystem import lltype, lloperation
from rpython.rtyper.exceptiondata import UnknownException
from rpython.rlib.jit import JitDriver, dont_look_inside, vref_None
from rpython.rlib.jit import virtual_ref, virtual_ref_finish, InvalidVirtualRef
from rpython.rlib.jit import non_virtual_ref
from rpython.rlib.objectmodel import compute_unique_id
-from rpython.jit.metainterp.test.support import LLJitMixin, OOJitMixin, _get_jitcodes
+from rpython.jit.metainterp.test.support import LLJitMixin, _get_jitcodes
from rpython.jit.metainterp.resoperation import rop
from rpython.jit.metainterp.virtualref import VirtualRefInfo
+
debug_print = lloperation.llop.debug_print
-class VRefTests:
-
+class VRefTests(object):
def finish_setup_for_interp_operations(self):
self.vrefinfo = VirtualRefInfo(self.warmrunnerstate)
self.cw.setup_vrefinfo(self.vrefinfo)
@@ -115,8 +116,8 @@
from rpython.jit.metainterp.resume import ResumeDataDirectReader
cpu = self.metainterp.cpu
cpu.get_latest_value_count = lambda df: len(guard_op.getfailargs())
- cpu.get_latest_value_int = lambda df,i:guard_op.getfailargs()[i].getint()
- cpu.get_latest_value_ref = lambda df,i:guard_op.getfailargs()[i].getref_base()
+ cpu.get_latest_value_int = lambda df, i: guard_op.getfailargs()[i].getint()
+ cpu.get_latest_value_ref = lambda df, i: guard_op.getfailargs()[i].getref_base()
cpu.clear_latest_values = lambda count: None
class FakeMetaInterpSd:
callinfocollection = None
@@ -656,6 +657,31 @@
res = self.meta_interp(f, [10])
assert res == 0
+ def test_force_virtual_vref(self):
+ myjitdriver = JitDriver(greens=[], reds=['n', 'ec'])
+
+ class ExecutionContext(object):
+ pass
+
+ class Frame(object):
+ def __init__(self, x):
+ self.x = x
+
+ def f(n):
+ ec = ExecutionContext()
+ while n > 0:
+ myjitdriver.jit_merge_point(n=n, ec=ec)
+ frame = Frame(1)
+ ec.topframeref = virtual_ref(frame)
+ n -= ec.topframeref().x
+ frame_vref = ec.topframeref
+ ec.topframeref = vref_None
+ virtual_ref_finish(frame_vref, frame)
+ return n
+ res = self.meta_interp(f, [10])
+ assert res == 0
+ self.check_resops({'int_sub': 1, 'int_gt': 1, 'jump': 1})
+
class TestLLtype(VRefTests, LLJitMixin):
pass
More information about the pypy-commit
mailing list