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

Reply via email to