[pypy-commit] pypy guard-compatible: check that even if there are two guard_compatibles, the conditions end up on

cfbolz pypy.commits at gmail.com
Sun Mar 13 13:39:51 EDT 2016


Author: Carl Friedrich Bolz <cfbolz at gmx.de>
Branch: guard-compatible
Changeset: r83015:f0e5ad960ab7
Date: 2016-03-13 18:16 +0100
http://bitbucket.org/pypy/pypy/changeset/f0e5ad960ab7/

Log:	check that even if there are two guard_compatibles, the conditions
	end up on only one

diff --git a/rpython/jit/metainterp/optimizeopt/test/test_compatible.py b/rpython/jit/metainterp/optimizeopt/test/test_compatible.py
--- a/rpython/jit/metainterp/optimizeopt/test/test_compatible.py
+++ b/rpython/jit/metainterp/optimizeopt/test/test_compatible.py
@@ -49,7 +49,7 @@
             (ConstInt(123), ConstPtr(self.myptr)): ConstInt(5),
             (ConstInt(124), ConstPtr(self.myptr)): ConstInt(7),
         }
-        ops = """
+        ops1 = """
         [p1]
         guard_compatible(p1, ConstPtr(myptr)) []
         i3 = call_pure_i(123, p1, descr=plaincalldescr)
@@ -58,6 +58,16 @@
         escape_n(i5)
         jump(ConstPtr(myptr))
         """
+        ops2 = """
+        [p1]
+        guard_compatible(p1, ConstPtr(myptr)) []
+        i3 = call_pure_i(123, p1, descr=plaincalldescr)
+        escape_n(i3)
+        guard_compatible(p1, ConstPtr(myptr)) []
+        i5 = call_pure_i(124, p1, descr=plaincalldescr)
+        escape_n(i5)
+        jump(ConstPtr(myptr))
+        """
         expected = """
         [p1]
         guard_compatible(p1, ConstPtr(myptr)) []
@@ -65,9 +75,10 @@
         escape_n(7)
         jump(ConstPtr(myptr))
         """
-        self.optimize_loop(ops, expected, call_pure_results=call_pure_results)
-        # whitebox-test the guard_compatible descr a bit
-        descr = self.loop.operations[1].getdescr()
-        assert descr._compatibility_conditions is not None
-        assert descr._compatibility_conditions.known_valid.same_constant(ConstPtr(self.myptr))
-        assert len(descr._compatibility_conditions.pure_call_conditions) == 2
+        for ops in [ops1, ops2]:
+            self.optimize_loop(ops, expected, call_pure_results=call_pure_results)
+            # whitebox-test the guard_compatible descr a bit
+            descr = self.loop.operations[1].getdescr()
+            assert descr._compatibility_conditions is not None
+            assert descr._compatibility_conditions.known_valid.same_constant(ConstPtr(self.myptr))
+            assert len(descr._compatibility_conditions.pure_call_conditions) == 2


More information about the pypy-commit mailing list