Author: Brian Kearns <[email protected]>
Branch:
Changeset: r70013:5da6957bd86b
Date: 2014-03-17 09:20 -0400
http://bitbucket.org/pypy/pypy/changeset/5da6957bd86b/
Log: virtual raw buffers force using raw_store rather than int_add +
setarrayitem_raw
diff --git a/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py
b/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py
--- a/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py
+++ b/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py
@@ -1785,11 +1785,12 @@
def test_virtual_raw_malloc_force(self):
ops = """
[i1]
- i2 = call('malloc', 10, descr=raw_malloc_descr)
+ i2 = call('malloc', 20, descr=raw_malloc_descr)
guard_no_exception() []
setarrayitem_raw(i2, 0, i1, descr=rawarraydescr_char)
setarrayitem_raw(i2, 2, 456, descr=rawarraydescr_char)
setarrayitem_raw(i2, 1, 123, descr=rawarraydescr_char)
+ setarrayitem_raw(i2, 1, 789, descr=rawarraydescr_float)
label('foo') # we expect the buffer to be forced *after* the label
escape(i2)
call('free', i2, descr=raw_free_descr)
@@ -1798,13 +1799,12 @@
expected = """
[i1]
label('foo')
- i2 = call('malloc', 10, descr=raw_malloc_descr)
+ i2 = call('malloc', 20, descr=raw_malloc_descr)
guard_no_exception() []
- setarrayitem_raw(i2, 0, i1, descr=rawarraydescr_char)
- i3 = int_add(i2, 1)
- setarrayitem_raw(i3, 0, 123, descr=rawarraydescr_char)
- i4 = int_add(i2, 2)
- setarrayitem_raw(i4, 0, 456, descr=rawarraydescr_char)
+ raw_store(i2, 0, i1, descr=rawarraydescr_char)
+ raw_store(i2, 1, 123, descr=rawarraydescr_char)
+ raw_store(i2, 2, 456, descr=rawarraydescr_char)
+ raw_store(i2, 8, 789, descr=rawarraydescr_float)
escape(i2)
call('free', i2, descr=raw_free_descr)
jump(i1)
@@ -1827,7 +1827,7 @@
label('foo')
i2 = call('malloc', 10, descr=raw_malloc_descr)
guard_no_exception() []
- setarrayitem_raw(i2, 0, i1, descr=rawarraydescr)
+ raw_store(i2, 0, i1, descr=rawarraydescr)
setarrayitem_raw(i2, 2, 456, descr=rawarraydescr_char)
call('free', i2, descr=raw_free_descr)
jump(i1)
@@ -1850,7 +1850,7 @@
label('foo')
i2 = call('malloc', 10, descr=raw_malloc_descr)
guard_no_exception() []
- setarrayitem_raw(i2, 0, i1, descr=rawarraydescr)
+ raw_store(i2, 0, i1, descr=rawarraydescr)
i3 = getarrayitem_raw(i2, 0, descr=rawarraydescr_char)
call('free', i2, descr=raw_free_descr)
jump(i1)
@@ -1913,9 +1913,8 @@
# these ops are generated by VirtualRawBufferValue._really_force
i2 = call('malloc', 10, descr=raw_malloc_descr)
guard_no_exception() []
- setarrayitem_raw(i2, 0, 42, descr=rawarraydescr_char)
- i3 = int_add(i2, 5) # 1+4*sizeof(char)
- setarrayitem_raw(i3, 0, 4242, descr=rawarraydescr_char)
+ raw_store(i2, 0, 42, descr=rawarraydescr_char)
+ raw_store(i2, 5, 4242, descr=rawarraydescr_char)
# this is generated by VirtualRawSliceValue._really_force
i4 = int_add(i2, 1)
escape(i4)
@@ -1943,7 +1942,7 @@
label('foo')
i3 = call('malloc', 10, descr=raw_malloc_descr)
guard_no_exception() []
- setarrayitem_raw(i3, 0, i2, descr=rawarraydescr)
+ raw_store(i3, 0, i2, descr=rawarraydescr)
jump(i3)
"""
self.optimize_loop(ops, expected)
diff --git a/rpython/jit/metainterp/optimizeopt/virtualize.py
b/rpython/jit/metainterp/optimizeopt/virtualize.py
--- a/rpython/jit/metainterp/optimizeopt/virtualize.py
+++ b/rpython/jit/metainterp/optimizeopt/virtualize.py
@@ -432,22 +432,13 @@
optforce.emit_operation(self.source_op)
self.box = self.source_op.result
for i in range(len(self.buffer.offsets)):
- # get a pointer to self.box+offset
+ # write the value
offset = self.buffer.offsets[i]
- if offset == 0:
- arraybox = self.box
- else:
- arraybox = BoxInt()
- op = ResOperation(rop.INT_ADD,
- [self.box, ConstInt(offset)], arraybox)
- optforce.emit_operation(op)
- #
- # write the value
descr = self.buffer.descrs[i]
itemvalue = self.buffer.values[i]
itembox = itemvalue.force_box(optforce)
- op = ResOperation(rop.SETARRAYITEM_RAW,
- [arraybox, ConstInt(0), itembox], None,
+ op = ResOperation(rop.RAW_STORE,
+ [self.box, ConstInt(offset), itembox], None,
descr=descr)
optforce.emit_operation(op)
diff --git a/rpython/jit/metainterp/test/test_virtual.py
b/rpython/jit/metainterp/test/test_virtual.py
--- a/rpython/jit/metainterp/test/test_virtual.py
+++ b/rpython/jit/metainterp/test/test_virtual.py
@@ -1196,7 +1196,7 @@
assert res == 45
# make sure that the raw buffer is *not* virtualized because we do not
# support virtualstate
- self.check_resops(getarrayitem_raw=2, setarrayitem_raw=2)
+ self.check_resops(getarrayitem_raw=2, raw_store=2)
def test_raw_malloc_only_chars(self):
mydriver = JitDriver(greens=[], reds = 'auto')
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit