Author: Maciej Fijalkowski <[email protected]>
Branch: optmodel-refactor
Changeset: r66365:65538d09eae7
Date: 2013-08-27 17:00 +0100
http://bitbucket.org/pypy/pypy/changeset/65538d09eae7/

Log:    commit in-progress, closing the branch to start again

diff --git a/rpython/jit/metainterp/optimizeopt/optimizer.py 
b/rpython/jit/metainterp/optimizeopt/optimizer.py
--- a/rpython/jit/metainterp/optimizeopt/optimizer.py
+++ b/rpython/jit/metainterp/optimizeopt/optimizer.py
@@ -7,7 +7,8 @@
 from rpython.jit.metainterp.optimizeopt.util import make_dispatcher_method
 from rpython.jit.metainterp.resoperation import rop, ResOperation, 
AbstractResOp
 from rpython.jit.metainterp.typesystem import llhelper
-from rpython.jit.metainterp.resume2 import OptimizerResumeInterpreter
+from rpython.jit.metainterp.resume2 import OptimizerResumeInterpreter,\
+     ResumeBytecodeBuilder, MODEL_FAILARGS
 from rpython.tool.pairtype import extendabletype
 from rpython.rlib.debug import debug_print
 from rpython.rlib.objectmodel import specialize
@@ -345,17 +346,22 @@
         self.allboxes = {}
         for k, v in allboxes.iteritems():
             self.allboxes[v] = k
-        # we fish bytecode from the loop
+        # XXX make this be fished from loop, not from a descr, sounds a bit
+        #     obscure
         for op in loop.operations:
             if op.is_guard():
                 descr = op.getdescr()
                 assert isinstance(descr, AbstractFailDescr)
                 bc = descr.rd_bytecode
                 jitcodes = metainterp_sd.alljitcodes
-                self.resume_bc = OptimizerResumeInterpreter(bc, jitcodes)
+                self.resume_bc_writer = ResumeBytecodeBuilder(metainterp_sd,
+                                              MODEL_FAILARGS)
+                self.resume_bc = OptimizerResumeInterpreter(bc, jitcodes,
+                                                    self.resume_bc_writer)
                 break
         else:
             self.resume_bc = None # trivial case
+            self.resume_bc_writer = None
         self.metainterp_sd = metainterp_sd
         self.cpu = metainterp_sd.cpu
         self.loop = loop
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
@@ -5,7 +5,7 @@
 
 opcodes:
 
-UPDATE_PC <pc> [list-of-alive-boxes]
+CAPTURE_POINT <pc> [list-of-alive-boxes]
 ENTER_FRAME <func no> <pc> [list-of-alive-boxes]
 LEAVE_FRAME
 
@@ -19,11 +19,34 @@
 
 BC_NAMES = ['ENTER_FRAME', 'LEAVE_FRAME', 'CAPTURE_POINT']
 
+MODEL_FRONTEND = 0
+MODEL_FAILARGS = 1
+MODEL_BACKEND = 2
+
+class Bytecode(object):
+    """ an object representing a single bytecode. We keep it on faildescrs,
+    however it would be more efficient to keep it on a loop token.
+
+    XXX fix that
+
+    model can be one of the above, it means the numbers in numberings
+    are relative to:
+
+    frontend - means the index is an index into list of allboxes
+    failargs - means it's index in the list of failargs
+    backend - a backend specific number
+
+    """
+    def __init__(self, bc_repr, model):
+        self.bc_repr = bc_repr
+        self.model = model
+
 class ResumeBytecodeBuilder(object):
-    def __init__(self, metainterp_sd):
+    def __init__(self, metainterp_sd, model=MODEL_FRONTEND):
         self.bc = []
         self.boxes = {}
         self.metainterp_sd = metainterp_sd
+        self.model = model
 
     def enumerate_box(self, box):
         if box in self.boxes:
@@ -73,12 +96,12 @@
             if op.is_guard():
                 descr = op.getdescr()
                 assert isinstance(descr, AbstractFailDescr)
-                descr.rd_bytecode = finished_bc
-        print_bc(finished_bc, self.metainterp_sd.alljitcodes)
+                descr.rd_bytecode = Bytecode(finished_bc, self.model)
+        #print_bc(finished_bc, self.metainterp_sd.alljitcodes)
 
 class AbstractBytecodeInterpreter(object):
     def __init__(self, bc, alljitcodes):
-        self.bc = bc
+        self.bc = bc.bc_repr
         self.alljitcodes = alljitcodes
         self.init()
 
@@ -144,6 +167,14 @@
         self.framestack.pop()
 
 class OptimizerResumeInterpreter(AbstractBytecodeInterpreter):
+    """ This resume interpreter reads the resume and writes the new one
+    in resume_bc_writer
+    """
+
+    def __init__(self, bc, jitcode, resume_bc_writer):
+        AbstractBytecodeInterpreter.__init__(self, bc, jitcode)
+        self.resume_bc_writer = resume_bc_writer
+
     def init(self):
         self.pos = 0
         self.framestack = []
@@ -151,6 +182,7 @@
         self.cur_boxlist = None
 
     def get_current_boxes(self, allboxes):
+        xxx
         newboxes = [None] * (self.cur_len + len(self.cur_boxlist))
         i = 0
         j = 0
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to