[pypy-commit] pypy gc_no_cleanup_nursery: Fix: vstring no longer removes strsetitem(.., 0). This was a rather

arigo noreply at buildbot.pypy.org
Thu Sep 25 20:20:11 CEST 2014


Author: Armin Rigo <arigo at tunes.org>
Branch: gc_no_cleanup_nursery
Changeset: r73711:deb4d03d1f18
Date: 2014-09-25 20:19 +0200
http://bitbucket.org/pypy/pypy/changeset/deb4d03d1f18/

Log:	Fix: vstring no longer removes strsetitem(.., 0). This was a rather
	pointless anyway.

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
@@ -4791,15 +4791,18 @@
         ops = """
         [p0]
         p1 = newstr(4)
+        strsetitem(p1, 2, 0)
         setfield_gc(p0, p1, descr=valuedescr)
         jump(p0)
         """
-        # It used to be the case that this would have a series of
-        # strsetitem(p1, idx, 0), which was silly because memory is 0 filled
-        # when allocated.
+        # This test is slightly bogus: the string is not fully initialized.
+        # I *think* it is still right to not have a series of extra
+        # strsetitem(p1, idx, 0).  We do preserve the single one from the
+        # source, though.
         expected = """
         [p0]
         p1 = newstr(4)
+        strsetitem(p1, 2, 0)
         setfield_gc(p0, p1, descr=valuedescr)
         jump(p0)
         """
@@ -5115,6 +5118,9 @@
         strsetitem(p1, 6, i0)
         strsetitem(p1, 7, i0)
         strsetitem(p1, 8, 3)
+        strsetitem(p1, 9, 0)
+        strsetitem(p1, 10, 0)
+        strsetitem(p1, 11, 0)
         finish(p1)
         """
         self.optimize_strunicode_loop(ops, expected)
diff --git a/rpython/jit/metainterp/optimizeopt/vstring.py b/rpython/jit/metainterp/optimizeopt/vstring.py
--- a/rpython/jit/metainterp/optimizeopt/vstring.py
+++ b/rpython/jit/metainterp/optimizeopt/vstring.py
@@ -189,13 +189,11 @@
             charvalue = self.getitem(i)
             if charvalue is not None:
                 charbox = charvalue.force_box(string_optimizer)
-                if not (isinstance(charbox, Const) and
-                        charbox.same_constant(CONST_0)):
-                    op = ResOperation(mode.STRSETITEM, [targetbox,
-                                                        offsetbox,
-                                                        charbox],
-                                      None)
-                    string_optimizer.emit_operation(op)
+                op = ResOperation(mode.STRSETITEM, [targetbox,
+                                                    offsetbox,
+                                                    charbox],
+                                  None)
+                string_optimizer.emit_operation(op)
             offsetbox = _int_add(string_optimizer, offsetbox, CONST_1)
         return offsetbox
 


More information about the pypy-commit mailing list