[pypy-svn] r68231 - pypy/trunk/pypy/jit/metainterp/test
pedronis at codespeak.net
pedronis at codespeak.net
Wed Oct 7 15:10:39 CEST 2009
Author: pedronis
Date: Wed Oct 7 15:10:37 2009
New Revision: 68231
Modified:
pypy/trunk/pypy/jit/metainterp/test/test_resume.py
Log:
(cfbolz, pedronis) integration tests in preparation of deeper changes to increase the sharing of resume data
Modified: pypy/trunk/pypy/jit/metainterp/test/test_resume.py
==============================================================================
--- pypy/trunk/pypy/jit/metainterp/test/test_resume.py (original)
+++ pypy/trunk/pypy/jit/metainterp/test/test_resume.py Wed Oct 7 15:10:37 2009
@@ -110,6 +110,9 @@
return self.__dict__ == other.__dict__
def __ne__(self, other):
return self.__dict__ != other.__dict__
+ def __repr__(self):
+ return "<FF %s %s %s %s>" % (self.jitcode, self.pc,
+ self.exception_target, self.env)
def test_Snapshot_create():
l = ['b0', 'b1']
@@ -209,13 +212,6 @@
assert snapshot.boxes == fs[2].env
def test_rebuild_from_resumedata():
- class FakeMetaInterp(object):
- def __init__(self):
- self.framestack = []
- def newframe(self, jitcode):
- frame = FakeFrame(jitcode, -1, -1)
- self.framestack.append(frame)
- return frame
b1, b2, b3 = [BoxInt(), BoxPtr(), BoxInt()]
c1, c2, c3 = [ConstInt(1), ConstInt(2), ConstInt(3)]
storage = Storage()
@@ -227,7 +223,7 @@
modifier = ResumeDataVirtualAdder(storage, memo)
modifier.walk_snapshots({})
liveboxes = modifier.finish({})
- metainterp = FakeMetaInterp()
+ metainterp = MyMetaInterp(None)
b1t, b2t, b3t = [BoxInt(), BoxPtr(), BoxInt()]
newboxes = _resume_remap(liveboxes, [b1, b2, b3], b1t, b2t, b3t)
@@ -241,13 +237,6 @@
assert metainterp.framestack == fs2
def test_rebuild_from_resumedata_with_virtualizable():
- class FakeMetaInterp(object):
- def __init__(self):
- self.framestack = []
- def newframe(self, jitcode):
- frame = FakeFrame(jitcode, -1, -1)
- self.framestack.append(frame)
- return frame
b1, b2, b3, b4 = [BoxInt(), BoxPtr(), BoxInt(), BoxPtr()]
c1, c2, c3 = [ConstInt(1), ConstInt(2), ConstInt(3)]
storage = Storage()
@@ -259,7 +248,7 @@
modifier = ResumeDataVirtualAdder(storage, memo)
modifier.walk_snapshots({})
liveboxes = modifier.finish({})
- metainterp = FakeMetaInterp()
+ metainterp = MyMetaInterp(None)
b1t, b2t, b3t, b4t = [BoxInt(), BoxPtr(), BoxInt(), BoxPtr()]
newboxes = _resume_remap(liveboxes, [b1, b2, b3, b4], b1t, b2t, b3t, b4t)
@@ -271,6 +260,116 @@
FakeFrame("code1", 3, 7, b3t, c2, b1t),
FakeFrame("code2", 9, -1, c3, b2t)]
assert metainterp.framestack == fs2
+
+def test_rebuild_from_resumedata_two_guards():
+ b1, b2, b3, b4 = [BoxInt(), BoxPtr(), BoxInt(), BoxInt()]
+ c1, c2, c3 = [ConstInt(1), ConstInt(2), ConstInt(3)]
+ storage = Storage()
+ fs = [FakeFrame("code0", 0, -1, b1, c1, b2),
+ FakeFrame("code1", 3, 7, b3, c2, b1),
+ FakeFrame("code2", 9, -1, c3, b2)]
+ capture_resumedata(fs, None, storage)
+ storage2 = Storage()
+ fs = fs[:-1] + [FakeFrame("code2", 10, -1, c3, b2, b4)]
+ capture_resumedata(fs, None, storage2)
+
+ memo = ResumeDataLoopMemo(None)
+ modifier = ResumeDataVirtualAdder(storage, memo)
+ modifier.walk_snapshots({})
+ liveboxes = modifier.finish({})
+
+ modifier = ResumeDataVirtualAdder(storage2, memo)
+ modifier.walk_snapshots({})
+ liveboxes2 = modifier.finish({})
+
+ metainterp = MyMetaInterp(None)
+
+ b1t, b2t, b3t, b4t = [BoxInt(), BoxPtr(), BoxInt(), BoxInt()]
+ newboxes = _resume_remap(liveboxes, [b1, b2, b3], b1t, b2t, b3t)
+
+ result = rebuild_from_resumedata(metainterp, newboxes, storage,
+ False)
+ assert result is None
+ fs2 = [FakeFrame("code0", 0, -1, b1t, c1, b2t),
+ FakeFrame("code1", 3, 7, b3t, c2, b1t),
+ FakeFrame("code2", 9, -1, c3, b2t)]
+ assert metainterp.framestack == fs2
+
+ newboxes = _resume_remap(liveboxes2, [b1, b2, b3, b4], b1t, b2t, b3t, b4t)
+
+ metainterp.framestack = []
+ result = rebuild_from_resumedata(metainterp, newboxes, storage2,
+ False)
+ assert result is None
+ fs2 = fs2[:-1] + [FakeFrame("code2", 10, -1, c3, b2t, b4t)]
+ assert metainterp.framestack == fs2
+
+
+def test_rebuild_from_resumedata_two_guards_w_virtuals():
+
+ b1, b2, b3, b4, b5 = [BoxInt(), BoxPtr(), BoxInt(), BoxInt(), BoxInt()]
+ c1, c2, c3, c4 = [ConstInt(1), ConstInt(2), ConstInt(3),
+ LLtypeMixin.nodebox.constbox()]
+ class FakeValue(object):
+
+ def register_value(self, modifier):
+ if modifier.register_box(b2):
+ modifier.make_virtual(b2, ConstAddr(LLtypeMixin.node_vtable_adr,
+ LLtypeMixin.cpu),
+ [LLtypeMixin.nextdescr, LLtypeMixin.valuedescr],
+ [c4, fieldbox])
+
+ def get_key_box(self):
+ return b2
+
+ values = {b2: FakeValue()}
+
+ storage = Storage()
+ fs = [FakeFrame("code0", 0, -1, b1, c1, b2),
+ FakeFrame("code1", 3, 7, b3, c2, b1),
+ FakeFrame("code2", 9, -1, c3, b2)]
+ capture_resumedata(fs, None, storage)
+ storage2 = Storage()
+ fs = fs[:-1] + [FakeFrame("code2", 10, -1, c3, b2, b4)]
+ capture_resumedata(fs, None, storage2)
+
+ memo = ResumeDataLoopMemo(LLtypeMixin.cpu)
+ fieldbox = b5
+ modifier = ResumeDataVirtualAdder(storage, memo)
+ modifier.walk_snapshots(values)
+ liveboxes = modifier.finish(values)
+
+ fieldbox = b4
+ modifier = ResumeDataVirtualAdder(storage2, memo)
+ modifier.walk_snapshots(values)
+ liveboxes2 = modifier.finish(values)
+
+ metainterp = MyMetaInterp(LLtypeMixin.cpu)
+
+ b1t, b3t, b4t, b5t = [BoxInt(), BoxInt(), BoxInt(), BoxInt()]
+ newboxes = _resume_remap(liveboxes, [b1, b3, b5], b1t, b3t, b5t)
+
+ result = rebuild_from_resumedata(metainterp, newboxes, storage,
+ False)
+
+ b2t = metainterp.resboxes[0]
+ fs2 = [FakeFrame("code0", 0, -1, b1t, c1, b2t),
+ FakeFrame("code1", 3, 7, b3t, c2, b1t),
+ FakeFrame("code2", 9, -1, c3, b2t)]
+ assert metainterp.framestack == fs2
+
+ newboxes = _resume_remap(liveboxes2, [b1, b3, b4], b1t, b3t, b4t)
+
+ metainterp = MyMetaInterp(LLtypeMixin.cpu)
+ result = rebuild_from_resumedata(metainterp, newboxes, storage2,
+ False)
+ b2t = metainterp.resboxes[0]
+ fs2 = [FakeFrame("code0", 0, -1, b1t, c1, b2t),
+ FakeFrame("code1", 3, 7, b3t, c2, b1t),
+ FakeFrame("code2", 10, -1, c3, b2t, b4t)]
+ assert metainterp.framestack == fs2
+
+
# ____________________________________________________________
def test_walk_snapshots():
@@ -358,12 +457,21 @@
def __init__(self, cpu):
self.cpu = cpu
self.trace = []
+ self.framestack = []
+ self.resboxes = []
+
+ def newframe(self, jitcode):
+ frame = FakeFrame(jitcode, -1, -1)
+ self.framestack.append(frame)
+ return frame
+
def execute_and_record(self, opnum, descr, *argboxes):
resbox = executor.execute(self.cpu, opnum, descr, *argboxes)
self.trace.append((opnum,
[box.value for box in argboxes],
resbox and resbox.value,
descr))
+ self.resboxes.append(resbox)
return resbox
def _resume_remap(liveboxes, expected, *newvalues):
More information about the Pypy-commit
mailing list