[pypy-commit] pypy conditional_call_value: write a test, does not help
fijal
noreply at buildbot.pypy.org
Mon May 4 21:13:02 CEST 2015
Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: conditional_call_value
Changeset: r77053:d45f095f367d
Date: 2015-05-04 21:01 +0200
http://bitbucket.org/pypy/pypy/changeset/d45f095f367d/
Log: write a test, does not help
diff --git a/rpython/jit/backend/test/runner_test.py b/rpython/jit/backend/test/runner_test.py
--- a/rpython/jit/backend/test/runner_test.py
+++ b/rpython/jit/backend/test/runner_test.py
@@ -2145,6 +2145,45 @@
excvalue = self.cpu.grab_exc_value(deadframe)
assert not excvalue
+ def test_cond_call_value(self):
+ def func_void(*args):
+ called.append(args)
+ return len(args)
+
+ for i in range(5):
+ called = []
+
+ FUNC = self.FuncType([lltype.Signed] * i, lltype.Signed)
+ func_ptr = llhelper(lltype.Ptr(FUNC), func_void)
+ calldescr = self.cpu.calldescrof(FUNC, FUNC.ARGS, FUNC.RESULT,
+ EffectInfo.MOST_GENERAL)
+
+ ops = '''
+ [i0, i1, i2, i3, i4, i5, i6, f0, f1]
+ i15 = cond_call_value(i1, i2, ConstClass(func_ptr), %s)
+ guard_false(i0, descr=faildescr) [i1, i2, i3, i4, i5, i6, f0, f1]
+ finish(i15)
+ ''' % ', '.join(['i%d' % (j + 2) for j in range(i)] + ["descr=calldescr"])
+ loop = parse(ops, namespace={'faildescr': BasicFailDescr(),
+ 'func_ptr': func_ptr,
+ 'calldescr': calldescr})
+ looptoken = JitCellToken()
+ self.cpu.compile_loop(loop.inputargs, loop.operations, looptoken)
+ f1 = longlong.getfloatstorage(1.2)
+ f2 = longlong.getfloatstorage(3.4)
+ frame = self.cpu.execute_token(looptoken, 1, 0, 1, 2, 3, 4, 5, f1, f2)
+ assert not called
+ for j in range(5):
+ assert self.cpu.get_int_value(frame, j) == j
+ assert longlong.getrealfloat(self.cpu.get_float_value(frame, 6)) == 1.2
+ assert longlong.getrealfloat(self.cpu.get_float_value(frame, 7)) == 3.4
+ frame = self.cpu.execute_token(looptoken, 1, 1, 1, 2, 3, 4, 5, f1, f2)
+ assert called == [tuple(range(1, i + 1))]
+ for j in range(4):
+ assert self.cpu.get_int_value(frame, j + 1) == j + 1
+ assert longlong.getrealfloat(self.cpu.get_float_value(frame, 6)) == 1.2
+ assert longlong.getrealfloat(self.cpu.get_float_value(frame, 7)) == 3.4
+
def test_cond_call_gc_wb(self):
def func_void(a):
record.append(rffi.cast(lltype.Signed, a))
More information about the pypy-commit
mailing list