[pypy-svn] r78595 - in pypy/branch/jit-unroll-loops/pypy/jit/metainterp: optimizeopt test
hakanardo at codespeak.net
hakanardo at codespeak.net
Sun Oct 31 13:25:56 CET 2010
Author: hakanardo
Date: Sun Oct 31 13:25:51 2010
New Revision: 78595
Modified:
pypy/branch/jit-unroll-loops/pypy/jit/metainterp/optimizeopt/__init__.py
pypy/branch/jit-unroll-loops/pypy/jit/metainterp/optimizeopt/string.py
pypy/branch/jit-unroll-loops/pypy/jit/metainterp/test/test_optimizeopt.py
Log:
(hakanardo, arigo) workaround that dissables string optimisation of the preamble
Modified: pypy/branch/jit-unroll-loops/pypy/jit/metainterp/optimizeopt/__init__.py
==============================================================================
--- pypy/branch/jit-unroll-loops/pypy/jit/metainterp/optimizeopt/__init__.py (original)
+++ pypy/branch/jit-unroll-loops/pypy/jit/metainterp/optimizeopt/__init__.py Sun Oct 31 13:25:51 2010
@@ -10,15 +10,18 @@
def optimize_loop_1(metainterp_sd, loop, unroll=True):
"""Optimize loop.operations to remove internal overheadish operations.
"""
+ opt_str = OptString()
optimizations = [OptIntBounds(),
OptRewrite(),
OptVirtualize(),
- OptString(),
+ opt_str,
OptHeap(),
OptFfiCall(),
]
if unroll:
optimizations.insert(0, OptUnroll())
+ opt_str.enabled = False # FIXME: Workaround to disable string optimisation
+ # during preamble but to keep it during the loop
optimizer = Optimizer(metainterp_sd, loop, optimizations)
optimizer.propagate_all_forward()
Modified: pypy/branch/jit-unroll-loops/pypy/jit/metainterp/optimizeopt/string.py
==============================================================================
--- pypy/branch/jit-unroll-loops/pypy/jit/metainterp/optimizeopt/string.py (original)
+++ pypy/branch/jit-unroll-loops/pypy/jit/metainterp/optimizeopt/string.py Sun Oct 31 13:25:51 2010
@@ -162,7 +162,7 @@
for value in self._chars:
value.get_args_for_fail(modifier)
- def enum_forced_boxes(self, boxes, already_seen):
+ def FIXME_enum_forced_boxes(self, boxes, already_seen):
key = self.get_key_box()
if key in already_seen:
return
@@ -225,7 +225,7 @@
self.left.get_args_for_fail(modifier)
self.right.get_args_for_fail(modifier)
- def enum_forced_boxes(self, boxes, already_seen):
+ def FIXME_enum_forced_boxes(self, boxes, already_seen):
key = self.get_key_box()
if key in already_seen:
return
@@ -283,7 +283,7 @@
self.vstart.get_args_for_fail(modifier)
self.vlength.get_args_for_fail(modifier)
- def enum_forced_boxes(self, boxes, already_seen):
+ def FIXME_enum_forced_boxes(self, boxes, already_seen):
key = self.get_key_box()
if key in already_seen:
return
@@ -365,7 +365,8 @@
class OptString(optimizer.Optimization):
"Handling of strings and unicodes."
-
+ enabled = True
+
def make_vstring_plain(self, box, source_op, mode):
vvalue = VStringPlainValue(self.optimizer, box, source_op, mode)
self.make_equal_to(box, vvalue)
@@ -643,6 +644,10 @@
self.optimizer.newoperations.append(op)
def propagate_forward(self, op):
+ if not self.enabled:
+ self.emit_operation(op)
+ return
+
opnum = op.getopnum()
for value, func in optimize_ops:
if opnum == value:
@@ -651,6 +656,9 @@
else:
self.emit_operation(op)
+ def force_at_end_of_preamble(self):
+ self.enabled = True
+
optimize_ops = _findall(OptString, 'optimize_')
def _findall_call_oopspec():
Modified: pypy/branch/jit-unroll-loops/pypy/jit/metainterp/test/test_optimizeopt.py
==============================================================================
--- pypy/branch/jit-unroll-loops/pypy/jit/metainterp/test/test_optimizeopt.py (original)
+++ pypy/branch/jit-unroll-loops/pypy/jit/metainterp/test/test_optimizeopt.py Sun Oct 31 13:25:51 2010
@@ -3946,12 +3946,14 @@
self.optimize_loop(ops, expected, preamble)
# ----------
- def optimize_strunicode_loop(self, ops, optops, preamble):
+ def optimize_strunicode_loop(self, ops, optops, preamble=None):
+ if not preamble:
+ preamble = ops # FIXME: Force proper testing of preamble
# check with the arguments passed in
self.optimize_loop(ops, optops, preamble)
# check with replacing 'str' with 'unicode' everywhere
def r(s):
- return r.replace('str','unicode').replace('s"', 'u"')
+ return s.replace('str','unicode').replace('s"', 'u"')
self.optimize_loop(r(ops), r(optops), r(preamble))
def test_newstr_1(self):
@@ -3991,7 +3993,7 @@
jump(p2, p3)
"""
expected = """
- [p2, p1]
+ [p1, p2]
i1 = strlen(p1)
i2 = strlen(p2)
i3 = int_add(i1, i2)
@@ -4001,7 +4003,7 @@
i5 = strlen(p2)
i6 = int_add(i4, i5) # will be killed by the backend
copystrcontent(p2, p3, 0, i4, i5)
- jump(p3, p2)
+ jump(p2, p3)
"""
self.optimize_strunicode_loop(ops, expected)
@@ -4107,12 +4109,18 @@
escape(p3)
jump()
"""
+ preamble = """
+ []
+ p3 = call(0, s"ab", s"cde", descr=strconcatdescr)
+ escape(p3)
+ jump()
+ """
expected = """
[]
escape(s"abcde")
jump()
"""
- self.optimize_strunicode_loop(ops, expected)
+ self.optimize_strunicode_loop(ops, expected, preamble)
def test_str_slice_1(self):
ops = """
@@ -4219,7 +4227,7 @@
self.optimize_strunicode_loop(ops, expected)
# ----------
- def optimize_strunicode_loop_extradescrs(self, ops, optops):
+ def optimize_strunicode_loop_extradescrs(self, ops, optops, preamble=None):
from pypy.jit.metainterp.optimizeopt import string
def my_callinfo_for_oopspec(oopspecindex):
calldescrtype = type(LLtypeMixin.strequaldescr)
@@ -4234,7 +4242,7 @@
saved = string.callinfo_for_oopspec
try:
string.callinfo_for_oopspec = my_callinfo_for_oopspec
- self.optimize_strunicode_loop(ops, optops)
+ self.optimize_strunicode_loop(ops, optops, preamble)
finally:
string.callinfo_for_oopspec = saved
@@ -4320,14 +4328,13 @@
"""
expected = """
[p1, i1, i2, p3]
- guard_nonnull(p3) []
i4 = int_sub(i2, i1)
i0 = call(0, p1, i1, i4, p3, descr=streq_slice_nonnull_descr)
escape(i0)
jump(p1, i1, i2, p3)
"""
self.optimize_strunicode_loop_extradescrs(ops,
- expected)
+ expected, ops)
def test_str_equal_slice4(self):
ops = """
@@ -4407,7 +4414,6 @@
"""
expected = """
[p1]
- guard_nonnull(p1) []
i0 = call(0, p1, s"hello world", descr=streq_nonnull_descr)
escape(i0)
jump(p1)
@@ -4424,7 +4430,6 @@
"""
expected = """
[p1]
- guard_nonnull(p1) []
i1 = strlen(p1)
i0 = int_eq(i1, 0)
escape(i0)
@@ -4442,7 +4447,6 @@
"""
expected = """
[p1]
- guard_nonnull(p1) []
i0 = call(0, p1, 120, descr=streq_nonnull_char_descr)
escape(i0)
jump(p1)
More information about the Pypy-commit
mailing list