[pypy-svn] pypy jit-shadowstack: Allow two versions of the tests (in the same executable): with or
arigo
commits-noreply at bitbucket.org
Thu Mar 31 13:58:34 CEST 2011
Author: Armin Rigo <arigo at tunes.org>
Branch: jit-shadowstack
Changeset: r43046:6b92b28a1f50
Date: 2011-03-31 13:57 +0200
http://bitbucket.org/pypy/pypy/changeset/6b92b28a1f50/
Log: Allow two versions of the tests (in the same executable): with or
without the malloc fast path.
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
@@ -6,7 +6,7 @@
"""
import weakref, random
-import py
+import py, os
from pypy.annotation import policy as annpolicy
from pypy.rlib import rgc
from pypy.rpython.lltypesystem import lltype, llmemory, rffi
@@ -72,6 +72,17 @@
return entrypoint
+def get_functions_to_patch():
+ from pypy.jit.backend.llsupport import gc
+ #
+ can_inline_malloc1 = gc.GcLLDescr_framework.can_inline_malloc
+ def can_inline_malloc2(*args):
+ if os.getenv('PYPY_NO_INLINE_MALLOC'):
+ return False
+ return can_inline_malloc1(*args)
+ #
+ return {(gc.GcLLDescr_framework, 'can_inline_malloc'): can_inline_malloc2}
+
def compile(f, gc, **kwds):
from pypy.annotation.listdef import s_list_of_strings
from pypy.translator.translator import TranslationContext
@@ -87,8 +98,21 @@
ann = t.buildannotator(policy=annpolicy.StrictAnnotatorPolicy())
ann.build_types(f, [s_list_of_strings], main_entry_point=True)
t.buildrtyper().specialize()
+
if kwds['jit']:
- apply_jit(t, enable_opts='')
+ patch = get_functions_to_patch()
+ old_value = {}
+ try:
+ for (obj, attr), value in patch.items():
+ old_value[obj, attr] = getattr(obj, attr)
+ setattr(obj, attr, value)
+ #
+ apply_jit(t, enable_opts='')
+ #
+ finally:
+ for (obj, attr), oldvalue in old_value.items():
+ setattr(obj, attr, oldvalue)
+
cbuilder = genc.CStandaloneBuilder(t, f, t.config)
cbuilder.generate_source()
cbuilder.compile()
@@ -182,11 +206,17 @@
finally:
GcLLDescr_framework.DEBUG = OLD_DEBUG
+ def _run(self, name, n, env):
+ res = self.cbuilder.cmdexec("%s %d" %(name, n), env=env)
+ assert int(res) == 20
+
def run(self, name, n=2000):
pypylog = udir.join('TestCompileFramework.log')
- res = self.cbuilder.cmdexec("%s %d" %(name, n),
- env={'PYPYLOG': ':%s' % pypylog})
- assert int(res) == 20
+ env = {'PYPYLOG': ':%s' % pypylog,
+ 'PYPY_NO_INLINE_MALLOC': '1'}
+ self._run(name, n, env)
+ del env['PYPY_NO_INLINE_MALLOC']
+ self._run(name, n, env)
def run_orig(self, name, n, x):
self.main_allfuncs(name, n, x)
More information about the Pypy-commit
mailing list