[pypy-commit] pypy jitypes2: add a test checking that we do not allocate the frame when calling an _ffi function
antocuni
noreply at buildbot.pypy.org
Fri Jun 3 15:43:31 CEST 2011
Author: Antonio Cuni <anto.cuni at gmail.com>
Branch: jitypes2
Changeset: r44663:9e137919a155
Date: 2011-06-03 11:19 +0200
http://bitbucket.org/pypy/pypy/changeset/9e137919a155/
Log: add a test checking that we do not allocate the frame when calling
an _ffi function
diff --git a/pypy/module/pypyjit/test_pypy_c/test_pypy_c_new.py b/pypy/module/pypyjit/test_pypy_c/test_pypy_c_new.py
--- a/pypy/module/pypyjit/test_pypy_c/test_pypy_c_new.py
+++ b/pypy/module/pypyjit/test_pypy_c/test_pypy_c_new.py
@@ -1612,6 +1612,40 @@
guard_no_exception(descr=...)
""" % pow_addr)
+
+ def test__ffi_call_frame_does_not_escape(self):
+ from pypy.rlib.test.test_libffi import get_libm_name
+ def main(libm_name):
+ try:
+ from _ffi import CDLL, types
+ except ImportError:
+ sys.stderr.write('SKIP: cannot import _ffi\n')
+ return 0
+
+ libm = CDLL(libm_name)
+ pow = libm.getfunc('pow', [types.double, types.double],
+ types.double)
+
+ def mypow(a, b):
+ return pow(a, b)
+
+ i = 0
+ res = 0
+ while i < 300:
+ tmp = mypow(2, 3)
+ res += tmp
+ i += 1
+ return pow.getaddr(), res
+ #
+ libm_name = get_libm_name(sys.platform)
+ log = self.run(main, [libm_name], threshold=200)
+ pow_addr, res = log.result
+ assert res == 8.0 * 300
+ loop, = log.loops_by_filename(self.filepath)
+ opnames = log.opnames(loop.allops())
+ # we only force the virtualref, not its content
+ assert opnames.count('new_with_vtable') == 1
+
def test_xor(self):
def main(b):
a = sa = 0
More information about the pypy-commit
mailing list