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