[pypy-svn] r69378 - in pypy/branch/compress-virtuals-resumedata/pypy/jit/metainterp: . test
cfbolz at codespeak.net
cfbolz at codespeak.net
Wed Nov 18 15:17:01 CET 2009
Author: cfbolz
Date: Wed Nov 18 15:17:00 2009
New Revision: 69378
Modified:
pypy/branch/compress-virtuals-resumedata/pypy/jit/metainterp/resume.py
pypy/branch/compress-virtuals-resumedata/pypy/jit/metainterp/test/test_resume.py
Log:
(pedronis, cfbolz): number virtuals a bit later
Modified: pypy/branch/compress-virtuals-resumedata/pypy/jit/metainterp/resume.py
==============================================================================
--- pypy/branch/compress-virtuals-resumedata/pypy/jit/metainterp/resume.py (original)
+++ pypy/branch/compress-virtuals-resumedata/pypy/jit/metainterp/resume.py Wed Nov 18 15:17:00 2009
@@ -90,6 +90,7 @@
TAGVIRTUAL = 3
UNASSIGNED = tag(-2 ** 12 - 1, TAGBOX)
+UNASSIGNEDVIRTUAL = tag(-2 ** 12 - 1, TAGVIRTUAL)
NULLREF = tag(-1, TAGCONST)
@@ -205,9 +206,8 @@
self.virtuals[i] = vinfo
self.vfieldboxes[i] = fieldboxes
else:
- tagged = tag(len(self.virtuals), TAGVIRTUAL)
- self.virtuals.append(vinfo)
- self.vfieldboxes.append(fieldboxes)
+ tagged = UNASSIGNEDVIRTUAL
+ self.vinfos_not_env[virtualbox] = (vinfo, fieldboxes)
self.liveboxes[virtualbox] = tagged
self._register_boxes(fieldboxes)
@@ -237,6 +237,7 @@
numb, liveboxes_from_env, v = self.memo.number(values, storage.rd_snapshot)
self.liveboxes_from_env = liveboxes_from_env
self.liveboxes = {}
+ self.vinfos_not_env = {}
storage.rd_numb = numb
storage.rd_snapshot = None
@@ -261,6 +262,7 @@
return liveboxes[:]
def _number_virtuals(self, liveboxes):
+ virtuals = self.virtuals
for box, tagged in self.liveboxes.iteritems():
i, tagbits = untag(tagged)
if tagbits == TAGBOX:
@@ -269,7 +271,11 @@
liveboxes.append(box)
else:
assert tagbits == TAGVIRTUAL
-
+ if tagged_eq(tagged, UNASSIGNEDVIRTUAL):
+ vinfo, fieldboxes = self.vinfos_not_env[box]
+ self.liveboxes[box] = tag(len(virtuals), TAGVIRTUAL)
+ virtuals.append(vinfo)
+ self.vfieldboxes.append(fieldboxes)
storage = self.storage
storage.rd_virtuals = None
if len(self.virtuals) > 0:
Modified: pypy/branch/compress-virtuals-resumedata/pypy/jit/metainterp/test/test_resume.py
==============================================================================
--- pypy/branch/compress-virtuals-resumedata/pypy/jit/metainterp/test/test_resume.py (original)
+++ pypy/branch/compress-virtuals-resumedata/pypy/jit/metainterp/test/test_resume.py Wed Nov 18 15:17:00 2009
@@ -588,18 +588,20 @@
modifier.liveboxes_from_env = {}
modifier.liveboxes = {}
modifier.virtuals = []
+ modifier.vinfos_not_env = {}
modifier.vfieldboxes = []
modifier.make_virtual(vbox, None, ['a', 'b'], [b1, b2])
- assert modifier.liveboxes == {vbox: tag(0, TAGVIRTUAL), b1: UNASSIGNED,
+ assert modifier.liveboxes == {vbox: UNASSIGNEDVIRTUAL, b1: UNASSIGNED,
b2: UNASSIGNED}
- assert len(modifier.virtuals) == 1
- assert modifier.vfieldboxes == [[b1, b2]]
+ assert len(modifier.virtuals) == 0
+ assert modifier.vfieldboxes == []
modifier = ResumeDataVirtualAdder(None, None)
modifier.liveboxes_from_env = {vbox: tag(0, TAGVIRTUAL)}
modifier.liveboxes = {}
modifier.virtuals = [None]
modifier.vfieldboxes = [None]
+ modifier.vinfos_not_env = {}
modifier.make_virtual(vbox, None, ['a', 'b', 'c'], [b1, b2, vbox])
assert modifier.liveboxes == {b1: UNASSIGNED, b2: UNASSIGNED,
vbox: tag(0, TAGVIRTUAL)}
@@ -720,6 +722,7 @@
modifier.liveboxes_from_env = {}
modifier.liveboxes = {}
modifier.virtuals = []
+ modifier.vinfos_not_env = {}
modifier.vfieldboxes = []
modifier.make_virtual(b2s,
ConstAddr(LLtypeMixin.node_vtable_adr,
@@ -749,22 +752,25 @@
metainterp = MyMetaInterp()
reader = ResumeDataReader(storage, newboxes, metainterp)
assert len(reader.virtuals) == 2
- b2t = reader._decode_box(tag(0, TAGVIRTUAL))
- b4t = reader._decode_box(tag(1, TAGVIRTUAL))
+ b2t = reader._decode_box(modifier._gettagged(b2s))
+ b4t = reader._decode_box(modifier._gettagged(b4s))
trace = metainterp.trace
- expected = [
- (rop.NEW_WITH_VTABLE, [ConstAddr(LLtypeMixin.node_vtable_adr,
+ b2new = (rop.NEW_WITH_VTABLE, [ConstAddr(LLtypeMixin.node_vtable_adr,
LLtypeMixin.cpu)],
- b2t, None),
- (rop.NEW_WITH_VTABLE, [ConstAddr(LLtypeMixin.node_vtable_adr2,
+ b2t, None)
+ b4new = (rop.NEW_WITH_VTABLE, [ConstAddr(LLtypeMixin.node_vtable_adr2,
LLtypeMixin.cpu)],
- b4t, None),
- (rop.SETFIELD_GC, [b2t, b4t], None, LLtypeMixin.nextdescr),
- (rop.SETFIELD_GC, [b2t, c1s], None, LLtypeMixin.valuedescr),
- (rop.SETFIELD_GC, [b4t, b2t], None, LLtypeMixin.nextdescr),
- (rop.SETFIELD_GC, [b4t, b3t], None, LLtypeMixin.valuedescr),
- (rop.SETFIELD_GC, [b4t, b5t], None, LLtypeMixin.otherdescr),
- ]
+ b4t, None)
+ b2set = [(rop.SETFIELD_GC, [b2t, b4t], None, LLtypeMixin.nextdescr),
+ (rop.SETFIELD_GC, [b2t, c1s], None, LLtypeMixin.valuedescr)]
+ b4set = [(rop.SETFIELD_GC, [b4t, b2t], None, LLtypeMixin.nextdescr),
+ (rop.SETFIELD_GC, [b4t, b3t], None, LLtypeMixin.valuedescr),
+ (rop.SETFIELD_GC, [b4t, b5t], None, LLtypeMixin.otherdescr)]
+ if untag(modifier._gettagged(b2s))[0] == 0:
+ expected = [b2new, b4new] + b2set + b4set
+ else:
+ expected = [b4new, b2new] + b4set + b2set
+
for x, y in zip(expected, trace):
assert x == y
ptr = b2t.value._obj.container._as_ptr()
@@ -785,6 +791,7 @@
modifier.liveboxes_from_env = {}
modifier.liveboxes = {}
modifier.virtuals = []
+ modifier.vinfos_not_env = {}
modifier.vfieldboxes = []
modifier.make_varray(b2s,
LLtypeMixin.arraydescr,
@@ -831,6 +838,7 @@
modifier.liveboxes_from_env = {}
modifier.liveboxes = {}
modifier.virtuals = []
+ modifier.vinfos_not_env = {}
modifier.vfieldboxes = []
modifier.make_vstruct(b2s,
LLtypeMixin.ssize,
More information about the Pypy-commit
mailing list