[pypy-commit] pypy resume-refactor: fixes
fijal
noreply at buildbot.pypy.org
Wed Jan 22 18:23:31 CET 2014
Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: resume-refactor
Changeset: r68857:e0a29fe61a19
Date: 2014-01-18 16:05 +0100
http://bitbucket.org/pypy/pypy/changeset/e0a29fe61a19/
Log: fixes
diff --git a/rpython/jit/metainterp/pyjitpl.py b/rpython/jit/metainterp/pyjitpl.py
--- a/rpython/jit/metainterp/pyjitpl.py
+++ b/rpython/jit/metainterp/pyjitpl.py
@@ -1648,13 +1648,12 @@
def is_main_jitcode(self, jitcode):
return self.jitdriver_sd is not None and jitcode is self.jitdriver_sd.mainjitcode
- def newframe(self, jitcode, greenkey=None, record_resume=True):
+ def newframe(self, jitcode, greenkey=None):
if self.framestack:
pc = self.framestack[-1].pc
else:
pc = -1
- if record_resume:
- self.resumerecorder.enter_frame(pc, jitcode)
+ self.resumerecorder.enter_frame(pc, jitcode)
if jitcode.is_portal:
self.portal_call_depth += 1
self.call_ids.append(self.current_call_id)
@@ -2342,7 +2341,7 @@
# ----- make a new frame -----
self.portal_call_depth = -1 # always one portal around
self.framestack = []
- self.resumerecorder = ResumeRecorder(self, False)
+ self.resumerecorder = ResumeRecorder(self)
f = self.newframe(self.jitdriver_sd.mainjitcode)
f.setup_call(original_boxes)
assert self.portal_call_depth == 0
@@ -2358,9 +2357,9 @@
try:
self.portal_call_depth = -1 # always one portal around
self.history = history.History()
+ self.resumerecorder = ResumeRecorder(self)
state = self.rebuild_state_after_failure(resumedescr, deadframe)
self.history.inputargs, self.history.inputlocs = state
- self.resumerecorder = ResumeRecorder(self, True)
finally:
rstack._stack_criticalcode_stop()
diff --git a/rpython/jit/resume/frontend.py b/rpython/jit/resume/frontend.py
--- a/rpython/jit/resume/frontend.py
+++ b/rpython/jit/resume/frontend.py
@@ -205,7 +205,7 @@
self.deadframe = deadframe
AbstractResumeReader.__init__(self, metainterp.staticdata)
- def get_box_value(self, pos_in_frame, frame_pos, encoded_pos, TP):
+ def get_box_value(self, frame_pos, pos_in_frame, encoded_pos, TP):
if encoded_pos == CLEAR_POSITION:
return None
if encoded_pos in self.cache:
@@ -257,19 +257,19 @@
self.metainterp.execute_and_record(rop.SETFIELD_GC, fielddescr,
box, field_box)
- def store_int_box(self, pos, miframe, i, jitframe_pos):
- box = self.get_box_value(pos, i, jitframe_pos, INT)
+ def store_int_box(self, frame_pos, pos, miframe, i, jitframe_pos):
+ box = self.get_box_value(frame_pos, pos, jitframe_pos, INT)
if box is None:
return
miframe.registers_i[i] = box
- def store_ref_box(self, pos, miframe, i, jitframe_pos):
- box = self.get_box_value(pos, i, jitframe_pos, REF)
+ def store_ref_box(self, frame_pos, pos, miframe, i, jitframe_pos):
+ box = self.get_box_value(frame_pos, pos, jitframe_pos, REF)
if box is None:
return
miframe.registers_r[i] = box
- def store_float_box(self, res, pos, miframe, i, jitframe_pos):
+ def store_float_box(self, frame_pos, pos, miframe, i, jitframe_pos):
box = self.get_box_value(jitframe_pos)
if box is None:
return
@@ -297,19 +297,22 @@
self.result = []
self.cache = {}
self.locs = []
- for frame in self.framestack:
+ for frame_pos, frame in enumerate(self.framestack):
jitcode = frame.jitcode
- miframe = self.metainterp.newframe(jitcode, record_resume=False)
+ miframe = self.metainterp.newframe(jitcode)
miframe.pc = frame.pc
pos = 0
for i in range(jitcode.num_regs_i()):
- self.store_int_box(pos, miframe, i, frame.registers[pos])
+ self.store_int_box(frame_pos, pos, miframe, i,
+ frame.registers[pos])
pos += 1
for i in range(jitcode.num_regs_r()):
- self.store_ref_box(pos, miframe, i, frame.registers[pos])
+ self.store_ref_box(frame_pos, pos, miframe, i,
+ frame.registers[pos])
pos += 1
for i in range(jitcode.num_regs_f()):
- self.store_float_box(pos, miframe, i, frame.registers[pos])
+ self.store_float_box(frame_pos, pos, miframe, i,
+ frame.registers[pos])
pos += 1
self.cache = None
state = self.result, self.locs
@@ -341,12 +344,9 @@
class ResumeRecorder(object):
""" Created by metainterp to record the resume as we record operations
"""
- def __init__(self, metainterp, is_bridge=False):
+ def __init__(self, metainterp):
self.metainterp = metainterp
self.cachestack = []
- if is_bridge:
- for frame in metainterp.framestack:
- self.cachestack.append([None] * frame.jitcode.num_regs())
def enter_frame(self, pc, jitcode):
self.metainterp.history.record(rop.ENTER_FRAME, [ConstInt(pc)], None,
More information about the pypy-commit
mailing list