[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