[pypy-commit] pypy ffistruct: add optimizeopt unit test for the struct_{get, set}field optimization
antocuni
noreply at buildbot.pypy.org
Fri Sep 9 15:36:15 CEST 2011
Author: Antonio Cuni <anto.cuni at gmail.com>
Branch: ffistruct
Changeset: r47184:00cacb3f4be4
Date: 2011-09-09 15:32 +0200
http://bitbucket.org/pypy/pypy/changeset/00cacb3f4be4/
Log: add optimizeopt unit test for the struct_{get,set}field optimization
diff --git a/pypy/jit/metainterp/optimizeopt/test/test_optimizefficall.py b/pypy/jit/metainterp/optimizeopt/test/test_optimizefficall.py
--- a/pypy/jit/metainterp/optimizeopt/test/test_optimizefficall.py
+++ b/pypy/jit/metainterp/optimizeopt/test/test_optimizefficall.py
@@ -56,6 +56,13 @@
restype=types.sint,
flags=43)
#
+ ffi_slong = types.slong
+ dyn_123_field = cpu.fielddescrof_dynamic(offset=123,
+ fieldsize=types.slong.c_size,
+ is_pointer=False,
+ is_float=False,
+ is_signed=True)
+ #
def calldescr(cpu, FUNC, oopspecindex, extraeffect=None):
if extraeffect == EffectInfo.EF_RANDOM_EFFECTS:
f = None # means "can force all" really
@@ -69,6 +76,8 @@
libffi_push_arg = calldescr(cpu, FUNC, EffectInfo.OS_LIBFFI_PUSH_ARG)
libffi_call = calldescr(cpu, FUNC, EffectInfo.OS_LIBFFI_CALL,
EffectInfo.EF_RANDOM_EFFECTS)
+ libffi_struct_getfield = calldescr(cpu, FUNC, EffectInfo.OS_LIBFFI_STRUCT_GETFIELD)
+ libffi_struct_setfield = calldescr(cpu, FUNC, EffectInfo.OS_LIBFFI_STRUCT_SETFIELD)
namespace = namespace.__dict__
@@ -277,3 +286,20 @@
jump(i3, f1, p2)
"""
loop = self.optimize_loop(ops, expected)
+
+ def test_ffi_struct_fields(self):
+ ops = """
+ [i0]
+ i1 = call(0, ConstClass(ffi_slong), i0, 123, descr=libffi_struct_getfield)
+ i2 = int_add(i1, 1)
+ call(0, ConstClass(ffi_slong), i0, 123, i2, descr=libffi_struct_setfield)
+ jump(i1)
+ """
+ expected = """
+ [i0]
+ i1 = getfield_raw(i0, descr=dyn_123_field)
+ i2 = int_add(i1, 1)
+ setfield_raw(i0, i2, descr=dyn_123_field)
+ jump(i1)
+ """
+ loop = self.optimize_loop(ops, expected)
More information about the pypy-commit
mailing list