[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