[pypy-commit] pypy optresult-unroll: test and fix

fijal noreply at buildbot.pypy.org
Mon Sep 7 11:10:48 CEST 2015


Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: optresult-unroll
Changeset: r79496:f0f6f371d27b
Date: 2015-09-07 11:10 +0200
http://bitbucket.org/pypy/pypy/changeset/f0f6f371d27b/

Log:	test and fix

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
@@ -4237,7 +4237,7 @@
     def test_str_concat_2(self):
         ops = """
         [p1, p2]
-        p3 = call_r(0, "fo", p1, descr=strconcatdescr)
+        p3 = call_r(0, s"fo", p1, descr=strconcatdescr)
         escape_n(p3)
         i5 = strgetitem(p3, 0)
         escape_n(i5)
@@ -4246,12 +4246,14 @@
         expected = """
         [p1, p2]
         i1 = strlen(p1)
-        i2 = strlen(p2)
-        i3 = int_add(i1, i2)
-        p3 = newstr(i3)
-        copystrcontent(p1, p3, 0, 0, i1)
-        copystrcontent(p2, p3, 0, i1, i2)
-        jump(p2, p3)
+        i0 = int_add(2, i1)
+        p5 = newstr(i0)
+        strsetitem(p5, 0, 102)
+        strsetitem(p5, 1, 111)
+        copystrcontent(p1, p5, 0, 2, i1)
+        escape_n(p5)
+        escape_n(102)
+        jump(p2, p5)
         """
         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
@@ -393,10 +393,13 @@
     if isinstance(strbox, ConstPtr) and isinstance(indexbox, ConstInt):
         if mode is mode_string:
             s = strbox.getref(lltype.Ptr(rstr.STR))
-            return ConstInt(ord(s.chars[indexbox.getint()]))
+            resnewbox = ConstInt(ord(s.chars[indexbox.getint()]))
         else:
             s = strbox.getref(lltype.Ptr(rstr.UNICODE))
-            return ConstInt(ord(s.chars[indexbox.getint()]))
+            resnewbox = ConstInt(ord(s.chars[indexbox.getint()]))
+        if resbox is not None:
+            string_optimizer.make_equal_to(resbox, resnewbox)
+        return resnewbox
     if resbox is None:
         resbox = ResOperation(mode.STRGETITEM, [strbox, indexbox])
     else:


More information about the pypy-commit mailing list