[pypy-svn] r70907 - in pypy/trunk/pypy/jit/metainterp: . test
cfbolz at codespeak.net
cfbolz at codespeak.net
Wed Jan 27 11:43:53 CET 2010
Author: cfbolz
Date: Wed Jan 27 11:43:52 2010
New Revision: 70907
Modified:
pypy/trunk/pypy/jit/metainterp/optimizeopt.py
pypy/trunk/pypy/jit/metainterp/test/test_optimizeopt.py
Log:
Also remove duplicate pure ops that have a descr, e.g. arraylen_gc.
Modified: pypy/trunk/pypy/jit/metainterp/optimizeopt.py
==============================================================================
--- pypy/trunk/pypy/jit/metainterp/optimizeopt.py (original)
+++ pypy/trunk/pypy/jit/metainterp/optimizeopt.py Wed Jan 27 11:43:52 2010
@@ -573,21 +573,20 @@
self.make_constant(op.result, resbox.constbox())
return
- if op.descr is None:
- # did we do the exact same operation already?
- args = op.args[:]
- for i in range(len(args)):
- arg = args[i]
- if arg in self.values:
- args[i] = self.values[arg].get_key_box()
- args.append(ConstInt(op.opnum))
- oldop = self.pure_operations.get(args, None)
- if oldop is not None:
- assert oldop.opnum == op.opnum
- self.make_equal_to(op.result, self.getvalue(oldop.result))
- return
- else:
- self.pure_operations[args] = op
+ # did we do the exact same operation already?
+ args = op.args[:]
+ for i in range(len(args)):
+ arg = args[i]
+ if arg in self.values:
+ args[i] = self.values[arg].get_key_box()
+ args.append(ConstInt(op.opnum))
+ oldop = self.pure_operations.get(args, None)
+ if oldop is not None and oldop.descr is op.descr:
+ assert oldop.opnum == op.opnum
+ self.make_equal_to(op.result, self.getvalue(oldop.result))
+ return
+ else:
+ self.pure_operations[args] = op
# otherwise, the operation remains
self.emit_operation(op)
Modified: pypy/trunk/pypy/jit/metainterp/test/test_optimizeopt.py
==============================================================================
--- pypy/trunk/pypy/jit/metainterp/test/test_optimizeopt.py (original)
+++ pypy/trunk/pypy/jit/metainterp/test/test_optimizeopt.py Wed Jan 27 11:43:52 2010
@@ -1891,6 +1891,26 @@
"""
self.optimize_loop(ops, "Not, Not", expected)
+ def test_remove_duplicate_pure_op_with_descr(self):
+ ops = """
+ [p1]
+ i0 = arraylen_gc(p1, descr=arraydescr)
+ i1 = int_gt(i0, 0)
+ guard_true(i1) []
+ i2 = arraylen_gc(p1, descr=arraydescr)
+ i3 = int_gt(i0, 0)
+ guard_true(i3) []
+ jump(p1)
+ """
+ expected = """
+ [p1]
+ i0 = arraylen_gc(p1, descr=arraydescr)
+ i1 = int_gt(i0, 0)
+ guard_true(i1) []
+ jump(p1)
+ """
+ self.optimize_loop(ops, 'Not', expected)
+
# ----------
def make_fail_descr(self):
More information about the Pypy-commit
mailing list