[pypy-commit] pypy force-virtual-state: Add test case for generating the proper guard on a raw pointer during short preamble creation
sbauman
pypy.commits at gmail.com
Wed Sep 7 18:47:25 EDT 2016
Author: Spenser Andrew Bauman <sabauma at gmail.com>
Branch: force-virtual-state
Changeset: r86951:9fea14c01cc4
Date: 2016-09-07 18:46 -0400
http://bitbucket.org/pypy/pypy/changeset/9fea14c01cc4/
Log: Add test case for generating the proper guard on a raw pointer
during short preamble creation
diff --git a/rpython/jit/metainterp/test/test_ajit.py b/rpython/jit/metainterp/test/test_ajit.py
--- a/rpython/jit/metainterp/test/test_ajit.py
+++ b/rpython/jit/metainterp/test/test_ajit.py
@@ -4508,3 +4508,38 @@
return i
self.meta_interp(f, [])
+ def test_round_trip_raw_pointer(self):
+ driver = JitDriver(greens=[], reds=['i', 'val'])
+
+ class Box(object):
+ _immutable_fields_ = ['_ptr']
+ _ptr = lltype.nullptr(rffi.CCHARP.TO)
+
+ def new_int_buffer(value):
+ data = lltype.malloc(rffi.CCHARP.TO, noConst(rffi.sizeof(rffi.INT)), flavor='raw', zero=True)
+ rffi.cast(rffi.INTP, data)[0] = rffi.cast(rffi.INT, value)
+ return data
+
+ def read_int_buffer(buf):
+ return rffi.cast(rffi.INTP, buf)[0]
+
+ def f():
+ i = 0
+ val = Box()
+ val._ptr = new_int_buffer(1)
+
+ set_param(None, 'retrace_limit', -1)
+ while i < 100:
+ driver.jit_merge_point(i=i, val=val)
+ driver.can_enter_jit(i=i, val=val)
+ tgt = val._ptr
+ if i & 0b100:
+ i += 1
+ i += int(read_int_buffer(val._ptr))
+ lltype.free(val._ptr, flavor='raw')
+ val._ptr = new_int_buffer(1)
+ lltype.free(val._ptr, flavor='raw')
+
+ self.meta_interp(f, [])
+ self.check_resops(guard_nonnull=0)
+
More information about the pypy-commit
mailing list