Author: Brian Kearns <[email protected]>
Branch:
Changeset: r70003:b81700f91370
Date: 2014-03-17 02:05 -0400
http://bitbucket.org/pypy/pypy/changeset/b81700f91370/
Log: fix virtual raw malloc for all constant args
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
@@ -1725,7 +1725,7 @@
# We cannot track virtuals that survive for more than two iterations.
self.optimize_loop(ops, expected, preamble)
- def test_virtual_raw_malloc(self):
+ def test_virtual_raw_malloc_basic(self):
ops = """
[i1]
i2 = call('malloc', 10, descr=raw_malloc_descr)
@@ -1741,6 +1741,23 @@
"""
self.optimize_loop(ops, expected)
+ def test_virtual_raw_malloc_const(self):
+ ops = """
+ [i1]
+ i5 = int_mul(10, 1)
+ i2 = call('malloc', i5, descr=raw_malloc_descr)
+ guard_no_exception() []
+ setarrayitem_raw(i2, 0, i1, descr=rawarraydescr)
+ i3 = getarrayitem_raw(i2, 0, descr=rawarraydescr)
+ call('free', i2, descr=raw_free_descr)
+ jump(i3)
+ """
+ expected = """
+ [i1]
+ jump(i1)
+ """
+ self.optimize_loop(ops, expected)
+
def test_virtual_raw_malloc_force(self):
ops = """
[i1]
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
@@ -699,12 +699,11 @@
self.emit_operation(op)
def do_RAW_MALLOC_VARSIZE_CHAR(self, op):
- sizebox = op.getarg(1)
- if not isinstance(sizebox, ConstInt):
+ sizebox = self.get_constant_box(op.getarg(1))
+ if sizebox is None:
self.emit_operation(op)
return
- size = sizebox.value
- self.make_virtual_raw_memory(size, op.result, op)
+ self.make_virtual_raw_memory(sizebox.getint(), op.result, op)
self.last_emitted_operation = REMOVED
def do_RAW_FREE(self, op):
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit