[pypy-svn] r78552 - pypy/branch/jit-unroll-loops/pypy/jit/metainterp/test
arigo at codespeak.net
arigo at codespeak.net
Sat Oct 30 18:45:14 CEST 2010
Author: arigo
Date: Sat Oct 30 18:45:05 2010
New Revision: 78552
Modified:
pypy/branch/jit-unroll-loops/pypy/jit/metainterp/test/test_optimizebasic.py
pypy/branch/jit-unroll-loops/pypy/jit/metainterp/test/test_optimizeutil.py
Log:
Manually merge the changes done to test_optimizefindnode
and test_optimizeopt in trunk.
Modified: pypy/branch/jit-unroll-loops/pypy/jit/metainterp/test/test_optimizebasic.py
==============================================================================
--- pypy/branch/jit-unroll-loops/pypy/jit/metainterp/test/test_optimizebasic.py (original)
+++ pypy/branch/jit-unroll-loops/pypy/jit/metainterp/test/test_optimizebasic.py Sat Oct 30 18:45:05 2010
@@ -806,10 +806,10 @@
guard_value(i2, 1) []
i3 = call_loopinvariant(1, i1, descr=nonwritedescr)
guard_no_exception() []
- guard_value(i2, 1) []
+ guard_value(i3, 1) []
i4 = call_loopinvariant(1, i1, descr=nonwritedescr)
guard_no_exception() []
- guard_value(i2, 1) []
+ guard_value(i4, 1) []
jump(i1)
"""
expected = """
@@ -3516,7 +3516,7 @@
i0 = strlen(p0)
jump(p0)
"""
- self.optimize_loop(ops, expected)
+ self.optimize_strunicode_loop(ops, expected)
def test_addsub_const(self):
ops = """
@@ -3922,6 +3922,14 @@
"""
self.optimize_loop(ops, expected)
+ # ----------
+ def optimize_strunicode_loop(self, ops, optops):
+ # check with the arguments passed in
+ self.optimize_loop(ops, optops)
+ # check with replacing 'str' with 'unicode' everywhere
+ self.optimize_loop(ops.replace('str','unicode').replace('s"', 'u"'),
+ optops.replace('str','unicode').replace('s"', 'u"'))
+
def test_newstr_1(self):
ops = """
[i0]
@@ -3934,7 +3942,7 @@
[i0]
jump(i0)
"""
- self.optimize_loop(ops, expected)
+ self.optimize_strunicode_loop(ops, expected)
def test_newstr_2(self):
ops = """
@@ -3950,7 +3958,7 @@
[i0, i1]
jump(i1, i0)
"""
- self.optimize_loop(ops, expected)
+ self.optimize_strunicode_loop(ops, expected)
def test_str_concat_1(self):
ops = """
@@ -3971,7 +3979,7 @@
copystrcontent(p2, p3, 0, i4, i5)
jump(p2, p3)
"""
- self.optimize_loop(ops, expected)
+ self.optimize_strunicode_loop(ops, expected)
def test_str_concat_vstr2_str(self):
ops = """
@@ -3994,7 +4002,7 @@
copystrcontent(p2, p3, 0, 2, i4)
jump(i1, i0, p3)
"""
- self.optimize_loop(ops, expected)
+ self.optimize_strunicode_loop(ops, expected)
def test_str_concat_str_vstr2(self):
ops = """
@@ -4018,7 +4026,7 @@
i6 = int_add(i5, 1) # will be killed by the backend
jump(i1, i0, p3)
"""
- self.optimize_loop(ops, expected)
+ self.optimize_strunicode_loop(ops, expected)
def test_str_concat_str_str_str(self):
ops = """
@@ -4045,12 +4053,12 @@
copystrcontent(p3, p5, 0, i12b, i3b)
jump(p2, p3, p5)
"""
- self.optimize_loop(ops, expected)
+ self.optimize_strunicode_loop(ops, expected)
def test_str_concat_str_cstr1(self):
ops = """
[p2]
- p3 = call(0, p2, "x", descr=strconcatdescr)
+ p3 = call(0, p2, s"x", descr=strconcatdescr)
jump(p3)
"""
expected = """
@@ -4064,28 +4072,28 @@
i5 = int_add(i4, 1) # will be killed by the backend
jump(p3)
"""
- self.optimize_loop(ops, expected)
+ self.optimize_strunicode_loop(ops, expected)
def test_str_concat_consts(self):
ops = """
[]
- p1 = same_as("ab")
- p2 = same_as("cde")
+ p1 = same_as(s"ab")
+ p2 = same_as(s"cde")
p3 = call(0, p1, p2, descr=strconcatdescr)
escape(p3)
jump()
"""
expected = """
[]
- escape("abcde")
+ escape(s"abcde")
jump()
"""
- self.optimize_loop(ops, expected)
+ self.optimize_strunicode_loop(ops, expected)
def test_str_slice_1(self):
ops = """
[p1, i1, i2]
- p2 = call(0, p1, i1, i2, descr=slicedescr)
+ p2 = call(0, p1, i1, i2, descr=strslicedescr)
jump(p2, i1, i2)
"""
expected = """
@@ -4095,12 +4103,12 @@
copystrcontent(p1, p2, i1, 0, i3)
jump(p2, i1, i2)
"""
- self.optimize_loop(ops, expected)
+ self.optimize_strunicode_loop(ops, expected)
def test_str_slice_2(self):
ops = """
[p1, i2]
- p2 = call(0, p1, 0, i2, descr=slicedescr)
+ p2 = call(0, p1, 0, i2, descr=strslicedescr)
jump(p2, i2)
"""
expected = """
@@ -4109,13 +4117,13 @@
copystrcontent(p1, p2, 0, 0, i2)
jump(p2, i2)
"""
- self.optimize_loop(ops, expected)
+ self.optimize_strunicode_loop(ops, expected)
def test_str_slice_3(self):
ops = """
[p1, i1, i2, i3, i4]
- p2 = call(0, p1, i1, i2, descr=slicedescr)
- p3 = call(0, p2, i3, i4, descr=slicedescr)
+ p2 = call(0, p1, i1, i2, descr=strslicedescr)
+ p3 = call(0, p2, i3, i4, descr=strslicedescr)
jump(p3, i1, i2, i3, i4)
"""
expected = """
@@ -4127,12 +4135,12 @@
copystrcontent(p1, p3, i6, 0, i5)
jump(p3, i1, i2, i3, i4)
"""
- self.optimize_loop(ops, expected)
+ self.optimize_strunicode_loop(ops, expected)
def test_str_slice_getitem1(self):
ops = """
[p1, i1, i2, i3]
- p2 = call(0, p1, i1, i2, descr=slicedescr)
+ p2 = call(0, p1, i1, i2, descr=strslicedescr)
i4 = strgetitem(p2, i3)
escape(i4)
jump(p1, i1, i2, i3)
@@ -4145,7 +4153,7 @@
escape(i4)
jump(p1, i1, i2, i3)
"""
- self.optimize_loop(ops, expected)
+ self.optimize_strunicode_loop(ops, expected)
def test_str_slice_plain(self):
ops = """
@@ -4153,7 +4161,7 @@
p1 = newstr(2)
strsetitem(p1, 0, i3)
strsetitem(p1, 1, i4)
- p2 = call(0, p1, 1, 2, descr=slicedescr)
+ p2 = call(0, p1, 1, 2, descr=strslicedescr)
i5 = strgetitem(p2, 0)
escape(i5)
jump(i3, i4)
@@ -4163,12 +4171,12 @@
escape(i4)
jump(i3, i4)
"""
- self.optimize_loop(ops, expected)
+ self.optimize_strunicode_loop(ops, expected)
def test_str_slice_concat(self):
ops = """
[p1, i1, i2, p2]
- p3 = call(0, p1, i1, i2, descr=slicedescr)
+ p3 = call(0, p1, i1, i2, descr=strslicedescr)
p4 = call(0, p3, p2, descr=strconcatdescr)
jump(p4, i1, i2, p2)
"""
@@ -4184,10 +4192,10 @@
copystrcontent(p2, p4, 0, i3, i4b)
jump(p4, i1, i2, p2)
"""
- self.optimize_loop(ops, expected)
+ self.optimize_strunicode_loop(ops, expected)
# ----------
- def optimize_loop_extradescrs(self, ops, optops):
+ def optimize_strunicode_loop_extradescrs(self, ops, optops):
from pypy.jit.metainterp.optimizeopt import string
def my_callinfo_for_oopspec(oopspecindex):
calldescrtype = type(LLtypeMixin.strequaldescr)
@@ -4202,7 +4210,7 @@
saved = string.callinfo_for_oopspec
try:
string.callinfo_for_oopspec = my_callinfo_for_oopspec
- self.optimize_loop(ops, optops)
+ self.optimize_strunicode_loop(ops, optops)
finally:
string.callinfo_for_oopspec = saved
@@ -4213,7 +4221,7 @@
escape(i0)
jump(p1, p2)
"""
- self.optimize_loop_extradescrs(ops, ops)
+ self.optimize_strunicode_loop_extradescrs(ops, ops)
def test_str_equal_noop2(self):
ops = """
@@ -4238,12 +4246,12 @@
escape(i0)
jump(p1, p2, p3)
"""
- self.optimize_loop_extradescrs(ops, expected)
+ self.optimize_strunicode_loop_extradescrs(ops, expected)
def test_str_equal_slice1(self):
ops = """
[p1, i1, i2, p3]
- p4 = call(0, p1, i1, i2, descr=slicedescr)
+ p4 = call(0, p1, i1, i2, descr=strslicedescr)
i0 = call(0, p4, p3, descr=strequaldescr)
escape(i0)
jump(p1, i1, i2, p3)
@@ -4255,12 +4263,12 @@
escape(i0)
jump(p1, i1, i2, p3)
"""
- self.optimize_loop_extradescrs(ops, expected)
+ self.optimize_strunicode_loop_extradescrs(ops, expected)
def test_str_equal_slice2(self):
ops = """
[p1, i1, i2, p3]
- p4 = call(0, p1, i1, i2, descr=slicedescr)
+ p4 = call(0, p1, i1, i2, descr=strslicedescr)
i0 = call(0, p3, p4, descr=strequaldescr)
escape(i0)
jump(p1, i1, i2, p3)
@@ -4272,13 +4280,13 @@
escape(i0)
jump(p1, i1, i2, p3)
"""
- self.optimize_loop_extradescrs(ops, expected)
+ self.optimize_strunicode_loop_extradescrs(ops, expected)
def test_str_equal_slice3(self):
ops = """
[p1, i1, i2, p3]
guard_nonnull(p3) []
- p4 = call(0, p1, i1, i2, descr=slicedescr)
+ p4 = call(0, p1, i1, i2, descr=strslicedescr)
i0 = call(0, p3, p4, descr=strequaldescr)
escape(i0)
jump(p1, i1, i2, p3)
@@ -4291,13 +4299,13 @@
escape(i0)
jump(p1, i1, i2, p3)
"""
- self.optimize_loop_extradescrs(ops, expected)
+ self.optimize_strunicode_loop_extradescrs(ops, expected)
def test_str_equal_slice4(self):
ops = """
[p1, i1, i2]
- p3 = call(0, p1, i1, i2, descr=slicedescr)
- i0 = call(0, p3, "x", descr=strequaldescr)
+ p3 = call(0, p1, i1, i2, descr=strslicedescr)
+ i0 = call(0, p3, s"x", descr=strequaldescr)
escape(i0)
jump(p1, i1, i2)
"""
@@ -4308,12 +4316,12 @@
escape(i0)
jump(p1, i1, i2)
"""
- self.optimize_loop_extradescrs(ops, expected)
+ self.optimize_strunicode_loop_extradescrs(ops, expected)
def test_str_equal_slice5(self):
ops = """
[p1, i1, i2, i3]
- p4 = call(0, p1, i1, i2, descr=slicedescr)
+ p4 = call(0, p1, i1, i2, descr=strslicedescr)
p5 = newstr(1)
strsetitem(p5, 0, i3)
i0 = call(0, p5, p4, descr=strequaldescr)
@@ -4327,7 +4335,7 @@
escape(i0)
jump(p1, i1, i2, i3)
"""
- self.optimize_loop_extradescrs(ops, expected)
+ self.optimize_strunicode_loop_extradescrs(ops, expected)
def test_str_equal_none1(self):
ops = """
@@ -4342,7 +4350,7 @@
escape(i0)
jump(p1)
"""
- self.optimize_loop_extradescrs(ops, expected)
+ self.optimize_strunicode_loop_extradescrs(ops, expected)
def test_str_equal_none2(self):
ops = """
@@ -4357,30 +4365,30 @@
escape(i0)
jump(p1)
"""
- self.optimize_loop_extradescrs(ops, expected)
+ self.optimize_strunicode_loop_extradescrs(ops, expected)
def test_str_equal_nonnull1(self):
ops = """
[p1]
guard_nonnull(p1) []
- i0 = call(0, p1, "hello world", descr=strequaldescr)
+ i0 = call(0, p1, s"hello world", descr=strequaldescr)
escape(i0)
jump(p1)
"""
expected = """
[p1]
guard_nonnull(p1) []
- i0 = call(0, p1, "hello world", descr=streq_nonnull_descr)
+ i0 = call(0, p1, s"hello world", descr=streq_nonnull_descr)
escape(i0)
jump(p1)
"""
- self.optimize_loop_extradescrs(ops, expected)
+ self.optimize_strunicode_loop_extradescrs(ops, expected)
def test_str_equal_nonnull2(self):
ops = """
[p1]
guard_nonnull(p1) []
- i0 = call(0, p1, "", descr=strequaldescr)
+ i0 = call(0, p1, s"", descr=strequaldescr)
escape(i0)
jump(p1)
"""
@@ -4392,13 +4400,13 @@
escape(i0)
jump(p1)
"""
- self.optimize_loop_extradescrs(ops, expected)
+ self.optimize_strunicode_loop_extradescrs(ops, expected)
def test_str_equal_nonnull3(self):
ops = """
[p1]
guard_nonnull(p1) []
- i0 = call(0, p1, "x", descr=strequaldescr)
+ i0 = call(0, p1, s"x", descr=strequaldescr)
escape(i0)
jump(p1)
"""
@@ -4409,13 +4417,13 @@
escape(i0)
jump(p1)
"""
- self.optimize_loop_extradescrs(ops, expected)
+ self.optimize_strunicode_loop_extradescrs(ops, expected)
def test_str_equal_nonnull4(self):
ops = """
[p1, p2]
p4 = call(0, p1, p2, descr=strconcatdescr)
- i0 = call(0, "hello world", p4, descr=strequaldescr)
+ i0 = call(0, s"hello world", p4, descr=strequaldescr)
escape(i0)
jump(p1, p2)
"""
@@ -4430,17 +4438,17 @@
i5 = strlen(p2)
i6 = int_add(i4, i5) # will be killed by the backend
copystrcontent(p2, p4, 0, i4, i5)
- i0 = call(0, "hello world", p4, descr=streq_nonnull_descr)
+ i0 = call(0, s"hello world", p4, descr=streq_nonnull_descr)
escape(i0)
jump(p1, p2)
"""
- self.optimize_loop_extradescrs(ops, expected)
+ self.optimize_strunicode_loop_extradescrs(ops, expected)
def test_str_equal_chars0(self):
ops = """
[i1]
p1 = newstr(0)
- i0 = call(0, p1, "", descr=strequaldescr)
+ i0 = call(0, p1, s"", descr=strequaldescr)
escape(i0)
jump(i1)
"""
@@ -4449,14 +4457,14 @@
escape(1)
jump(i1)
"""
- self.optimize_loop_extradescrs(ops, expected)
+ self.optimize_strunicode_loop_extradescrs(ops, expected)
def test_str_equal_chars1(self):
ops = """
[i1]
p1 = newstr(1)
strsetitem(p1, 0, i1)
- i0 = call(0, p1, "x", descr=strequaldescr)
+ i0 = call(0, p1, s"x", descr=strequaldescr)
escape(i0)
jump(i1)
"""
@@ -4466,7 +4474,7 @@
escape(i0)
jump(i1)
"""
- self.optimize_loop_extradescrs(ops, expected)
+ self.optimize_strunicode_loop_extradescrs(ops, expected)
def test_str_equal_chars2(self):
ops = """
@@ -4474,7 +4482,7 @@
p1 = newstr(2)
strsetitem(p1, 0, i1)
strsetitem(p1, 1, i2)
- i0 = call(0, p1, "xy", descr=strequaldescr)
+ i0 = call(0, p1, s"xy", descr=strequaldescr)
escape(i0)
jump(i1, i2)
"""
@@ -4483,16 +4491,16 @@
p1 = newstr(2)
strsetitem(p1, 0, i1)
strsetitem(p1, 1, i2)
- i0 = call(0, p1, "xy", descr=streq_lengthok_descr)
+ i0 = call(0, p1, s"xy", descr=streq_lengthok_descr)
escape(i0)
jump(i1, i2)
"""
- self.optimize_loop_extradescrs(ops, expected)
+ self.optimize_strunicode_loop_extradescrs(ops, expected)
def test_str_equal_chars3(self):
ops = """
[p1]
- i0 = call(0, "x", p1, descr=strequaldescr)
+ i0 = call(0, s"x", p1, descr=strequaldescr)
escape(i0)
jump(p1)
"""
@@ -4502,14 +4510,14 @@
escape(i0)
jump(p1)
"""
- self.optimize_loop_extradescrs(ops, expected)
+ self.optimize_strunicode_loop_extradescrs(ops, expected)
def test_str_equal_lengthmismatch1(self):
ops = """
[i1]
p1 = newstr(1)
strsetitem(p1, 0, i1)
- i0 = call(0, "xy", p1, descr=strequaldescr)
+ i0 = call(0, s"xy", p1, descr=strequaldescr)
escape(i0)
jump(i1)
"""
@@ -4518,10 +4526,33 @@
escape(0)
jump(i1)
"""
- self.optimize_loop_extradescrs(ops, expected)
+ self.optimize_strunicode_loop_extradescrs(ops, expected)
- # XXX unicode operations
- # XXX str2unicode
+ def test_str2unicode_constant(self):
+ ops = """
+ []
+ p0 = call(0, "xy", descr=s2u_descr) # string -> unicode
+ escape(p0)
+ jump()
+ """
+ expected = """
+ []
+ escape(u"xy")
+ jump()
+ """
+ self.optimize_strunicode_loop_extradescrs(ops, expected)
+
+ def test_str2unicode_nonconstant(self):
+ ops = """
+ [p0]
+ p1 = call(0, p0, descr=s2u_descr) # string -> unicode
+ escape(p1)
+ jump(p1)
+ """
+ self.optimize_strunicode_loop_extradescrs(ops, ops)
+ # more generally, supporting non-constant but virtual cases is
+ # not obvious, because of the exception UnicodeDecodeError that
+ # can be raised by ll_str2unicode()
##class TestOOtype(BaseTestOptimizeBasic, OOtypeMixin):
Modified: pypy/branch/jit-unroll-loops/pypy/jit/metainterp/test/test_optimizeutil.py
==============================================================================
--- pypy/branch/jit-unroll-loops/pypy/jit/metainterp/test/test_optimizeutil.py (original)
+++ pypy/branch/jit-unroll-loops/pypy/jit/metainterp/test/test_optimizeutil.py Sat Oct 30 18:45:05 2010
@@ -110,33 +110,32 @@
EffectInfo.EF_FORCES_VIRTUAL_OR_VIRTUALIZABLE))
arraycopydescr = cpu.calldescrof(FUNC, FUNC.ARGS, FUNC.RESULT,
EffectInfo([], [], [], oopspecindex=EffectInfo.OS_ARRAYCOPY))
- strconcatdescr = cpu.calldescrof(FUNC, FUNC.ARGS, FUNC.RESULT,
- EffectInfo([], [], [], oopspecindex=EffectInfo.OS_STR_CONCAT))
- slicedescr = cpu.calldescrof(FUNC, FUNC.ARGS, FUNC.RESULT,
- EffectInfo([], [], [], oopspecindex=EffectInfo.OS_STR_SLICE))
- strequaldescr = cpu.calldescrof(FUNC, FUNC.ARGS, FUNC.RESULT,
- EffectInfo([], [], [], oopspecindex=EffectInfo.OS_STR_EQUAL))
- streq_slice_checknull_descr = cpu.calldescrof(FUNC, FUNC.ARGS, FUNC.RESULT,
- EffectInfo([], [], [],
- oopspecindex=EffectInfo.OS_STREQ_SLICE_CHECKNULL))
- streq_slice_nonnull_descr = cpu.calldescrof(FUNC, FUNC.ARGS, FUNC.RESULT,
- EffectInfo([], [], [],
- oopspecindex=EffectInfo.OS_STREQ_SLICE_NONNULL))
- streq_slice_char_descr = cpu.calldescrof(FUNC, FUNC.ARGS, FUNC.RESULT,
- EffectInfo([], [], [],
- oopspecindex=EffectInfo.OS_STREQ_SLICE_CHAR))
- streq_nonnull_descr = cpu.calldescrof(FUNC, FUNC.ARGS, FUNC.RESULT,
- EffectInfo([], [], [],
- oopspecindex=EffectInfo.OS_STREQ_NONNULL))
- streq_nonnull_char_descr = cpu.calldescrof(FUNC, FUNC.ARGS, FUNC.RESULT,
- EffectInfo([], [], [],
- oopspecindex=EffectInfo.OS_STREQ_NONNULL_CHAR))
- streq_checknull_char_descr = cpu.calldescrof(FUNC, FUNC.ARGS, FUNC.RESULT,
- EffectInfo([], [], [],
- oopspecindex=EffectInfo.OS_STREQ_CHECKNULL_CHAR))
- streq_lengthok_descr = cpu.calldescrof(FUNC, FUNC.ARGS, FUNC.RESULT,
- EffectInfo([], [], [],
- oopspecindex=EffectInfo.OS_STREQ_LENGTHOK))
+
+ for _name, _os in [
+ ('strconcatdescr', 'OS_STR_CONCAT'),
+ ('strslicedescr', 'OS_STR_SLICE'),
+ ('strequaldescr', 'OS_STR_EQUAL'),
+ ('streq_slice_checknull_descr', 'OS_STREQ_SLICE_CHECKNULL'),
+ ('streq_slice_nonnull_descr', 'OS_STREQ_SLICE_NONNULL'),
+ ('streq_slice_char_descr', 'OS_STREQ_SLICE_CHAR'),
+ ('streq_nonnull_descr', 'OS_STREQ_NONNULL'),
+ ('streq_nonnull_char_descr', 'OS_STREQ_NONNULL_CHAR'),
+ ('streq_checknull_char_descr', 'OS_STREQ_CHECKNULL_CHAR'),
+ ('streq_lengthok_descr', 'OS_STREQ_LENGTHOK'),
+ ]:
+ _oopspecindex = getattr(EffectInfo, _os)
+ locals()[_name] = \
+ cpu.calldescrof(FUNC, FUNC.ARGS, FUNC.RESULT,
+ EffectInfo([], [], [], oopspecindex=_oopspecindex))
+ #
+ _oopspecindex = getattr(EffectInfo, _os.replace('STR', 'UNI'))
+ locals()[_name.replace('str', 'unicode')] = \
+ cpu.calldescrof(FUNC, FUNC.ARGS, FUNC.RESULT,
+ EffectInfo([], [], [], oopspecindex=_oopspecindex))
+
+ s2u_descr = cpu.calldescrof(FUNC, FUNC.ARGS, FUNC.RESULT,
+ EffectInfo([], [], [], oopspecindex=EffectInfo.OS_STR2UNICODE))
+ #
class LoopToken(AbstractDescr):
pass
More information about the Pypy-commit
mailing list