[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