[pypy-commit] pypy virtual-raw-mallocs: make it possible to get a virtual raw slice of a virtual raw slice
antocuni
noreply at buildbot.pypy.org
Wed Dec 19 10:57:32 CET 2012
Author: Antonio Cuni <anto.cuni at gmail.com>
Branch: virtual-raw-mallocs
Changeset: r59506:d06cd276f22b
Date: 2012-12-19 10:57 +0100
http://bitbucket.org/pypy/pypy/changeset/d06cd276f22b/
Log: make it possible to get a virtual raw slice of a virtual raw slice
diff --git a/pypy/jit/metainterp/optimizeopt/test/test_optimizeopt.py b/pypy/jit/metainterp/optimizeopt/test/test_optimizeopt.py
--- a/pypy/jit/metainterp/optimizeopt/test/test_optimizeopt.py
+++ b/pypy/jit/metainterp/optimizeopt/test/test_optimizeopt.py
@@ -1845,6 +1845,23 @@
"""
self.optimize_loop(ops, expected)
+ def test_virtual_raw_slice_of_a_raw_slice(self):
+ ops = """
+ [i0, i1]
+ i2 = call('malloc', 10, descr=raw_malloc_descr)
+ i3 = int_add(i2, 1) # get a slice of the original buffer
+ i4 = int_add(i3, 1) # get a slice of a slice
+ setarrayitem_raw(i4, 0, i1, descr=rawarraydescr_char) # write to the slice
+ i5 = getarrayitem_raw(i2, 2, descr=rawarraydescr_char)
+ call('free', i2, descr=raw_free_descr)
+ jump(i0, i5)
+ """
+ expected = """
+ [i0, i1]
+ jump(i0, i1)
+ """
+ self.optimize_loop(ops, expected)
+
def test_virtual_raw_slice_force(self):
ops = """
[i0, i1]
diff --git a/pypy/jit/metainterp/optimizeopt/virtualize.py b/pypy/jit/metainterp/optimizeopt/virtualize.py
--- a/pypy/jit/metainterp/optimizeopt/virtualize.py
+++ b/pypy/jit/metainterp/optimizeopt/virtualize.py
@@ -600,6 +600,10 @@
if isinstance(value, VirtualRawBufferValue):
self.make_virtual_raw_slice(value, offset, op.result, op)
return
+ elif isinstance(value, VirtualRawSliceValue):
+ offset = offset + value.offset
+ self.make_virtual_raw_slice(value.rawbuffer_value, offset, op.result, op)
+ return
self.emit_operation(op)
def optimize_ARRAYLEN_GC(self, op):
More information about the pypy-commit
mailing list