[pypy-commit] pypy resume-refactor: fix the reconstructing_resume_reader
fijal
noreply at buildbot.pypy.org
Sun Jan 12 12:01:38 CET 2014
Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: resume-refactor
Changeset: r68603:278fef54424c
Date: 2014-01-12 11:59 +0100
http://bitbucket.org/pypy/pypy/changeset/278fef54424c/
Log: fix the reconstructing_resume_reader
diff --git a/rpython/jit/backend/llsupport/llmodel.py b/rpython/jit/backend/llsupport/llmodel.py
--- a/rpython/jit/backend/llsupport/llmodel.py
+++ b/rpython/jit/backend/llsupport/llmodel.py
@@ -339,16 +339,13 @@
assert isinstance(res, history.AbstractFailDescr)
return res
- def get_int_value(self, deadframe, locs, pos):
+ def get_int_value(self, deadframe, pos):
descr = self.gc_ll_descr.getframedescrs(self).arraydescr
ofs = self.unpack_arraydescr(descr)
- if locs is None:
- assert pos == 0
- else:
- pos = locs[pos] * WORD
- return self.read_int_at_mem(deadframe, pos + ofs, WORD, 1)
+ return self.read_int_at_mem(deadframe, pos * WORD + ofs, WORD, 1)
def get_ref_value(self, deadframe, locs, pos):
+ xxx
descr = self.gc_ll_descr.getframedescrs(self).arraydescr
ofs = self.unpack_arraydescr(descr)
if locs is None:
@@ -357,14 +354,10 @@
pos = locs[pos] * WORD
return self.read_ref_at_mem(deadframe, pos + ofs)
- def get_float_value(self, deadframe, locs, pos):
+ def get_float_value(self, deadframe, pos):
descr = self.gc_ll_descr.getframedescrs(self).arraydescr
ofs = self.unpack_arraydescr(descr)
- if locs is None:
- assert pos == 0
- else:
- pos = locs[pos] * WORD
- return self.read_float_at_mem(deadframe, pos + ofs)
+ return self.read_float_at_mem(deadframe, pos * WORD + ofs)
# ____________________ RAW PRIMITIVES ________________________
diff --git a/rpython/jit/backend/llsupport/resumebuilder.py b/rpython/jit/backend/llsupport/resumebuilder.py
--- a/rpython/jit/backend/llsupport/resumebuilder.py
+++ b/rpython/jit/backend/llsupport/resumebuilder.py
@@ -19,7 +19,7 @@
self.framestack.append([None] * jitcode.num_regs())
def resume_put(self, box, framepos, frontend_pos):
- self.framestack[-framepos - 1][frontend_pos] = box
+ self.framestack[framepos][frontend_pos] = box
def resume_new(self, result, descr):
self.deps[result] = {}
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
@@ -69,11 +69,11 @@
else:
self.guard_failed = True
if result_type == 'int':
- return BoxInt(self.cpu.get_int_value(deadframe, locs, 0))
+ return BoxInt(self.cpu.get_int_value(deadframe, 0))
elif result_type == 'ref':
- return BoxPtr(self.cpu.get_ref_value(deadframe, locs, 0))
+ return BoxPtr(self.cpu.get_ref_value(deadframe, 0))
elif result_type == 'float':
- return BoxFloat(self.cpu.get_float_value(deadframe, locs, 0))
+ return BoxFloat(self.cpu.get_float_value(deadframe, 0))
elif result_type == 'void':
return None
else:
@@ -132,7 +132,7 @@
self.cpu.compile_loop(None, inputargs, operations, looptoken)
deadframe = self.cpu.execute_token(looptoken, 2)
fail = self.cpu.get_latest_descr(deadframe)
- res = self.cpu.get_int_value(deadframe, None, 0)
+ res = self.cpu.get_int_value(deadframe, 0)
assert res == 3
assert fail.identifier == 1
@@ -151,7 +151,7 @@
deadframe = self.cpu.execute_token(looptoken,
longlong.getfloatstorage(2.8))
fail = self.cpu.get_latest_descr(deadframe)
- res = self.cpu.get_float_value(deadframe, None, 0)
+ res = self.cpu.get_float_value(deadframe, 0)
assert longlong.getrealfloat(res) == 5.1
fail = self.cpu.get_latest_descr(deadframe)
assert fail.identifier == 1
@@ -172,7 +172,6 @@
ResOperation(rop.RESUME_PUT, [i1, ConstInt(0), ConstInt(0)],
None),
ResOperation(rop.GUARD_TRUE, [i2], None, descr=BasicFailDescr(2)),
- ResOperation(rop.LEAVE_FRAME, [], None),
ResOperation(rop.JUMP, [i1], None, descr=targettoken),
]
inputargs = [i0]
@@ -181,8 +180,7 @@
deadframe = self.cpu.execute_token(looptoken, 2)
fail = self.cpu.get_latest_descr(deadframe)
assert fail.identifier == 2
- locs = rebuild_locs_from_resumedata(fail)
- res = self.cpu.get_int_value(deadframe, locs, 0)
+ res = self.cpu.get_int_value(deadframe, 0)
assert res == 10
def test_backends_dont_keep_loops_alive(self):
@@ -357,7 +355,7 @@
deadframe = self.cpu.execute_token(looptoken, value)
fail = self.cpu.get_latest_descr(deadframe)
assert fail is faildescr
- res = self.cpu.get_float_value(deadframe, None, 0)
+ res = self.cpu.get_float_value(deadframe, 0)
assert longlong.getrealfloat(res) == -61.25
looptoken = JitCellToken()
@@ -368,7 +366,7 @@
deadframe = self.cpu.execute_token(looptoken)
fail = self.cpu.get_latest_descr(deadframe)
assert fail is faildescr
- res = self.cpu.get_float_value(deadframe, None, 0)
+ res = self.cpu.get_float_value(deadframe, 0)
assert longlong.getrealfloat(res) == 42.5
def test_execute_operations_in_env(self):
diff --git a/rpython/jit/metainterp/resume2.py b/rpython/jit/metainterp/resume2.py
--- a/rpython/jit/metainterp/resume2.py
+++ b/rpython/jit/metainterp/resume2.py
@@ -34,7 +34,7 @@
elif op.getopnum() == rop.LEAVE_FRAME:
self.leave_frame()
elif op.getopnum() == rop.RESUME_PUT:
- self.resume_put(op.getarg(0).getint(), op.getarg(1).getint(),
+ self.resume_put(op.getarg(0), op.getarg(1).getint(),
op.getarg(2).getint())
elif op.getopnum() == rop.RESUME_NEW:
self.resume_new(op.result, op.getdescr())
@@ -48,7 +48,8 @@
xxx
pos += 1
- def resume_put(self, jitframe_pos, depth, frontend_position):
+ def resume_put(self, jitframe_pos_const, depth, frontend_position):
+ jitframe_pos = jitframe_pos_const.getint()
jitcode = self.metainterp.framestack[-1].jitcode
frame = self.metainterp.framestack[depth]
if frontend_position < jitcode.num_regs_i():
diff --git a/rpython/jit/metainterp/test/test_resume2.py b/rpython/jit/metainterp/test/test_resume2.py
--- a/rpython/jit/metainterp/test/test_resume2.py
+++ b/rpython/jit/metainterp/test/test_resume2.py
@@ -30,6 +30,7 @@
class MockMetaInterp(object):
def __init__(self):
+ self.cpu = MockCPU()
self.framestack = []
def newframe(self, jitcode):
@@ -45,14 +46,23 @@
class RebuildingResumeReader(BoxResumeReader):
def __init__(self):
- self.backend_values = {}
self.metainterp = MockMetaInterp()
+ def put_box_int(self, frame, position, jitframe_pos):
+ frame.registers_i[position] = jitframe_pos
+
+ def put_box_float(self, frame, position, jitframe_pos):
+ xxx
+
+ def put_box_ref(self, frame, position, jitframe_pos):
+ xxx
+
def finish(self):
- l = []
+ framestack = []
for frame in self.metainterp.framestack:
- frame.dump_registers(l, self.backend_values)
- return l
+ framestack.append(frame.registers_i + frame.registers_r +
+ frame.registers_f)
+ return framestack
def rebuild_locs_from_resumedata(faildescr):
return RebuildingResumeReader().rebuild(faildescr)
@@ -161,27 +171,23 @@
""", namespace={'jitcode':jitcode1})
def test_reconstructing_resume_reader(self):
- py.test.skip("xxx")
jitcode1 = JitCode("jitcode")
jitcode1.setup(num_regs_i=2, num_regs_f=0, num_regs_r=0)
jitcode2 = JitCode("jitcode2")
jitcode2.setup(num_regs_i=1, num_regs_f=0, num_regs_r=0)
resume_loop = parse("""
- [i0, i1, i2, i3]
+ []
enter_frame(-1, descr=jitcode1)
- resume_put(i0, 0, 1)
- backend_attach(i0, 11)
+ resume_put(11, 0, 1)
enter_frame(12, descr=jitcode2)
- resume_put(i1, 0, 0)
- backend_attach(i1, 12)
- resume_put(i3, 1, 0)
- backend_attach(i3, 8)
+ resume_put(12, 1, 0)
+ resume_put(8, 0, 0)
leave_frame()
leave_frame()
""", namespace={'jitcode1': jitcode1,
'jitcode2': jitcode2})
descr = Descr()
descr.rd_resume_bytecode = ResumeBytecode(resume_loop.operations)
- descr.rd_bytecode_position = 8
+ descr.rd_bytecode_position = 5
locs = rebuild_locs_from_resumedata(descr)
- assert locs == [8, 11, 12]
+ assert locs == [[8, 11], [12]]
More information about the pypy-commit
mailing list