[pypy-commit] pypy optresult: finish porting test_runner (yay!)
fijal
noreply at buildbot.pypy.org
Wed Nov 26 10:11:30 CET 2014
Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: optresult
Changeset: r74723:94595cb2a9e7
Date: 2014-11-26 11:11 +0200
http://bitbucket.org/pypy/pypy/changeset/94595cb2a9e7/
Log: finish porting test_runner (yay!)
diff --git a/rpython/jit/backend/llgraph/runner.py b/rpython/jit/backend/llgraph/runner.py
--- a/rpython/jit/backend/llgraph/runner.py
+++ b/rpython/jit/backend/llgraph/runner.py
@@ -949,7 +949,7 @@
execute_call_may_force_f = _execute_call_may_force
execute_call_may_force_i = _execute_call_may_force
- def execute_call_release_gil(self, descr, func, *args):
+ def _execute_call_release_gil(self, descr, func, *args):
if hasattr(descr, '_original_func_'):
func = descr._original_func_ # see pyjitpl.py
# we want to call the function that does the aroundstate
@@ -974,7 +974,12 @@
del self.force_guard_op
return support.cast_result(descr.RESULT, result)
- def execute_call_assembler(self, descr, *args):
+ execute_call_release_gil_n = _execute_call_release_gil
+ execute_call_release_gil_i = _execute_call_release_gil
+ execute_call_release_gil_r = _execute_call_release_gil
+ execute_call_release_gil_f = _execute_call_release_gil
+
+ def _execute_call_assembler(self, descr, *args):
# XXX simplify the following a bit
#
# pframe = CALL_ASSEMBLER(args..., descr=looptoken)
@@ -1027,6 +1032,11 @@
result = support.cast_to_floatstorage(result)
return result
+ execute_call_assembler_i = _execute_call_assembler
+ execute_call_assembler_r = _execute_call_assembler
+ execute_call_assembler_f = _execute_call_assembler
+ execute_call_assembler_n = _execute_call_assembler
+
def execute_same_as_i(self, _, x):
return x
execute_same_as_f = execute_same_as_i
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
@@ -2423,22 +2423,18 @@
assert c_tolower.call(argchain, rffi.INT) == ord('a')
cpu = self.cpu
- func_adr = llmemory.cast_ptr_to_adr(c_tolower.funcsym)
- funcbox = ConstInt(heaptracker.adr2int(func_adr))
+ func_adr = c_tolower.funcsym
calldescr = cpu._calldescr_dynamic_for_tests([types.uchar], types.sint)
- i1 = InputArgInt()
- i2 = InputArgInt()
- tok = InputArgInt()
faildescr = BasicFailDescr(1)
- ops = [
- ResOperation(rop.CALL_RELEASE_GIL, [funcbox, i1], i2,
- descr=calldescr),
- ResOperation(rop.GUARD_NOT_FORCED, [], None, descr=faildescr),
- ResOperation(rop.FINISH, [i2], None, descr=BasicFinalDescr(0))
- ]
- ops[1].setfailargs([i1, i2])
+ finaldescr = BasicFinalDescr(0)
+ loop = parse("""
+ [i1]
+ i2 = call_release_gil_i(ConstClass(func_adr), i1, descr=calldescr)
+ guard_not_forced(descr=faildescr) [i1, i2]
+ finish(i2, descr=finaldescr)
+ """, namespace=locals())
looptoken = JitCellToken()
- self.cpu.compile_loop([i1], ops, looptoken)
+ self.cpu.compile_loop(loop.inputargs, loop.operations, looptoken)
deadframe = self.cpu.execute_token(looptoken, ord('G'))
fail = self.cpu.get_latest_descr(deadframe)
assert fail.identifier == 0
@@ -2477,26 +2473,20 @@
del glob.lst[:]
cpu = self.cpu
- func_adr = llmemory.cast_ptr_to_adr(c_qsort.funcsym)
- funcbox = ConstInt(heaptracker.adr2int(func_adr))
+ func_adr = c_qsort.funcsym
calldescr = cpu._calldescr_dynamic_for_tests(
[types.pointer, types_size_t, types_size_t, types.pointer],
types.void)
- i0 = InputArgInt()
- i1 = InputArgInt()
- i2 = InputArgInt()
- i3 = InputArgInt()
- tok = InputArgInt()
faildescr = BasicFailDescr(1)
- ops = [
- ResOperation(rop.CALL_RELEASE_GIL, [funcbox, i0, i1, i2, i3], None,
- descr=calldescr),
- ResOperation(rop.GUARD_NOT_FORCED, [], None, descr=faildescr),
- ResOperation(rop.FINISH, [], None, descr=BasicFinalDescr(0))
- ]
- ops[1].setfailargs([])
+ finaldescr = BasicFinalDescr(0)
+ loop = parse("""
+ [i0, i1, i2, i3]
+ call_release_gil_n(ConstClass(func_adr), i0, i1, i2, i3, descr=calldescr)
+ guard_not_forced(descr=faildescr) []
+ finish(descr=finaldescr)
+ """, namespace=locals())
looptoken = JitCellToken()
- self.cpu.compile_loop([i0, i1, i2, i3], ops, looptoken)
+ self.cpu.compile_loop(loop.inputargs, loop.operations, looptoken)
args = [rffi.cast(lltype.Signed, raw),
2,
4,
@@ -2609,18 +2599,16 @@
faildescr = BasicFailDescr(1)
kind = types.getkind(ffitype)
if kind in 'uis':
- b3 = InputArgInt()
+ opnum = rop.CALL_RELEASE_GIL_I
elif kind in 'fUI':
- b3 = BoxFloat()
+ opnum = rop.CALL_RELEASE_GIL_F
else:
assert 0, kind
#
- ops = [
- ResOperation(rop.CALL_RELEASE_GIL, [funcbox], b3,
- descr=calldescr),
- ResOperation(rop.GUARD_NOT_FORCED, [], None, descr=faildescr),
- ResOperation(rop.FINISH, [b3], None, descr=BasicFinalDescr(0))
- ]
+ op0 = ResOperation(opnum, [funcbox], descr=calldescr)
+ op1 = ResOperation(rop.GUARD_NOT_FORCED, [], descr=faildescr)
+ op2 = ResOperation(rop.FINISH, [op0], BasicFinalDescr(0))
+ ops = [op0, op1, op2]
ops[1].setfailargs([])
looptoken = JitCellToken()
self.cpu.compile_loop([], ops, looptoken)
@@ -2628,7 +2616,7 @@
deadframe = self.cpu.execute_token(looptoken)
fail = self.cpu.get_latest_descr(deadframe)
assert fail.identifier == 0
- if isinstance(b3, InputArgInt):
+ if kind in 'uis':
r = self.cpu.get_int_value(deadframe, 0)
if isinstance(result, r_singlefloat):
assert -sys.maxint-1 <= r <= 0xFFFFFFFF
@@ -2637,7 +2625,7 @@
else:
r = rffi.cast(TP, r)
assert r == result
- elif isinstance(b3, BoxFloat):
+ elif kind in 'fUI':
r = self.cpu.get_float_value(deadframe, 0)
if isinstance(result, float):
r = longlong.getrealfloat(r)
@@ -2838,16 +2826,15 @@
def test_guard_not_invalidated(self):
cpu = self.cpu
- i0 = InputArgInt()
- i1 = InputArgInt()
faildescr = BasicFailDescr(1)
- ops = [
- ResOperation(rop.GUARD_NOT_INVALIDATED, [], None, descr=faildescr),
- ResOperation(rop.FINISH, [i0], None, descr=BasicFinalDescr(0))
- ]
- ops[0].setfailargs([i1])
+ finaldescr = BasicFinalDescr(0)
+ loop = parse("""
+ [i0, i1]
+ guard_not_invalidated(descr=faildescr) [i1]
+ finish(i0, descr=finaldescr)
+ """, namespace=locals())
looptoken = JitCellToken()
- self.cpu.compile_loop([i0, i1], ops, looptoken)
+ self.cpu.compile_loop(loop.inputargs, loop.operations, looptoken)
deadframe = self.cpu.execute_token(looptoken, -42, 9)
fail = self.cpu.get_latest_descr(deadframe)
@@ -2867,14 +2854,15 @@
print '-'*79
# attach a bridge
- i2 = InputArgInt()
faildescr2 = BasicFailDescr(2)
- ops = [
- ResOperation(rop.GUARD_NOT_INVALIDATED, [],None, descr=faildescr2),
- ResOperation(rop.FINISH, [i2], None, descr=BasicFinalDescr(3))
- ]
- ops[0].setfailargs([])
- self.cpu.compile_bridge(faildescr, [i2], ops, looptoken)
+ finaldescr2 = BasicFinalDescr(3)
+ bridge = parse("""
+ [i2]
+ guard_not_invalidated(descr=faildescr2) []
+ finish(i2, descr=finaldescr2)
+ """, namespace=locals())
+ self.cpu.compile_bridge(faildescr, bridge.inputargs,
+ bridge.operations, looptoken)
deadframe = self.cpu.execute_token(looptoken, -42, 9)
fail = self.cpu.get_latest_descr(deadframe)
@@ -2897,23 +2885,23 @@
# the label. If it doesn't, then in this example after we invalidate
# the guard, jumping to the label will hit the invalidation code too
cpu = self.cpu
- i0 = InputArgInt()
faildescr = BasicFailDescr(1)
labeldescr = TargetToken()
- ops = [
- ResOperation(rop.GUARD_NOT_INVALIDATED, [], None, descr=faildescr),
- ResOperation(rop.LABEL, [i0], None, descr=labeldescr),
- ResOperation(rop.FINISH, [i0], None, descr=BasicFinalDescr(3)),
- ]
- ops[0].setfailargs([])
+ finaldescr = BasicFinalDescr(3)
+ loop = parse("""
+ [i0]
+ guard_not_invalidated(descr=faildescr) []
+ label(i0, descr=labeldescr)
+ finish(i0, descr=finaldescr)
+ """, namespace=locals())
looptoken = JitCellToken()
- self.cpu.compile_loop([i0], ops, looptoken)
+ self.cpu.compile_loop(loop.inputargs, loop.operations, looptoken)
# mark as failing
self.cpu.invalidate_loop(looptoken)
# attach a bridge
i2 = InputArgInt()
ops2 = [
- ResOperation(rop.JUMP, [ConstInt(333)], None, descr=labeldescr),
+ ResOperation(rop.JUMP, [ConstInt(333)], descr=labeldescr),
]
self.cpu.compile_bridge(faildescr, [], ops2, looptoken)
# run: must not be caught in an infinite loop
@@ -3135,7 +3123,7 @@
ops = '''
[i0, i1, i2, i3, i4, i5, i6, i7, i8, i9]
i10 = int_add(i0, 42)
- i11 = call_assembler(i10, i1, i2, i3, i4, i5, i6, i7, i8, i9, descr=looptoken)
+ i11 = call_assembler_i(i10, i1, i2, i3, i4, i5, i6, i7, i8, i9, descr=looptoken)
guard_not_forced()[]
finish(i11)
'''
@@ -3249,7 +3237,7 @@
assert longlong.getrealfloat(x) == 1.2 + 2.3
ops = '''
[f4, f5]
- f3 = call_assembler(f4, f5, descr=looptoken)
+ f3 = call_assembler_f(f4, f5, descr=looptoken)
guard_not_forced()[]
finish(f3)
'''
@@ -3282,9 +3270,9 @@
a[7] = -4242
addr = llmemory.cast_ptr_to_adr(a)
abox = InputArgInt(heaptracker.adr2int(addr))
- r1 = self.execute_operation(rop.GETARRAYITEM_RAW, [abox, InputArgInt(7)],
+ r1 = self.execute_operation(rop.GETARRAYITEM_RAW_I, [abox, InputArgInt(7)],
'int', descr=descr)
- assert r1.getint() == -4242
+ assert r1 == -4242
lltype.free(a, flavor='raw')
def test_raw_malloced_setarrayitem(self):
@@ -3341,7 +3329,7 @@
ops = '''
[f4, f5]
- f3 = call_assembler(f4, f5, descr=looptoken)
+ f3 = call_assembler_f(f4, f5, descr=looptoken)
guard_not_forced()[]
finish(f3)
'''
@@ -3416,10 +3404,11 @@
expected = rffi.cast(lltype.Signed, rffi.cast(RESTYPE, value))
s.x = rffi.cast(RESTYPE, value)
s_gcref = lltype.cast_opaque_ptr(llmemory.GCREF, s)
- res = self.execute_operation(rop.GETFIELD_GC, [BoxPtr(s_gcref)],
+ res = self.execute_operation(rop.GETFIELD_GC_I,
+ [InputArgRef(s_gcref)],
'int', descr=descrfld_x)
- assert res.value == expected, (
- "%r: got %r, expected %r" % (RESTYPE, res.value, expected))
+ assert res == expected, (
+ "%r: got %r, expected %r" % (RESTYPE, res, expected))
def test_short_result_of_getarrayitem_direct(self):
# Test that a getarrayitem that returns a CHAR, SHORT or INT, signed
@@ -3457,11 +3446,11 @@
expected = rffi.cast(lltype.Signed, rffi.cast(RESTYPE, value))
a[3] = rffi.cast(RESTYPE, value)
a_gcref = lltype.cast_opaque_ptr(llmemory.GCREF, a)
- res = self.execute_operation(rop.GETARRAYITEM_GC,
- [BoxPtr(a_gcref), InputArgInt(3)],
+ res = self.execute_operation(rop.GETARRAYITEM_GC_I,
+ [InputArgRef(a_gcref), InputArgInt(3)],
'int', descr=descrarray)
- assert res.value == expected, (
- "%r: got %r, expected %r" % (RESTYPE, res.value, expected))
+ assert res == expected, (
+ "%r: got %r, expected %r" % (RESTYPE, res, expected))
def test_short_result_of_getarrayitem_raw_direct(self):
# Test that a getarrayitem that returns a CHAR, SHORT or INT, signed
@@ -3500,11 +3489,11 @@
expected = rffi.cast(lltype.Signed, rffi.cast(RESTYPE, value))
a[3] = rffi.cast(RESTYPE, value)
a_rawint = heaptracker.adr2int(llmemory.cast_ptr_to_adr(a))
- res = self.execute_operation(rop.GETARRAYITEM_RAW,
+ res = self.execute_operation(rop.GETARRAYITEM_RAW_I,
[InputArgInt(a_rawint), InputArgInt(3)],
'int', descr=descrarray)
- assert res.value == expected, (
- "%r: got %r, expected %r" % (RESTYPE, res.value, expected))
+ assert res == expected, (
+ "%r: got %r, expected %r" % (RESTYPE, res, expected))
lltype.free(a, flavor='raw')
def test_short_result_of_call_direct(self):
@@ -3569,10 +3558,10 @@
calldescr = self.cpu.calldescrof(FUNC, FUNC.ARGS, FUNC.RESULT,
EffectInfo.MOST_GENERAL)
funcbox = self.get_funcbox(self.cpu, f)
- res = self.execute_operation(rop.CALL, [funcbox, InputArgInt(value)],
+ res = self.execute_operation(rop.CALL_I, [funcbox, InputArgInt(value)],
'int', descr=calldescr)
- assert res.value == expected, (
- "%r: got %r, expected %r" % (RESTYPE, res.value, expected))
+ assert res == expected, (
+ "%r: got %r, expected %r" % (RESTYPE, res, expected))
def test_supports_longlong(self):
if IS_64_BIT:
@@ -3689,9 +3678,9 @@
funcbox = self.get_funcbox(self.cpu, f)
ivalue = longlong.singlefloat2int(value)
iexpected = longlong.singlefloat2int(expected)
- res = self.execute_operation(rop.CALL, [funcbox, InputArgInt(ivalue)],
+ res = self.execute_operation(rop.CALL_I, [funcbox, InputArgInt(ivalue)],
'int', descr=calldescr)
- assert res.value == iexpected
+ assert res == iexpected
def test_free_loop_and_bridges(self):
from rpython.jit.backend.llsupport.llmodel import AbstractLLCPU
@@ -3747,47 +3736,44 @@
calldescr = self.cpu.calldescrof(FUNC, FUNC.ARGS, FUNC.RESULT, effectinfo)
testcases = [(4.0, 2.0), (6.25, 2.5)]
for arg, expected in testcases:
- res = self.execute_operation(rop.CALL,
+ res = self.execute_operation(rop.CALL_F,
[funcbox, boxfloat(arg)],
'float', descr=calldescr)
- assert res.getfloat() == expected
+ assert res == expected
def test_compile_loop_with_target(self):
- i0 = InputArgInt()
- i1 = InputArgInt()
- i2 = InputArgInt()
- i3 = InputArgInt()
looptoken = JitCellToken()
targettoken1 = TargetToken()
targettoken2 = TargetToken()
faildescr = BasicFailDescr(2)
- operations = [
- ResOperation(rop.LABEL, [i0], None, descr=targettoken1),
- ResOperation(rop.INT_ADD, [i0, ConstInt(1)], i1),
- ResOperation(rop.INT_LE, [i1, ConstInt(9)], i2),
- ResOperation(rop.GUARD_TRUE, [i2], None, descr=faildescr),
- ResOperation(rop.LABEL, [i1], None, descr=targettoken2),
- ResOperation(rop.INT_GE, [i1, ConstInt(0)], i3),
- ResOperation(rop.GUARD_TRUE, [i3], None, descr=BasicFailDescr(3)),
- ResOperation(rop.JUMP, [i1], None, descr=targettoken1),
- ]
- inputargs = [i0]
- operations[3].setfailargs([i1])
- operations[6].setfailargs([i1])
-
- self.cpu.compile_loop(inputargs, operations, looptoken)
+ faildescr3 = BasicFailDescr(3)
+ loop = parse("""
+ [i0]
+ label(i0, descr=targettoken1)
+ i1 = int_add(i0, 1)
+ i2 = int_le(i1, 9)
+ guard_true(i2, descr=faildescr) [i1]
+ label(i1, descr=targettoken2)
+ i3 = int_ge(i1, 0)
+ guard_true(i3, descr=faildescr3) [i1]
+ jump(i1, descr=targettoken1)
+ """, namespace=locals())
+
+ self.cpu.compile_loop(loop.inputargs, loop.operations, looptoken)
deadframe = self.cpu.execute_token(looptoken, 2)
fail = self.cpu.get_latest_descr(deadframe)
assert fail.identifier == 2
res = self.cpu.get_int_value(deadframe, 0)
assert res == 10
- inputargs2 = [i0]
- operations2 = [
- ResOperation(rop.INT_SUB, [i0, ConstInt(20)], i2),
- ResOperation(rop.JUMP, [i2], None, descr=targettoken2),
- ]
- self.cpu.compile_bridge(faildescr, inputargs2, operations2, looptoken)
+ bridge = parse("""
+ [i0]
+ i2 = int_sub(i0, 20)
+ jump(i2, descr=targettoken2)
+ """, namespace=locals())
+
+ self.cpu.compile_bridge(faildescr, bridge.inputargs,
+ bridge.operations, looptoken)
deadframe = self.cpu.execute_token(looptoken, 2)
fail = self.cpu.get_latest_descr(deadframe)
@@ -3870,19 +3856,17 @@
# It catches a case in which we underestimate the needed frame_depth across
# the cross-loop JUMP, because we estimate it based on the frame_depth stored
# in the original loop.
- i0 = InputArgInt()
- i1 = InputArgInt()
looptoken1 = JitCellToken()
targettoken1 = TargetToken()
faildescr1 = BasicFailDescr(2)
- inputargs = [i0]
- operations = [
- ResOperation(rop.INT_LE, [i0, ConstInt(1)], i1),
- ResOperation(rop.GUARD_TRUE, [i1], None, descr=faildescr1),
- ResOperation(rop.FINISH, [i0], None, descr=BasicFinalDescr(1234)),
- ]
- operations[1].setfailargs([i0])
- self.cpu.compile_loop(inputargs, operations, looptoken1)
+ finaldescr1 = BasicFinalDescr(1234)
+ loop = parse("""
+ [i0]
+ i1 = int_le(i0, 1)
+ guard_true(i1, descr=faildescr1) [i0]
+ finish(i0, descr=finaldescr1)
+ """, namespace=locals())
+ self.cpu.compile_loop(loop.inputargs, loop.operations, looptoken1)
def func(a, b, c, d, e, f, g, h, i):
assert a + 2 == b
@@ -3898,50 +3882,42 @@
cpu = self.cpu
calldescr = cpu.calldescrof(deref(FPTR), (lltype.Signed,)*9, lltype.Void,
EffectInfo.MOST_GENERAL)
- funcbox = self.get_funcbox(cpu, func_ptr)
-
- i0 = InputArgInt(); i1 = InputArgInt(); i2 = InputArgInt(); i3 = InputArgInt(); i4 = InputArgInt()
- i5 = InputArgInt(); i6 = InputArgInt(); i7 = InputArgInt(); i8 = InputArgInt(); i9 = InputArgInt()
- i10 = InputArgInt(); i11 = InputArgInt(); i12 = InputArgInt(); i13 = InputArgInt(); i14 = InputArgInt()
- i15 = InputArgInt(); i16 = InputArgInt(); i17 = InputArgInt(); i18 = InputArgInt(); i19 = InputArgInt()
- i20 = InputArgInt()
- inputargs = [i0]
- operations2 = [
- ResOperation(rop.LABEL, [i0], None, descr=targettoken1),
- ResOperation(rop.INT_ADD, [i0, ConstInt(1)], i1),
- ResOperation(rop.INT_ADD, [i1, ConstInt(1)], i2),
- ResOperation(rop.INT_ADD, [i2, ConstInt(1)], i3),
- ResOperation(rop.INT_ADD, [i3, ConstInt(1)], i4),
- ResOperation(rop.INT_ADD, [i4, ConstInt(1)], i5),
- ResOperation(rop.INT_ADD, [i5, ConstInt(1)], i6),
- ResOperation(rop.INT_ADD, [i6, ConstInt(1)], i7),
- ResOperation(rop.INT_ADD, [i7, ConstInt(1)], i8),
- ResOperation(rop.INT_ADD, [i8, ConstInt(1)], i9),
- ResOperation(rop.INT_ADD, [i9, ConstInt(1)], i10),
- ResOperation(rop.INT_ADD, [i10, ConstInt(1)], i11),
- ResOperation(rop.INT_ADD, [i11, ConstInt(1)], i12),
- ResOperation(rop.INT_ADD, [i12, ConstInt(1)], i13),
- ResOperation(rop.INT_ADD, [i13, ConstInt(1)], i14),
- ResOperation(rop.INT_ADD, [i14, ConstInt(1)], i15),
- ResOperation(rop.INT_ADD, [i15, ConstInt(1)], i16),
- ResOperation(rop.INT_ADD, [i16, ConstInt(1)], i17),
- ResOperation(rop.INT_ADD, [i17, ConstInt(1)], i18),
- ResOperation(rop.INT_ADD, [i18, ConstInt(1)], i19),
- ResOperation(rop.CALL, [funcbox, i2, i4, i6, i8, i10, i12, i14, i16, i18],
- None, descr=calldescr),
- ResOperation(rop.CALL, [funcbox, i2, i4, i6, i8, i10, i12, i14, i16, i18],
- None, descr=calldescr),
- ResOperation(rop.INT_LT, [i19, ConstInt(100)], i20),
- ResOperation(rop.GUARD_TRUE, [i20], None, descr=BasicFailDescr(42)),
- ResOperation(rop.JUMP, [i19], None, descr=targettoken1),
- ]
- operations2[-2].setfailargs([])
- self.cpu.compile_bridge(faildescr1, inputargs, operations2, looptoken1)
+ faildescr=BasicFailDescr(42)
+ loop = parse("""
+ [i0]
+ label(i0, descr=targettoken1)
+ i1 = int_add(i0, 1)
+ i2 = int_add(i1, 1)
+ i3 = int_add(i2, 1)
+ i4 = int_add(i3, 1)
+ i5 = int_add(i4, 1)
+ i6 = int_add(i5, 1)
+ i7 = int_add(i6, 1)
+ i8 = int_add(i7, 1)
+ i9 = int_add(i8, 1)
+ i10 = int_add(i9, 1)
+ i11 = int_add(i10, 1)
+ i12 = int_add(i11, 1)
+ i13 = int_add(i12, 1)
+ i14 = int_add(i13, 1)
+ i15 = int_add(i14, 1)
+ i16 = int_add(i15, 1)
+ i17 = int_add(i16, 1)
+ i18 = int_add(i17, 1)
+ i19 = int_add(i18, 1)
+ call_n(ConstClass(func_ptr), i2, i4, i6, i8, i10, i12, i14, i16, i18, descr=calldescr)
+ call_n(ConstClass(func_ptr), i2, i4, i6, i8, i10, i12, i14, i16, i18, descr=calldescr)
+ i20 = int_lt(i19, 100)
+ guard_true(i20, descr=faildescr) []
+ jump(i19, descr=targettoken1)
+ """, namespace=locals())
+ self.cpu.compile_bridge(faildescr1, loop.inputargs,
+ loop.operations, looptoken1)
looptoken2 = JitCellToken()
inputargs = [InputArgInt()]
operations3 = [
- ResOperation(rop.JUMP, [ConstInt(0)], None, descr=targettoken1),
+ ResOperation(rop.JUMP, [ConstInt(0)], descr=targettoken1),
]
self.cpu.compile_loop(inputargs, operations3, looptoken2)
@@ -3954,15 +3930,15 @@
null_box = self.null_instance()
faildescr = BasicFailDescr(42)
operations = [
- ResOperation(rop.GUARD_NONNULL_CLASS, [t_box, T_box], None,
+ ResOperation(rop.GUARD_NONNULL_CLASS, [t_box, T_box],
descr=faildescr),
- ResOperation(rop.FINISH, [], None, descr=BasicFinalDescr(1))]
+ ResOperation(rop.FINISH, [], descr=BasicFinalDescr(1))]
operations[0].setfailargs([])
looptoken = JitCellToken()
inputargs = [t_box]
self.cpu.compile_loop(inputargs, operations, looptoken)
operations = [
- ResOperation(rop.FINISH, [], None, descr=BasicFinalDescr(99))
+ ResOperation(rop.FINISH, [], descr=BasicFinalDescr(99))
]
self.cpu.compile_bridge(faildescr, [], operations, looptoken)
deadframe = self.cpu.execute_token(looptoken, null_box.getref_base())
@@ -3977,7 +3953,7 @@
rffi.ULONG, rffi.LONG]:
ops = """
[i0, i1]
- i2 = raw_load(i0, i1, descr=arraydescr)
+ i2 = raw_load_i(i0, i1, descr=arraydescr)
finish(i2)
"""
arraydescr = self.cpu.arraydescrof(rffi.CArray(T))
@@ -4006,7 +3982,7 @@
for T in [rffi.DOUBLE]:
ops = """
[i0, i1]
- f2 = raw_load(i0, i1, descr=arraydescr)
+ f2 = raw_load_f(i0, i1, descr=arraydescr)
finish(f2)
"""
arraydescr = self.cpu.arraydescrof(rffi.CArray(T))
@@ -4037,7 +4013,7 @@
for T in [rffi.FLOAT]:
ops = """
[i0, i1]
- i2 = raw_load(i0, i1, descr=arraydescr)
+ i2 = raw_load_i(i0, i1, descr=arraydescr)
finish(i2)
"""
arraydescr = self.cpu.arraydescrof(rffi.CArray(T))
@@ -4166,26 +4142,21 @@
values.append(self.cpu.get_int_value(deadframe, 0))
return 42
- FUNC = self.FuncType([llmemory.GCREF, lltype.Signed], lltype.Signed)
+ FUNC = self.FuncType([lltype.Signed, lltype.Signed], lltype.Signed)
func_ptr = llhelper(lltype.Ptr(FUNC), maybe_force)
- funcbox = self.get_funcbox(self.cpu, func_ptr).constbox()
calldescr = self.cpu.calldescrof(FUNC, FUNC.ARGS, FUNC.RESULT,
EffectInfo.MOST_GENERAL)
- i0 = InputArgInt()
- i1 = InputArgInt()
- i2 = InputArgInt()
- tok = BoxPtr()
+ finaldescr=BasicFinalDescr(0)
faildescr = BasicFailDescr(23)
- ops = [
- ResOperation(rop.FORCE_TOKEN, [], tok),
- ResOperation(rop.CALL_MAY_FORCE, [funcbox, tok, i1], i2,
- descr=calldescr),
- ResOperation(rop.GUARD_NOT_FORCED, [], None, descr=faildescr),
- ResOperation(rop.FINISH, [i2], None, descr=BasicFinalDescr(0))
- ]
- ops[2].setfailargs([i2])
+ loop = parse("""
+ [i0, i1]
+ i2 = force_token()
+ i3 = call_may_force_i(ConstClass(func_ptr), i2, i1, descr=calldescr)
+ guard_not_forced(descr=faildescr) [i3]
+ finish(i3, descr=finaldescr)
+ """, namespace=locals())
looptoken = JitCellToken()
- self.cpu.compile_loop([i0, i1], ops, looptoken)
+ self.cpu.compile_loop(loop.inputargs, loop.operations, looptoken)
deadframe = self.cpu.execute_token(looptoken, 20, 0)
fail = self.cpu.get_latest_descr(deadframe)
assert fail.identifier == 23
@@ -4194,7 +4165,7 @@
def test_compile_bridge_while_running(self):
def func():
bridge = parse("""
- [i1, i2, px]
+ [i1, i2, ix]
i3 = int_add(i1, i2)
i4 = int_add(i1, i3)
i5 = int_add(i1, i4)
@@ -4211,8 +4182,8 @@
force_spill(i7)
force_spill(i8)
force_spill(i9)
- call(ConstClass(func2_ptr), 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, descr=calldescr2)
- guard_true(i1, descr=guarddescr) [i1, i2, i3, i4, i5, i6, i7, i8, i9, px]
+ call_n(ConstClass(func2_ptr), 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, descr=calldescr2)
+ guard_true(i1, descr=guarddescr) [i1, i2, i3, i4, i5, i6, i7, i8, i9, ix]
finish(i1, descr=finaldescr)
""", namespace={'finaldescr': finaldescr, 'calldescr2': calldescr2,
'guarddescr': guarddescr, 'func2_ptr': func2_ptr})
@@ -4244,9 +4215,9 @@
looptoken = JitCellToken()
loop = parse("""
[i0, i1, i2]
- call(ConstClass(func_ptr), descr=calldescr)
- px = force_token()
- guard_true(i0, descr=faildescr) [i1, i2, px]
+ call_n(ConstClass(func_ptr), descr=calldescr)
+ ix = force_token()
+ guard_true(i0, descr=faildescr) [i1, i2, ix]
finish(i2, descr=finaldescr2)
""", namespace=locals())
self.cpu.compile_loop(loop.inputargs, loop.operations, looptoken)
@@ -4311,7 +4282,7 @@
looptoken = JitCellToken()
loop = parse("""
[i0, i1, i2]
- call(ConstClass(raising_ptr), descr=calldescr)
+ call_n(ConstClass(raising_ptr), descr=calldescr)
guard_no_exception(descr=faildescr) [i1, i2]
finish(i2, descr=finaldescr2)
""", namespace={'raising_ptr': raising_ptr,
@@ -4356,7 +4327,7 @@
py.test.skip("requires singlefloats")
res = self.execute_operation(rop.CAST_FLOAT_TO_SINGLEFLOAT,
[boxfloat(12.5)], 'int')
- assert res.getint() == struct.unpack("I", struct.pack("f", 12.5))[0]
+ assert res == struct.unpack("I", struct.pack("f", 12.5))[0]
def test_zero_ptr_field(self):
from rpython.jit.backend.llsupport.llmodel import AbstractLLCPU
diff --git a/rpython/jit/metainterp/resoperation.py b/rpython/jit/metainterp/resoperation.py
--- a/rpython/jit/metainterp/resoperation.py
+++ b/rpython/jit/metainterp/resoperation.py
@@ -321,7 +321,7 @@
getvalue = getfloatstorage
getfloat = getfloatstorage
-
+
def setfloatstorage(self, floatval):
self._resfloat = floatval
@@ -580,7 +580,7 @@
'FLOAT_ABS/1/f',
'CAST_FLOAT_TO_INT/1/i', # don't use for unsigned ints; we would
'CAST_INT_TO_FLOAT/1/f', # need some messy code in the backend
- 'CAST_FLOAT_TO_SINGLEFLOAT/1/f',
+ 'CAST_FLOAT_TO_SINGLEFLOAT/1/i',
'CAST_SINGLEFLOAT_TO_FLOAT/1/f',
'CONVERT_FLOAT_BYTES_TO_LONGLONG/1/i',
'CONVERT_LONGLONG_BYTES_TO_FLOAT/1/f',
More information about the pypy-commit
mailing list