[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