[pypy-commit] pypy default: when escaping an array, remember its length

cfbolz noreply at buildbot.pypy.org
Tue May 12 18:35:09 CEST 2015


Author: Carl Friedrich Bolz <cfbolz at gmx.de>
Branch: 
Changeset: r77300:64c5ab2ff81e
Date: 2015-05-12 18:32 +0200
http://bitbucket.org/pypy/pypy/changeset/64c5ab2ff81e/

Log:	when escaping an array, remember its length

diff --git a/rpython/jit/metainterp/optimizeopt/test/test_optimizebasic.py b/rpython/jit/metainterp/optimizeopt/test/test_optimizebasic.py
--- a/rpython/jit/metainterp/optimizeopt/test/test_optimizebasic.py
+++ b/rpython/jit/metainterp/optimizeopt/test/test_optimizebasic.py
@@ -1240,12 +1240,12 @@
         escape(i2)
         jump()
         """
+        # also check that the length of the forced array is known
         expected = """
         []
         p1 = new_array(3, descr=arraydescr)
         escape(p1)
-        i2 = arraylen_gc(p1)
-        escape(i2)
+        escape(3)
         jump()
         """
         self.optimize_loop(ops, expected)
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
@@ -1688,8 +1688,7 @@
         []
         p1 = new_array(3, descr=arraydescr)
         escape(p1)
-        i2 = arraylen_gc(p1)
-        escape(i2)
+        escape(3)
         jump()
         """
         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
@@ -347,6 +347,7 @@
                               [box, ConstInt(index), subbox], None,
                                descr=self.arraydescr)
             optforce.emit_operation(op)
+        optforce.pure(rop.ARRAYLEN_GC, [box], ConstInt(len(self._items)))
 
     @specialize.argtype(1)
     def _visitor_dispatch_virtual_type(self, visitor):


More information about the pypy-commit mailing list