Author: Maciej Fijalkowski <[email protected]>
Branch: resume-refactor
Changeset: r67444:ae935b78444e
Date: 2013-10-16 23:44 +0200
http://bitbucket.org/pypy/pypy/changeset/ae935b78444e/
Log: port tests until I can't any more and leave the explanation why the
last is failing
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
@@ -2916,18 +2916,22 @@
i0 = BoxInt()
i1 = BoxInt()
faildescr = BasicFailDescr(1)
+ jitcode = JitCode('name')
+ jitcode.setup(num_regs_i=1, num_regs_r=0, num_regs_f=0)
ops = [
+ ResOperation(rop.ENTER_FRAME, [ConstInt(-1)], None, descr=jitcode),
+ ResOperation(rop.RESUME_PUT, [i1, ConstInt(0), ConstInt(0)], None),
ResOperation(rop.GUARD_NOT_INVALIDATED, [], None, descr=faildescr),
+ ResOperation(rop.LEAVE_FRAME, [], None),
ResOperation(rop.FINISH, [i0], None, descr=BasicFinalDescr(0))
]
- ops[0].setfailargs([i1])
looptoken = JitCellToken()
self.cpu.compile_loop(None, [i0, i1], ops, looptoken)
deadframe = self.cpu.execute_token(looptoken, -42, 9)
fail = self.cpu.get_latest_descr(deadframe)
assert fail.identifier == 0
- assert self.cpu.get_int_value(deadframe, 0) == -42
+ assert self.cpu.get_int_value(deadframe, None, 0) == -42
print 'step 1 ok'
print '-'*79
@@ -2936,8 +2940,9 @@
deadframe = self.cpu.execute_token(looptoken, -42, 9)
fail = self.cpu.get_latest_descr(deadframe)
+ locs = rebuild_locs_from_resumedata(fail)
assert fail is faildescr
- assert self.cpu.get_int_value(deadframe, 0) == 9
+ assert self.cpu.get_int_value(deadframe, locs, 0) == 9
print 'step 2 ok'
print '-'*79
@@ -2948,13 +2953,12 @@
ResOperation(rop.GUARD_NOT_INVALIDATED, [],None, descr=faildescr2),
ResOperation(rop.FINISH, [i2], None, descr=BasicFinalDescr(3))
]
- ops[0].setfailargs([])
- self.cpu.compile_bridge(None, faildescr, [i2], ops, looptoken)
+ self.cpu.compile_bridge(None, faildescr, [i2], locs, ops, looptoken)
deadframe = self.cpu.execute_token(looptoken, -42, 9)
fail = self.cpu.get_latest_descr(deadframe)
assert fail.identifier == 3
- assert self.cpu.get_int_value(deadframe, 0) == 9
+ assert self.cpu.get_int_value(deadframe, None, 0) == 9
print 'step 3 ok'
print '-'*79
@@ -2980,7 +2984,6 @@
ResOperation(rop.LABEL, [i0], None, descr=labeldescr),
ResOperation(rop.FINISH, [i0], None, descr=BasicFinalDescr(3)),
]
- ops[0].setfailargs([])
looptoken = JitCellToken()
self.cpu.compile_loop(None, [i0], ops, looptoken)
# mark as failing
@@ -2990,12 +2993,12 @@
ops2 = [
ResOperation(rop.JUMP, [ConstInt(333)], None, descr=labeldescr),
]
- self.cpu.compile_bridge(None, faildescr, [], ops2, looptoken)
+ self.cpu.compile_bridge(None, faildescr, [], [], ops2, looptoken)
# run: must not be caught in an infinite loop
deadframe = self.cpu.execute_token(looptoken, 16)
fail = self.cpu.get_latest_descr(deadframe)
assert fail.identifier == 3
- assert self.cpu.get_int_value(deadframe, 0) == 333
+ assert self.cpu.get_int_value(deadframe, None, 0) == 333
# pure do_ / descr features
@@ -3168,7 +3171,7 @@
def test_assembler_call(self):
called = []
def assembler_helper(deadframe, virtualizable):
- assert self.cpu.get_int_value(deadframe, 0) == 97
+ assert self.cpu.get_int_value(deadframe, None, 0) == 97
called.append(self.cpu.get_latest_descr(deadframe))
return 4 + 9
@@ -3206,12 +3209,12 @@
EffectInfo.MOST_GENERAL)
args = [i+1 for i in range(10)]
deadframe = self.cpu.execute_token(looptoken, *args)
- assert self.cpu.get_int_value(deadframe, 0) == 55
+ assert self.cpu.get_int_value(deadframe, None, 0) == 55
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)
- guard_not_forced()[]
+ guard_not_forced()
finish(i11)
'''
loop = parse(ops, namespace=locals())
@@ -3219,7 +3222,7 @@
self.cpu.compile_loop(None, loop.inputargs, loop.operations,
othertoken)
args = [i+1 for i in range(10)]
deadframe = self.cpu.execute_token(othertoken, *args)
- assert self.cpu.get_int_value(deadframe, 0) == 13
+ assert self.cpu.get_int_value(deadframe, None, 0) == 13
assert called == [finish_descr]
# test the fast path, which should not call assembler_helper()
@@ -3229,7 +3232,7 @@
self.cpu.compile_loop(None, loop.inputargs, loop.operations,
othertoken)
args = [i+1 for i in range(10)]
deadframe = self.cpu.execute_token(othertoken, *args)
- assert self.cpu.get_int_value(deadframe, 0) == 97
+ assert self.cpu.get_int_value(deadframe, None, 0) == 97
assert not called
def test_assembler_call_propagate_exc(self):
@@ -3273,21 +3276,21 @@
ops = '''
[i0]
i11 = call_assembler(i0, descr=looptoken)
- guard_not_forced()[]
+ guard_not_forced()
finish(i11)
'''
loop = parse(ops, namespace=locals())
othertoken = JitCellToken()
self.cpu.compile_loop(None, loop.inputargs, loop.operations,
othertoken)
deadframe = self.cpu.execute_token(othertoken, sys.maxint - 1)
- assert self.cpu.get_int_value(deadframe, 0) == 3
+ assert self.cpu.get_int_value(deadframe, None, 0) == 3
def test_assembler_call_float(self):
if not self.cpu.supports_floats:
py.test.skip("requires floats")
called = []
def assembler_helper(deadframe, virtualizable):
- x = self.cpu.get_float_value(deadframe, 0)
+ x = self.cpu.get_float_value(deadframe, None, 0)
assert longlong.getrealfloat(x) == 1.2 + 3.2
called.append(self.cpu.get_latest_descr(deadframe))
print '!' * 30 + 'assembler_helper'
@@ -3320,12 +3323,12 @@
args = [longlong.getfloatstorage(1.2),
longlong.getfloatstorage(2.3)]
deadframe = self.cpu.execute_token(looptoken, *args)
- x = self.cpu.get_float_value(deadframe, 0)
+ x = self.cpu.get_float_value(deadframe, None, 0)
assert longlong.getrealfloat(x) == 1.2 + 2.3
ops = '''
[f4, f5]
f3 = call_assembler(f4, f5, descr=looptoken)
- guard_not_forced()[]
+ guard_not_forced()
finish(f3)
'''
loop = parse(ops, namespace=locals())
@@ -3334,7 +3337,7 @@
args = [longlong.getfloatstorage(1.2),
longlong.getfloatstorage(3.2)]
deadframe = self.cpu.execute_token(othertoken, *args)
- x = self.cpu.get_float_value(deadframe, 0)
+ x = self.cpu.get_float_value(deadframe, None, 0)
assert longlong.getrealfloat(x) == 13.5
assert called == [finish_descr]
@@ -3346,7 +3349,7 @@
args = [longlong.getfloatstorage(1.2),
longlong.getfloatstorage(4.2)]
deadframe = self.cpu.execute_token(othertoken, *args)
- x = self.cpu.get_float_value(deadframe, 0)
+ x = self.cpu.get_float_value(deadframe, None, 0)
assert longlong.getrealfloat(x) == 1.2 + 4.2
assert not called
@@ -3379,7 +3382,7 @@
py.test.skip("requires floats")
called = []
def assembler_helper(deadframe, virtualizable):
- x = self.cpu.get_float_value(deadframe, 0)
+ x = self.cpu.get_float_value(deadframe, None, 0)
assert longlong.getrealfloat(x) == 1.25 + 3.25
called.append(self.cpu.get_latest_descr(deadframe))
return 13.5
@@ -3410,14 +3413,14 @@
args = [longlong.getfloatstorage(1.25),
longlong.getfloatstorage(2.35)]
deadframe = self.cpu.execute_token(looptoken, *args)
- x = self.cpu.get_float_value(deadframe, 0)
+ x = self.cpu.get_float_value(deadframe, None, 0)
assert longlong.getrealfloat(x) == 1.25 + 2.35
assert not called
ops = '''
[f4, f5]
f3 = call_assembler(f4, f5, descr=looptoken)
- guard_not_forced()[]
+ guard_not_forced()
finish(f3)
'''
loop = parse(ops, namespace=locals())
@@ -3428,7 +3431,7 @@
args = [longlong.getfloatstorage(1.25),
longlong.getfloatstorage(3.25)]
deadframe = self.cpu.execute_token(othertoken, *args)
- x = self.cpu.get_float_value(deadframe, 0)
+ x = self.cpu.get_float_value(deadframe, None, 0)
assert longlong.getrealfloat(x) == 13.5
assert called == [finish_descr]
del called[:]
@@ -3451,7 +3454,7 @@
args = [longlong.getfloatstorage(6.0),
longlong.getfloatstorage(1.5)] # 6.0-1.5 == 1.25+3.25
deadframe = self.cpu.execute_token(othertoken, *args)
- x = self.cpu.get_float_value(deadframe, 0)
+ x = self.cpu.get_float_value(deadframe, None, 0)
assert longlong.getrealfloat(x) == 13.5
assert called == [finish_descr2]
@@ -3840,10 +3843,14 @@
targettoken1 = TargetToken()
targettoken2 = TargetToken()
faildescr = BasicFailDescr(2)
+ jitcode = JitCode('name')
+ jitcode.setup(num_regs_i=1, num_regs_r=0, num_regs_f=0)
operations = [
+ ResOperation(rop.ENTER_FRAME, [ConstInt(-1)], None, descr=jitcode),
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.RESUME_PUT, [i1, ConstInt(0), ConstInt(0)], None),
ResOperation(rop.GUARD_TRUE, [i2], None, descr=faildescr),
ResOperation(rop.LABEL, [i1], None, descr=targettoken2),
ResOperation(rop.INT_GE, [i1, ConstInt(0)], i3),
@@ -3851,14 +3858,13 @@
ResOperation(rop.JUMP, [i1], None, descr=targettoken1),
]
inputargs = [i0]
- operations[3].setfailargs([i1])
- operations[6].setfailargs([i1])
self.cpu.compile_loop(None, inputargs, operations, looptoken)
deadframe = self.cpu.execute_token(looptoken, 2)
fail = self.cpu.get_latest_descr(deadframe)
+ locs = rebuild_locs_from_resumedata(fail)
assert fail.identifier == 2
- res = self.cpu.get_int_value(deadframe, 0)
+ res = self.cpu.get_int_value(deadframe, locs, 0)
assert res == 10
inputargs2 = [i0]
@@ -3866,12 +3872,13 @@
ResOperation(rop.INT_SUB, [i0, ConstInt(20)], i2),
ResOperation(rop.JUMP, [i2], None, descr=targettoken2),
]
- self.cpu.compile_bridge(None, faildescr, inputargs2, operations2,
looptoken)
+ self.cpu.compile_bridge(None, faildescr, inputargs2, locs,
operations2, looptoken)
deadframe = self.cpu.execute_token(looptoken, 2)
fail = self.cpu.get_latest_descr(deadframe)
+ locs = rebuild_locs_from_resumedata(fail)
assert fail.identifier == 3
- res = self.cpu.get_int_value(deadframe, 0)
+ res = self.cpu.get_int_value(deadframe, locs, 0)
assert res == -10
def test_int_force_ge_zero(self):
@@ -3886,7 +3893,7 @@
self.cpu.compile_loop(None, loop.inputargs, loop.operations, looptoken)
for inp, outp in [(2,2), (-3, 0)]:
deadframe = self.cpu.execute_token(looptoken, inp)
- assert outp == self.cpu.get_int_value(deadframe, 0)
+ assert outp == self.cpu.get_int_value(deadframe, None, 0)
def test_compile_asmlen(self):
from rpython.jit.backend.llsupport.llmodel import AbstractLLCPU
@@ -3894,13 +3901,17 @@
py.test.skip("pointless test on non-asm")
from rpython.jit.backend.tool.viewcode import machine_code_dump
import ctypes
+ jitcode = JitCode('name')
+ jitcode.setup(num_regs_i=1, num_regs_r=0, num_regs_f=0)
targettoken = TargetToken()
ops = """
[i2]
+ enter_frame(-1, descr=jitcode)
i0 = same_as(i2) # but forced to be in a register
label(i0, descr=targettoken)
i1 = int_add(i0, i0)
- guard_true(i1, descr=faildescr) [i1]
+ resume_put(i1, 0, 0)
+ guard_true(i1, descr=faildescr)
jump(i1, descr=targettoken)
"""
faildescr = BasicFailDescr(2)
@@ -3913,8 +3924,9 @@
looptoken = JitCellToken()
self.cpu.assembler.set_debug(False)
info = self.cpu.compile_loop(None, loop.inputargs, loop.operations,
looptoken)
+ locs = rebuild_locs_from_resumedata(faildescr)
bridge_info = self.cpu.compile_bridge(None, faildescr,
bridge.inputargs,
- bridge.operations,
+ locs, bridge.operations,
looptoken)
self.cpu.assembler.set_debug(True) # always on untranslated
assert info.asmlen != 0
@@ -3951,12 +3963,16 @@
targettoken1 = TargetToken()
faildescr1 = BasicFailDescr(2)
inputargs = [i0]
+ jitcode = JitCode('name')
+ jitcode.setup(num_regs_i=1, num_regs_r=0, num_regs_f=0)
operations = [
+ ResOperation(rop.ENTER_FRAME, [ConstInt(-1)], None, descr=jitcode),
ResOperation(rop.INT_LE, [i0, ConstInt(1)], i1),
+ ResOperation(rop.RESUME_PUT, [i1, ConstInt(0), ConstInt(0)], None),
ResOperation(rop.GUARD_TRUE, [i1], None, descr=faildescr1),
+ ResOperation(rop.LEAVE_FRAME, [], None),
ResOperation(rop.FINISH, [i0], None, descr=BasicFinalDescr(1234)),
]
- operations[1].setfailargs([i0])
self.cpu.compile_loop(None, inputargs, operations, looptoken1)
def func(a, b, c, d, e, f, g, h, i):
@@ -4010,8 +4026,8 @@
ResOperation(rop.GUARD_TRUE, [i20], None,
descr=BasicFailDescr(42)),
ResOperation(rop.JUMP, [i19], None, descr=targettoken1),
]
- operations2[-2].setfailargs([])
- self.cpu.compile_bridge(None, faildescr1, inputargs, operations2,
looptoken1)
+ locs = rebuild_locs_from_resumedata(faildescr1)
+ self.cpu.compile_bridge(None, faildescr1, inputargs, locs,
operations2, looptoken1)
looptoken2 = JitCellToken()
inputargs = [BoxInt()]
@@ -4032,14 +4048,13 @@
ResOperation(rop.GUARD_NONNULL_CLASS, [t_box, T_box], None,
descr=faildescr),
ResOperation(rop.FINISH, [], None, descr=BasicFinalDescr(1))]
- operations[0].setfailargs([])
looptoken = JitCellToken()
inputargs = [t_box]
self.cpu.compile_loop(None, inputargs, operations, looptoken)
operations = [
ResOperation(rop.FINISH, [], None, descr=BasicFinalDescr(99))
]
- self.cpu.compile_bridge(None, faildescr, [], operations, looptoken)
+ self.cpu.compile_bridge(None, faildescr, [], [], operations, looptoken)
deadframe = self.cpu.execute_token(looptoken, null_box.getref_base())
fail = self.cpu.get_latest_descr(deadframe)
assert fail.identifier == 99
@@ -4070,7 +4085,7 @@
self.cpu.compile_loop(None, loop.inputargs, loop.operations,
looptoken)
deadframe = self.cpu.execute_token(looptoken,
rffi.cast(lltype.Signed, p), 16)
- result = self.cpu.get_int_value(deadframe, 0)
+ result = self.cpu.get_int_value(deadframe, None, 0)
assert result == rffi.cast(lltype.Signed, value)
rawstorage.free_raw_storage(p)
@@ -4100,7 +4115,7 @@
self.cpu.compile_loop(None, loop.inputargs, loop.operations,
looptoken)
deadframe = self.cpu.execute_token(looptoken,
rffi.cast(lltype.Signed, p), 16)
- result = self.cpu.get_float_value(deadframe, 0)
+ result = self.cpu.get_float_value(deadframe, None, 0)
result = longlong.getrealfloat(result)
assert result == rffi.cast(lltype.Float, value)
rawstorage.free_raw_storage(p)
@@ -4130,7 +4145,7 @@
self.cpu.compile_loop(None, loop.inputargs, loop.operations,
looptoken)
deadframe = self.cpu.execute_token(looptoken,
rffi.cast(lltype.Signed, p), 16)
- result = self.cpu.get_int_value(deadframe, 0)
+ result = self.cpu.get_int_value(deadframe, None, 0)
assert result == longlong.singlefloat2int(value)
rawstorage.free_raw_storage(p)
@@ -4238,7 +4253,9 @@
values = []
def maybe_force(token, flag):
deadframe = self.cpu.force(token)
- values.append(self.cpu.get_int_value(deadframe, 0))
+ fail = self.cpu.get_latest_descr(deadframe)
+ locs = rebuild_locs_from_resumedata(fail)
+ values.append(self.cpu.get_int_value(deadframe, locs, 0))
return 42
FUNC = self.FuncType([llmemory.GCREF, lltype.Signed], lltype.Signed)
@@ -4251,26 +4268,36 @@
i2 = BoxInt()
tok = BoxPtr()
faildescr = BasicFailDescr(23)
+ jitcode = JitCode('name')
+ jitcode.setup(num_regs_i=1, num_regs_r=0, num_regs_f=0)
ops = [
+ ResOperation(rop.ENTER_FRAME, [ConstInt(-1)], None, descr=jitcode),
ResOperation(rop.FORCE_TOKEN, [], tok),
ResOperation(rop.CALL_MAY_FORCE, [funcbox, tok, i1], i2,
descr=calldescr),
+ ResOperation(rop.RESUME_PUT, [i2, ConstInt(0), ConstInt(0)], None),
ResOperation(rop.GUARD_NOT_FORCED, [], None, descr=faildescr),
ResOperation(rop.FINISH, [i2], None, descr=BasicFinalDescr(0))
]
- ops[2].setfailargs([i2])
looptoken = JitCellToken()
self.cpu.compile_loop(None, [i0, i1], ops, looptoken)
deadframe = self.cpu.execute_token(looptoken, 20, 0)
fail = self.cpu.get_latest_descr(deadframe)
assert fail.identifier == 23
- assert self.cpu.get_int_value(deadframe, 0) == 42
+ locs = rebuild_locs_from_resumedata(fail)
+ assert self.cpu.get_int_value(deadframe, locs, 0) == 42
# make sure that force reads the registers from a zeroed piece of
# memory
assert values[0] == 0
def test_compile_bridge_while_running(self):
+ XXX # it crashes because the regalloc does not inherit liveness
+ # rules from the parent, while it shoul
+
def func():
+ jitcode2 = JitCode('name2')
+ jitcode2.setup(num_regs_i=7, num_regs_r=0, num_regs_f=0)
+
bridge = parse("""
[i1, i2, px]
i3 = int_add(i1, i2)
@@ -4289,12 +4316,24 @@
force_spill(i7)
force_spill(i8)
force_spill(i9)
+ enter_frame(1, descr=jitcode2)
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]
+ resume_put(i3, 0, 0)
+ resume_put(i4, 0, 1)
+ resume_put(i5, 0, 2)
+ resume_put(i6, 0, 3)
+ resume_put(i7, 0, 4)
+ resume_put(i8, 0, 5)
+ resume_put(i9, 0, 6)
+ guard_true(i1, descr=guarddescr)
+ leave_frame()
+ leave_frame()
finish(i1, descr=finaldescr)
""", namespace={'finaldescr': finaldescr, 'calldescr2': calldescr2,
- 'guarddescr': guarddescr, 'func2_ptr': func2_ptr})
- self.cpu.compile_bridge(None, faildescr, bridge.inputargs,
+ 'guarddescr': guarddescr, 'func2_ptr': func2_ptr,
+ 'jitcode2': jitcode2})
+ locs = rebuild_locs_from_resumedata(faildescr)
+ self.cpu.compile_bridge(None, faildescr, bridge.inputargs, locs,
bridge.operations, looptoken)
cpu = self.cpu
@@ -4320,11 +4359,18 @@
faildescr = BasicFailDescr(0)
looptoken = JitCellToken()
+ jitcode = JitCode('name')
+ jitcode.setup(num_regs_i=2, num_regs_r=1, num_regs_f=0)
loop = parse("""
[i0, i1, i2]
+ enter_frame(-1, descr=jitcode)
call(ConstClass(func_ptr), descr=calldescr)
px = force_token()
- guard_true(i0, descr=faildescr) [i1, i2, px]
+ resume_put(i1, 0, 0)
+ resume_put(i2, 0, 1)
+ resume_put(px, 0, 2)
+ guard_true(i0, descr=faildescr)
+ leave_frame()
finish(i2, descr=finaldescr2)
""", namespace=locals())
self.cpu.compile_loop(None, loop.inputargs, loop.operations, looptoken)
@@ -4337,7 +4383,8 @@
frame = lltype.cast_opaque_ptr(jitframe.JITFRAMEPTR, frame)
assert len(frame.jf_frame) == frame.jf_frame_info.jfi_frame_depth
- ref = self.cpu.get_ref_value(frame, 9)
+ locs = rebuild_locs_from_resumedata(guarddescr)
+ ref = self.cpu.get_ref_value(frame, locs, 2)
token = lltype.cast_opaque_ptr(jitframe.JITFRAMEPTR, ref)
assert token != frame
token = token.resolve()
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit