[pypy-commit] pypy jitypes2: Add a simpler test.
Armin Rigo
noreply at buildbot.pypy.org
Tue May 31 16:03:38 CEST 2011
Author: Armin Rigo <arigo at tunes.org>
Branch: jitypes2
Changeset: r44611:1f7c40ec3850
Date: 2011-05-31 15:05 +0200
http://bitbucket.org/pypy/pypy/changeset/1f7c40ec3850/
Log: Add a simpler test.
diff --git a/pypy/jit/backend/x86/test/test_zrpy_gc.py b/pypy/jit/backend/x86/test/test_zrpy_gc.py
--- a/pypy/jit/backend/x86/test/test_zrpy_gc.py
+++ b/pypy/jit/backend/x86/test/test_zrpy_gc.py
@@ -149,8 +149,10 @@
# ______________________________________________________________________
-class CompileFrameworkTests(object):
- # Test suite using (so far) the minimark GC.
+
+class BaseFrameworkTests(object):
+ compile_kwds = {}
+
def setup_class(cls):
funcs = []
name_to_func = {}
@@ -200,7 +202,8 @@
try:
GcLLDescr_framework.DEBUG = True
cls.cbuilder = compile(get_entry(allfuncs), DEFL_GC,
- gcrootfinder=cls.gcrootfinder, jit=True)
+ gcrootfinder=cls.gcrootfinder, jit=True,
+ **cls.compile_kwds)
finally:
GcLLDescr_framework.DEBUG = OLD_DEBUG
@@ -219,32 +222,36 @@
def run_orig(self, name, n, x):
self.main_allfuncs(name, n, x)
- def define_libffi_workaround(cls):
- # XXX: this is a workaround for a bug in database.py. It seems that
- # the problem is triggered by optimizeopt/fficall.py, and in
- # particular by the ``cast_base_ptr_to_instance(Func, llfunc)``: in
- # these tests, that line is the only place where libffi.Func is
- # referenced.
- #
- # The problem occurs because the gctransformer tries to annotate a
- # low-level helper to call the __del__ of libffi.Func when it's too
- # late.
- #
- # This workaround works by forcing the annotator (and all the rest of
- # the toolchain) to see libffi.Func in a "proper" context, not just as
- # the target of cast_base_ptr_to_instance. Note that the function
- # below is *never* called by any actual test, it's just annotated.
- #
- from pypy.rlib.libffi import get_libc_name, CDLL, types, ArgChain
- libc_name = get_libc_name()
- def f(n, x, *args):
- libc = CDLL(libc_name)
- ptr = libc.getpointer('labs', [types.slong], types.slong)
- chain = ArgChain()
- chain.arg(n)
- n = ptr.call(chain, lltype.Signed)
- return (n, x) + args
- return None, f, None
+
+class CompileFrameworkTests(BaseFrameworkTests):
+ # Test suite using (so far) the minimark GC.
+
+## def define_libffi_workaround(cls):
+## # XXX: this is a workaround for a bug in database.py. It seems that
+## # the problem is triggered by optimizeopt/fficall.py, and in
+## # particular by the ``cast_base_ptr_to_instance(Func, llfunc)``: in
+## # these tests, that line is the only place where libffi.Func is
+## # referenced.
+## #
+## # The problem occurs because the gctransformer tries to annotate a
+## # low-level helper to call the __del__ of libffi.Func when it's too
+## # late.
+## #
+## # This workaround works by forcing the annotator (and all the rest of
+## # the toolchain) to see libffi.Func in a "proper" context, not just as
+## # the target of cast_base_ptr_to_instance. Note that the function
+## # below is *never* called by any actual test, it's just annotated.
+## #
+## from pypy.rlib.libffi import get_libc_name, CDLL, types, ArgChain
+## libc_name = get_libc_name()
+## def f(n, x, *args):
+## libc = CDLL(libc_name)
+## ptr = libc.getpointer('labs', [types.slong], types.slong)
+## chain = ArgChain()
+## chain.arg(n)
+## n = ptr.call(chain, lltype.Signed)
+## return (n, x) + args
+## return None, f, None
def define_compile_framework_1(cls):
# a moving GC. Supports malloc_varsize_nonmovable. Simple test, works
diff --git a/pypy/jit/backend/x86/test/test_zrpy_releasegil.py b/pypy/jit/backend/x86/test/test_zrpy_releasegil.py
--- a/pypy/jit/backend/x86/test/test_zrpy_releasegil.py
+++ b/pypy/jit/backend/x86/test/test_zrpy_releasegil.py
@@ -1,18 +1,51 @@
from pypy.rpython.lltypesystem import lltype, llmemory, rffi
-from pypy.rlib.jit import JitDriver, dont_look_inside
-from pypy.config.translationoption import DEFL_GC
+from pypy.rlib.jit import dont_look_inside
+from pypy.jit.metainterp.optimizeopt import ALL_OPTS_NAMES
-from pypy.jit.backend.x86.test.test_zrpy_gc import get_entry, get_g
-from pypy.jit.backend.x86.test.test_zrpy_gc import compile_and_run
+from pypy.rlib.libffi import CDLL, types, ArgChain, clibffi
+from pypy.rpython.lltypesystem.ll2ctypes import libc_name
+from pypy.rpython.annlowlevel import llhelper
+
+from pypy.jit.backend.x86.test.test_zrpy_gc import BaseFrameworkTests
from pypy.jit.backend.x86.test.test_zrpy_gc import check
-class ReleaseGILTests(object):
- def test_close_stack(self):
- from pypy.rlib.libffi import CDLL, types, ArgChain, clibffi
- from pypy.rpython.lltypesystem.ll2ctypes import libc_name
- from pypy.rpython.annlowlevel import llhelper
- from pypy.jit.metainterp.optimizeopt import ALL_OPTS_NAMES
+class ReleaseGILTests(BaseFrameworkTests):
+ compile_kwds = dict(enable_opts=ALL_OPTS_NAMES, thread=True)
+
+ def define_simple(self):
+ class Glob:
+ pass
+ glob = Glob()
+ #
+ def f42(n):
+ c_strchr = glob.c_strchr
+ raw = rffi.str2charp("foobar" + chr((n & 63) + 32))
+ argchain = ArgChain()
+ argchain = argchain.arg(rffi.cast(lltype.Signed, raw))
+ argchain = argchain.arg(rffi.cast(rffi.INT, ord('b')))
+ res = c_strchr.call(argchain, rffi.CCHARP)
+ check(rffi.charp2str(res) == "bar" + chr((n & 63) + 32))
+ rffi.free_charp(raw)
+ #
+ def before(n, x):
+ libc = CDLL(libc_name)
+ c_strchr = libc.getpointer('strchr', [types.pointer, types.sint],
+ types.pointer)
+ glob.c_strchr = c_strchr
+ return (n, None, None, None, None, None,
+ None, None, None, None, None, None)
+ #
+ def f(n, x, *args):
+ f42(n)
+ n -= 1
+ return (n, x) + args
+ return before, f, None
+
+ def test_simple(self):
+ self.run('simple')
+
+ def define_close_stack(self):
#
class Glob(object):
pass
@@ -49,7 +82,7 @@
check(len(glob.lst) > length)
del glob.lst[:]
#
- def before():
+ def before(n, x):
libc = CDLL(libc_name)
types_size_t = clibffi.cast_type_to_ffitype(rffi.SIZE_T)
c_qsort = libc.getpointer('qsort', [types.pointer, types_size_t,
@@ -57,23 +90,21 @@
types.void)
glob.c_qsort = c_qsort
glob.lst = []
+ return (n, None, None, None, None, None,
+ None, None, None, None, None, None)
#
- myjitdriver = JitDriver(greens=[], reds=['n'])
- def main(n, x):
- before()
- while n > 0:
- myjitdriver.jit_merge_point(n=n)
- f42()
- n -= 1
- #
- res = compile_and_run(get_entry(get_g(main)), DEFL_GC,
- gcrootfinder=self.gcrootfinder, jit=True,
- enable_opts=ALL_OPTS_NAMES,
- thread=True)
- assert int(res) == 20
+ def f(n, x, *args):
+ f42()
+ n -= 1
+ return (n, x) + args
+ return before, f, None
-class TestGILShadowStack(ReleaseGILTests):
+ def test_close_stack(self):
+ self.run('close_stack')
+
+
+class TestShadowStack(ReleaseGILTests):
gcrootfinder = "shadowstack"
-class TestGILAsmGcc(ReleaseGILTests):
+class TestAsmGcc(ReleaseGILTests):
gcrootfinder = "asmgcc"
More information about the pypy-commit
mailing list