Author: fijal
Branch: jit-leaner-frontend
Changeset: r82875:e48b95c1467b
Date: 2016-03-08 11:42 +0200
http://bitbucket.org/pypy/pypy/changeset/e48b95c1467b/
Log: fix the order of resumedata rebuild
diff --git a/rpython/jit/metainterp/history.py
b/rpython/jit/metainterp/history.py
--- a/rpython/jit/metainterp/history.py
+++ b/rpython/jit/metainterp/history.py
@@ -657,6 +657,12 @@
def length(self):
return self.trace._count
+ def get_cut_position(self):
+ return len(self.trace._ops)
+
+ def cut(self, cut_at):
+ self.trace.cut_at(cut_at)
+
def any_operation(self):
return self.trace._count > 0
diff --git a/rpython/jit/metainterp/opencoder.py
b/rpython/jit/metainterp/opencoder.py
--- a/rpython/jit/metainterp/opencoder.py
+++ b/rpython/jit/metainterp/opencoder.py
@@ -139,6 +139,9 @@
def length(self):
return len(self._ops)
+ def cut_at(self, end):
+ self._ops = self._ops[:end]
+
def _encode(self, box):
if isinstance(box, Const):
if (isinstance(box, ConstInt) and
diff --git a/rpython/jit/metainterp/optimizeopt/unroll.py
b/rpython/jit/metainterp/optimizeopt/unroll.py
--- a/rpython/jit/metainterp/optimizeopt/unroll.py
+++ b/rpython/jit/metainterp/optimizeopt/unroll.py
@@ -253,10 +253,9 @@
else:
debug_print("Retrace count reached, jumping to preamble")
return self.jump_to_preamble(cell_token, jump_op, info)
- xxx
- exported_state = self.export_state(start_label,
- operations[-1].getarglist(),
- info.inputargs, box_names_memo)
+ exported_state = self.export_state(info.jump_op.getarglist(),
+ info.inputargs, runtime_boxes,
+ box_names_memo)
exported_state.quasi_immutable_deps =
self.optimizer.quasi_immutable_deps
self.optimizer._clean_optimization_info(self.optimizer._newoperations)
return exported_state, self.optimizer._newoperations
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
@@ -1918,7 +1918,7 @@
def retrace_needed(self, trace, exported_state):
self.partial_trace = trace
- self.retracing_from = len(self.history.operations) - 1
+ self.retracing_from = self.history.length()
self.exported_state = exported_state
self.heapcache.reset()
@@ -2245,7 +2245,7 @@
jd_sd.warmstate.get_location_str(greenkey),
self.staticdata.logger_ops._make_log_operations(
self.box_names_memo),
- self.history.operations)
+ self.history.trace)
if self.aborted_tracing_jitdriver is not None:
jd_sd = self.aborted_tracing_jitdriver
greenkey = self.aborted_tracing_greenkey
@@ -2454,7 +2454,7 @@
self.staticdata.log('cancelled, tracing more...')
# Otherwise, no loop found so far, so continue tracing.
- start = len(self.history.operations)
+ start = self.history.get_cut_position()
self.current_merge_points.append((live_arg_boxes, start))
def _unpack_boxes(self, boxes, start, stop):
@@ -2606,18 +2606,18 @@
if not target_jitcell_token:
return
+ cut_at = self.history.get_cut_position()
self.history.record(rop.JUMP, live_arg_boxes[num_green_args:], None,
descr=target_jitcell_token)
self.history.ends_with_jump = True
try:
target_token = compile.compile_trace(self, self.resumekey)
finally:
- xxxx
+ self.history.cut(cut_at) # pop the jump
if target_token is not None: # raise if it *worked* correctly
assert isinstance(target_token, TargetToken)
jitcell_token = target_token.targeting_jitcell_token
self.raise_continue_running_normally(live_arg_boxes, jitcell_token)
- xxxx # remove the jump op and continue tracing
def compile_done_with_this_frame(self, exitbox):
# temporarily put a JUMP to a pseudo-loop
diff --git a/rpython/jit/metainterp/resume.py b/rpython/jit/metainterp/resume.py
--- a/rpython/jit/metainterp/resume.py
+++ b/rpython/jit/metainterp/resume.py
@@ -1094,7 +1094,6 @@
f.setup_resume_at_op(pc)
resumereader.consume_boxes(f.get_current_position_info(),
f.registers_i, f.registers_r, f.registers_f)
- metainterp.framestack.reverse()
return resumereader.liveboxes, virtualizable_boxes, virtualref_boxes
@@ -1368,22 +1367,16 @@
# by the positions in the numbering. The first one we get must be
# the bottom one, i.e. the last one in the chain, in order to make
# the comment in BlackholeInterpreter.setposition() valid.
- prevbh = None
- firstbh = None
curbh = None
while not resumereader.done_reading():
- curbh = blackholeinterpbuilder.acquire_interp()
- if prevbh is not None:
- prevbh.nextblackholeinterp = curbh
- else:
- firstbh = curbh
- prevbh = curbh
+ nextbh = blackholeinterpbuilder.acquire_interp()
+ nextbh.nextblackholeinterp = curbh
+ curbh = nextbh
jitcode_pos, pc = resumereader.read_jitcode_pos_pc()
jitcode = jitcodes[jitcode_pos]
curbh.setposition(jitcode, pc)
resumereader.consume_one_section(curbh)
- curbh.nextblackholeinterp = None
- return firstbh
+ return curbh
def force_from_resumedata(metainterp_sd, storage, deadframe, vinfo, ginfo):
resumereader = ResumeDataDirectReader(metainterp_sd, storage, deadframe)
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit