[pypy-svn] r79816 - in pypy/branch/jit-unroll-loops/pypy/jit/metainterp: optimizeopt test
hakanardo at codespeak.net
hakanardo at codespeak.net
Sat Dec 4 16:41:37 CET 2010
Author: hakanardo
Date: Sat Dec 4 16:41:34 2010
New Revision: 79816
Modified:
pypy/branch/jit-unroll-loops/pypy/jit/metainterp/optimizeopt/rewrite.py
pypy/branch/jit-unroll-loops/pypy/jit/metainterp/test/test_optimizeopt.py
Log:
We now need to optimize GUARD_NONNULL_CLASS since they might be inserted while inlining
Modified: pypy/branch/jit-unroll-loops/pypy/jit/metainterp/optimizeopt/rewrite.py
==============================================================================
--- pypy/branch/jit-unroll-loops/pypy/jit/metainterp/optimizeopt/rewrite.py (original)
+++ pypy/branch/jit-unroll-loops/pypy/jit/metainterp/optimizeopt/rewrite.py Sat Dec 4 16:41:34 2010
@@ -255,6 +255,10 @@
last_guard_index = value.last_guard_index
value.make_constant_class(expectedclassbox, last_guard_index)
+ def optimize_GUARD_NONNULL_CLASS(self, op, dryrun=False):
+ self.optimize_GUARD_NONNULL(op, True)
+ self.optimize_GUARD_CLASS(op, dryrun)
+
def optimize_GUARD_NO_EXCEPTION(self, op, dryrun=False):
if dryrun: return
if not self.optimizer.exception_might_have_happened:
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 Sat Dec 4 16:41:34 2010
@@ -493,6 +493,42 @@
"""
self.optimize_loop(ops, expected, preamble)
+ def test_guard_nonnull_class_1(self):
+ ops = """
+ [p0]
+ guard_class(p0, ConstClass(node_vtable)) []
+ guard_nonnull(p0) []
+ guard_nonnull_class(p0, ConstClass(node_vtable)) []
+ jump(p0)
+ """
+ preamble = """
+ [p0]
+ guard_class(p0, ConstClass(node_vtable)) []
+ jump(p0)
+ """
+ expected = """
+ [p0]
+ jump(p0)
+ """
+ self.optimize_loop(ops, expected, preamble)
+
+ def test_guard_nonnull_class_2(self):
+ ops = """
+ [p0]
+ guard_nonnull_class(p0, ConstClass(node_vtable)) []
+ jump(p0)
+ """
+ preamble = """
+ [p0]
+ guard_nonnull_class(p0, ConstClass(node_vtable)) []
+ jump(p0)
+ """
+ expected = """
+ [p0]
+ jump(p0)
+ """
+ self.optimize_loop(ops, expected, preamble)
+
def test_int_is_true_1(self):
ops = """
[i0]
More information about the Pypy-commit
mailing list