[pypy-svn] r63420 - in pypy/branch/pyjitpl5-simplify/pypy/jit/metainterp: . test
fijal at codespeak.net
fijal at codespeak.net
Sun Mar 29 22:27:11 CEST 2009
Author: fijal
Date: Sun Mar 29 22:27:08 2009
New Revision: 63420
Modified:
pypy/branch/pyjitpl5-simplify/pypy/jit/metainterp/optimize.py
pypy/branch/pyjitpl5-simplify/pypy/jit/metainterp/test/test_virtualizable.py
Log:
pass one more test, branch seems to be merged
Modified: pypy/branch/pyjitpl5-simplify/pypy/jit/metainterp/optimize.py
==============================================================================
--- pypy/branch/pyjitpl5-simplify/pypy/jit/metainterp/optimize.py (original)
+++ pypy/branch/pyjitpl5-simplify/pypy/jit/metainterp/optimize.py Sun Mar 29 22:27:08 2009
@@ -834,16 +834,33 @@
all_offsets.append(offsets)
return all_offsets
+ def _patch(self, origargs, newargs):
+ i = 0
+ res = []
+ for arg in newargs:
+ if arg is None:
+ res.append(origargs[i])
+ i += 1
+ else:
+ res.append(arg)
+ return res
+
+ def _patch_loop(self, operations, inpargs, rebuild_ops, loop):
+ for op in operations:
+ if op.is_guard():
+ if op.suboperations[-1].opnum == rop.FAIL:
+ op.suboperations = (op.suboperations[:-1] + rebuild_ops +
+ [op.suboperations[-1]])
+ else:
+ self._patch_loop(op.suboperations, inpargs, rebuild_ops,
+ loop)
+ jump = operations[-1]
+ if jump.opnum == rop.JUMP and jump.jump_target is loop:
+ jump.args = self._patch(jump.args, inpargs)
+
def update_loop(self, offsets, loop):
j = 0
new_inputargs = []
- new_jumpargs = []
- if loop.operations[-1].jump_target is loop:
- patch_jump = True
- jumpargs = loop.operations[-1].args
- else:
- patch_jump = False
- jumpargs = []
prev_ofs = 0
rebuild_ops = []
memo = {}
@@ -852,14 +869,11 @@
while parentnode.source != loop.inputargs[j]:
j += 1
ofs = j + rel_ofs + 1
- new_inputargs.extend(loop.inputargs[prev_ofs:ofs])
- if patch_jump:
- new_jumpargs.extend(jumpargs[prev_ofs:ofs])
+ new_inputargs.extend([None] * (ofs - prev_ofs))
prev_ofs = ofs
boxlist = []
specnode.expand_boxlist(node, boxlist)
new_inputargs.extend(boxlist)
- new_jumpargs.extend(boxlist)
box = self.prepare_rebuild_ops(node, rebuild_ops, memo)
if (parentnode.cls and
isinstance(parentnode.cls.source, FixedList)):
@@ -869,15 +883,9 @@
else:
rebuild_ops.append(ResOperation(rop.SETFIELD_GC,
[parentnode.source, box], None, descr))
- new_inputargs.extend(loop.inputargs[prev_ofs:])
- loop.inputargs = new_inputargs
- if patch_jump:
- new_jumpargs.extend(loop.operations[-1].args[prev_ofs:])
- loop.operations[-1].args = new_jumpargs
- for op in loop.operations:
- if op.is_guard():
- op.suboperations = (op.suboperations[:-1] + rebuild_ops +
- [op.suboperations[-1]])
+ new_inputargs.extend([None] * (len(loop.inputargs) - prev_ofs))
+ loop.inputargs = self._patch(loop.inputargs, new_inputargs)
+ self._patch_loop(loop.operations, new_inputargs, rebuild_ops, loop)
def get_in_list(dict, boxes_or_consts):
result = []
Modified: pypy/branch/pyjitpl5-simplify/pypy/jit/metainterp/test/test_virtualizable.py
==============================================================================
--- pypy/branch/pyjitpl5-simplify/pypy/jit/metainterp/test/test_virtualizable.py (original)
+++ pypy/branch/pyjitpl5-simplify/pypy/jit/metainterp/test/test_virtualizable.py Sun Mar 29 22:27:08 2009
@@ -475,7 +475,6 @@
def test_virtual_obj_on_always_virtual_more_bridges(self):
- py.test.skip("XXX")
jitdriver = JitDriver(greens = [], reds = ['frame', 'n', 's'],
virtualizables = ['frame'])
More information about the Pypy-commit
mailing list