Author: Hakan Ardo <ha...@debian.org> Branch: jit-targets Changeset: r48862:aa5ecf2901be Date: 2011-11-07 12:48 +0100 http://bitbucket.org/pypy/pypy/changeset/aa5ecf2901be/
Log: make OptSimplify follow and test_optimizebasic follow the new model diff --git a/pypy/jit/metainterp/optimizeopt/__init__.py b/pypy/jit/metainterp/optimizeopt/__init__.py --- a/pypy/jit/metainterp/optimizeopt/__init__.py +++ b/pypy/jit/metainterp/optimizeopt/__init__.py @@ -45,7 +45,7 @@ optimizations.append(OptFfiCall()) if ('rewrite' not in enable_opts or 'virtualize' not in enable_opts - or 'heap' not in enable_opts): + or 'heap' not in enable_opts or 'unroll' not in enable_opts): optimizations.append(OptSimplify()) if inline_short_preamble: diff --git a/pypy/jit/metainterp/optimizeopt/simplify.py b/pypy/jit/metainterp/optimizeopt/simplify.py --- a/pypy/jit/metainterp/optimizeopt/simplify.py +++ b/pypy/jit/metainterp/optimizeopt/simplify.py @@ -1,9 +1,12 @@ from pypy.jit.metainterp.optimizeopt.optimizer import Optimization from pypy.jit.metainterp.optimizeopt.util import make_dispatcher_method from pypy.jit.metainterp.resoperation import ResOperation, rop - +from pypy.jit.metainterp.history import TargetToken, JitCellToken class OptSimplify(Optimization): + def __init__(self): + self.last_label_descr = None + def optimize_CALL_PURE(self, op): args = op.getarglist() self.emit_operation(ResOperation(rop.CALL, args, op.result, @@ -28,6 +31,20 @@ def optimize_MARK_OPAQUE_PTR(self, op): pass + def optimize_LABEL(self, op): + self.last_label_descr = op.getdescr() + self.emit_operation(op) + + def optimize_JUMP(self, op): + descr = op.getdescr() + assert isinstance(descr, JitCellToken) + if not descr.target_tokens: + assert self.last_label_descr is not None + assert self.last_label_descr.targeting_jitcell_token is descr + op.setdescr(self.last_label_descr) + else: + import pdb; pdb.set_trace() + self.emit_operation(op) dispatch_opt = make_dispatcher_method(OptSimplify, 'optimize_', default=OptSimplify.emit_operation) diff --git a/pypy/jit/metainterp/optimizeopt/test/test_optimizebasic.py b/pypy/jit/metainterp/optimizeopt/test/test_optimizebasic.py --- a/pypy/jit/metainterp/optimizeopt/test/test_optimizebasic.py +++ b/pypy/jit/metainterp/optimizeopt/test/test_optimizebasic.py @@ -1,7 +1,8 @@ import py from pypy.rlib.objectmodel import instantiate from pypy.jit.metainterp.optimizeopt.test.test_util import ( - LLtypeMixin, BaseTest, FakeMetaInterpStaticData) + LLtypeMixin, BaseTest, FakeMetaInterpStaticData, convert_old_style_to_targets) +from pypy.jit.metainterp.history import TargetToken, JitCellToken from pypy.jit.metainterp.test.test_compile import FakeLogger import pypy.jit.metainterp.optimizeopt.optimizer as optimizeopt import pypy.jit.metainterp.optimizeopt.virtualize as virtualize @@ -11,7 +12,6 @@ from pypy.jit.metainterp.resoperation import rop, opname, ResOperation from pypy.rlib.rarithmetic import LONG_BIT - def test_store_final_boxes_in_guard(): from pypy.jit.metainterp.compile import ResumeGuardDescr from pypy.jit.metainterp.resume import tag, TAGBOX @@ -116,9 +116,13 @@ enable_opts = "intbounds:rewrite:virtualize:string:earlyforce:pure:heap" def optimize_loop(self, ops, optops, call_pure_results=None): - loop = self.parse(ops) - expected = self.parse(optops) + token = JitCellToken() + loop.operations = [ResOperation(rop.LABEL, loop.inputargs, None, descr=TargetToken(token))] + \ + loop.operations + if loop.operations[-1].getopnum() == rop.JUMP: + loop.operations[-1].setdescr(token) + expected = convert_old_style_to_targets(self.parse(optops), jump=True) self._do_optimize_loop(loop, call_pure_results) print '\n'.join([str(o) for o in loop.operations]) self.assert_equal(loop, expected) diff --git a/pypy/jit/metainterp/optimizeopt/test/test_optimizeopt.py b/pypy/jit/metainterp/optimizeopt/test/test_optimizeopt.py --- a/pypy/jit/metainterp/optimizeopt/test/test_optimizeopt.py +++ b/pypy/jit/metainterp/optimizeopt/test/test_optimizeopt.py @@ -1,7 +1,7 @@ import py from pypy.rlib.objectmodel import instantiate from pypy.jit.metainterp.optimizeopt.test.test_util import ( - LLtypeMixin, BaseTest, Storage, _sortboxes) + LLtypeMixin, BaseTest, Storage, _sortboxes, convert_old_style_to_targets) import pypy.jit.metainterp.optimizeopt.optimizer as optimizeopt import pypy.jit.metainterp.optimizeopt.virtualize as virtualize from pypy.jit.metainterp.optimizeopt import optimize_loop_1, ALL_OPTS_DICT, build_opt_chain @@ -158,16 +158,6 @@ return loop -def convert_old_style_to_targets(loop, jump): - newloop = TreeLoop(loop.name) - newloop.inputargs = loop.inputargs - newloop.operations = [ResOperation(rop.LABEL, loop.inputargs, None, descr=FakeDescr())] + \ - loop.operations - if not jump: - assert newloop.operations[-1].getopnum() == rop.JUMP - newloop.operations[-1] = ResOperation(rop.LABEL, newloop.operations[-1].getarglist(), None, descr=FakeDescr()) - return newloop - class OptimizeOptTest(BaseTestWithUnroll): def setup_method(self, meth=None): diff --git a/pypy/jit/metainterp/optimizeopt/test/test_util.py b/pypy/jit/metainterp/optimizeopt/test/test_util.py --- a/pypy/jit/metainterp/optimizeopt/test/test_util.py +++ b/pypy/jit/metainterp/optimizeopt/test/test_util.py @@ -18,6 +18,7 @@ from pypy.jit.metainterp import compile, resume, history from pypy.jit.metainterp.jitprof import EmptyProfiler from pypy.config.pypyoption import get_pypy_config +from pypy.jit.metainterp.resoperation import rop, opname, ResOperation def test_sort_descrs(): class PseudoDescr(AbstractDescr): @@ -400,5 +401,21 @@ # optimize_trace(metainterp_sd, loop, self.enable_opts) +class FakeDescr(compile.ResumeGuardDescr): + def clone_if_mutable(self): + return FakeDescr() + def __eq__(self, other): + return isinstance(other, FakeDescr) + +def convert_old_style_to_targets(loop, jump): + newloop = TreeLoop(loop.name) + newloop.inputargs = loop.inputargs + newloop.operations = [ResOperation(rop.LABEL, loop.inputargs, None, descr=FakeDescr())] + \ + loop.operations + if not jump: + assert newloop.operations[-1].getopnum() == rop.JUMP + newloop.operations[-1] = ResOperation(rop.LABEL, newloop.operations[-1].getarglist(), None, descr=FakeDescr()) + return newloop + # ____________________________________________________________ diff --git a/pypy/jit/metainterp/test/test_compile.py b/pypy/jit/metainterp/test/test_compile.py --- a/pypy/jit/metainterp/test/test_compile.py +++ b/pypy/jit/metainterp/test/test_compile.py @@ -1,7 +1,7 @@ from pypy.config.pypyoption import get_pypy_config from pypy.jit.metainterp.history import TargetToken, ConstInt, History, Stats from pypy.jit.metainterp.history import BoxInt, INT -from pypy.jit.metainterp.compile import insert_loop_token, compile_procedure +from pypy.jit.metainterp.compile import insert_loop_token, compile_loop from pypy.jit.metainterp.compile import ResumeGuardDescr from pypy.jit.metainterp.compile import ResumeGuardCountersInt from pypy.jit.metainterp.compile import compile_tmp_callback _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit