[pypy-commit] pypy jit-leaner-frontend: progress, pass the first own test of opencoder
fijal
pypy.commits at gmail.com
Tue Mar 1 08:05:50 EST 2016
Author: fijal
Branch: jit-leaner-frontend
Changeset: r82634:ae45cb0da255
Date: 2016-03-01 14:02 +0100
http://bitbucket.org/pypy/pypy/changeset/ae45cb0da255/
Log: progress, pass the first own test of opencoder
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
@@ -4,6 +4,7 @@
from rpython.jit.metainterp.resoperation import AbstractResOp, AbstractInputArg,\
ResOperation, oparity, opname, rop, ResOperation, opwithdescr
from rpython.rlib.rarithmetic import intmask
+from rpython.jit.metainterp import resume
TAGINT, TAGCONST, TAGBOX = range(3)
TAGMASK = 0x3
@@ -46,8 +47,20 @@
else:
yyyy
+ def read_resume(self, op):
+ jc_index = self._next()
+ pc = self._next()
+ f = resume.FrameInfo(None, jc_index, pc)
+ op.rd_frame_info_list = f
+ lgt = self._next()
+ box_list = []
+ for i in range(lgt):
+ box = self._get(self._next())
+ assert box
+ box_list.append(box)
+ op.rd_snapshot = resume.Snapshot(None, box_list)
+
def next(self):
- pos = self.pos
opnum = self._next()
if oparity[opnum] == -1:
argnum = self._next()
@@ -65,6 +78,8 @@
else:
descr = None
res = ResOperation(opnum, args, -1, descr=descr)
+ if rop.is_guard(opnum):
+ self.read_resume(res)
self._cache[self._count] = res
self._count += 1
return res
@@ -138,6 +153,14 @@
def record_op_tag(self, opnum, tagged_args, descr=None):
return tag(TAGBOX, self._record_raw(opnum, tagged_args, descr))
+ def record_snapshot(self, jitcode, pc, active_boxes):
+ self._ops.append(jitcode.index)
+ self._ops.append(pc)
+ self._ops.append(len(active_boxes)) # unnecessary, can be read from
+ # jitcode
+ for box in active_boxes:
+ self._ops.append(box.position) # not tagged, as it must be boxes
+
def get_iter(self):
return TraceIterator(self, len(self._ops))
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
@@ -39,9 +39,9 @@
class FrameInfo(object):
__slots__ = ('prev', 'packed_jitcode_pc')
- def __init__(self, prev, jitcode, pc):
+ def __init__(self, prev, jitcode_index, pc):
self.prev = prev
- self.packed_jitcode_pc = combine_uint(jitcode.index, pc)
+ self.packed_jitcode_pc = combine_uint(jitcode_index, pc)
class VectorInfo(object):
"""
@@ -123,8 +123,7 @@
back.parent_resumedata_snapshot,
back.get_list_of_active_boxes(True))
-def capture_resumedata(framestack, virtualizable_boxes, virtualref_boxes,
- snapshot_storage):
+def capture_resumedata(framestack, virtualizable_boxes, virtualref_boxes, t):
n = len(framestack) - 1
if virtualizable_boxes is not None:
boxes = virtualref_boxes + virtualizable_boxes
@@ -132,15 +131,19 @@
boxes = virtualref_boxes[:]
if n >= 0:
top = framestack[n]
- _ensure_parent_resumedata(framestack, n)
- frame_info_list = FrameInfo(top.parent_resumedata_frame_info_list,
- top.jitcode, top.pc)
- snapshot_storage.rd_frame_info_list = frame_info_list
- snapshot = Snapshot(top.parent_resumedata_snapshot,
- top.get_list_of_active_boxes(False))
- snapshot = Snapshot(snapshot, boxes)
- snapshot_storage.rd_snapshot = snapshot
+ #_ensure_parent_resumedata(framestack, n)
+ t.record_snapshot(top.jitcode, top.pc,
+ top.get_list_of_active_boxes(False))
+ #XXX
+ #frame_info_list = FrameInfo(top.parent_resumedata_frame_info_list,
+ # top.jitcode, top.pc)
+ #snapshot_storage.rd_frame_info_list = frame_info_list
+ #snapshot = Snapshot(top.parent_resumedata_snapshot,
+ # top.get_list_of_active_boxes(False))
+ #snapshot = Snapshot(snapshot, boxes)
+ #snapshot_storage.rd_snapshot = snapshot
else:
+ yyy
snapshot_storage.rd_frame_info_list = None
snapshot_storage.rd_snapshot = Snapshot(None, boxes)
diff --git a/rpython/jit/metainterp/test/test_opencoder.py b/rpython/jit/metainterp/test/test_opencoder.py
--- a/rpython/jit/metainterp/test/test_opencoder.py
+++ b/rpython/jit/metainterp/test/test_opencoder.py
@@ -56,4 +56,4 @@
virutalref_boxes, t)
(i0, i1), l = self.unpack(t)
assert l[1].opnum == rop.GUARD_FALSE
- assert l[1].rd_snapshot == [i0, i1]
+ assert l[1].rd_snapshot.boxes == [i0, i1]
More information about the pypy-commit
mailing list