[pypy-commit] pypy conditional_call_value_4: test and fix

arigo pypy.commits at gmail.com
Thu Nov 24 04:57:08 EST 2016


Author: Armin Rigo <arigo at tunes.org>
Branch: conditional_call_value_4
Changeset: r88611:6b96de7cd8ab
Date: 2016-11-24 10:56 +0100
http://bitbucket.org/pypy/pypy/changeset/6b96de7cd8ab/

Log:	test and fix

diff --git a/rpython/jit/metainterp/blackhole.py b/rpython/jit/metainterp/blackhole.py
--- a/rpython/jit/metainterp/blackhole.py
+++ b/rpython/jit/metainterp/blackhole.py
@@ -1206,14 +1206,14 @@
         if condition:
             cpu.bh_call_v(func, args_i, args_r, None, calldescr)
 
-    @arguments("cpu", "i", "i", "I", "R", "d")
+    @arguments("cpu", "i", "i", "I", "R", "d", returns="i")
     def bhimpl_conditional_call_value_ir_i(cpu, value, func, args_i, args_r,
                                            calldescr):
         if value == 0:
             value = cpu.bh_call_i(func, args_i, args_r, None, calldescr)
         return value
 
-    @arguments("cpu", "r", "i", "I", "R", "d")
+    @arguments("cpu", "r", "i", "I", "R", "d", returns="r")
     def bhimpl_conditional_call_value_ir_r(cpu, value, func, args_i, args_r,
                                            calldescr):
         if not value:
diff --git a/rpython/jit/metainterp/test/test_call.py b/rpython/jit/metainterp/test/test_call.py
--- a/rpython/jit/metainterp/test/test_call.py
+++ b/rpython/jit/metainterp/test/test_call.py
@@ -249,13 +249,33 @@
                 p = jit.conditional_call_elidable(p, externfn, m)
                 n -= p
             return n
-        assert f(219, 5, 0) == -1
-        res = self.meta_interp(f, [219, 5, 0])
+        assert f(21, 5, 0) == -1
+        res = self.meta_interp(f, [21, 5, 0])
         assert res == -1
         self.check_resops(call_pure_i=0,
                           cond_call_value_i=2,   # ideally 1, but see above
                           int_sub=2)
 
+    def test_cond_call_in_blackhole(self):
+        myjitdriver = jit.JitDriver(greens = [], reds = ['n', 'p', 'm'])
+        def externfn(x):
+            return 2
+        def f(n, m, p):
+            while n > 0:
+                myjitdriver.can_enter_jit(n=n, p=p, m=m)
+                myjitdriver.jit_merge_point(n=n, p=p, m=m)
+                if n > 6:    # will fail and finish in the blackhole
+                    pass
+                if jit.we_are_jitted():   # manually inline here
+                    p = jit._jit_conditional_call_value(p, externfn, m)
+                else:
+                    p = jit.conditional_call_elidable(p, externfn, m)
+                n -= p
+            return n
+        assert f(21, 5, 0) == -1
+        res = self.meta_interp(f, [21, 5, 0])
+        assert res == -1
+
 
 class TestCall(LLJitMixin, CallTest):
     pass


More information about the pypy-commit mailing list