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

Reply via email to