Author: Hakan Ardo <ha...@debian.org> Branch: jit-targets Changeset: r48815:50843084d602 Date: 2011-11-06 10:46 +0100 http://bitbucket.org/pypy/pypy/changeset/50843084d602/
Log: reintroduce inputargs on loops diff --git a/pypy/jit/metainterp/history.py b/pypy/jit/metainterp/history.py --- a/pypy/jit/metainterp/history.py +++ b/pypy/jit/metainterp/history.py @@ -772,6 +772,7 @@ self.exported_state = None class TreeLoop(object): + inputargs = None operations = None token = None call_pure_results = None @@ -784,20 +785,6 @@ # ops of the kind 'guard_xxx' contain a further list of operations, # which may itself contain 'guard_xxx' and so on, making a tree. - _inputargs = None - - def get_inputargs(self): - "NOT_RPYTHON" - if self._inputargs is not None: - return self._inputargs - assert self.operations[0].getopnum() == rop.LABEL - return self.operations[0].getarglist() - - def set_inputargs(self, inputargs): - self._inputargs = inputargs - - inputargs = property(get_inputargs, set_inputargs) - def _all_operations(self, omit_finish=False): "NOT_RPYTHON" result = [] @@ -825,14 +812,15 @@ def check_consistency(self): # for testing "NOT_RPYTHON" - seen = dict.fromkeys(self.inputargs) - self.check_consistency_of_branch(self.operations, seen) + self.check_consistency_of(self.inputargs, self.operations) @staticmethod - def check_consistency_of(operations): - assert operations[0].getopnum() == rop.LABEL - inputargs = operations[0].getarglist() + def check_consistency_of(inputargs, operations): + for box in inputargs: + assert isinstance(box, Box), "Loop.inputargs contains %r" % (box,) seen = dict.fromkeys(inputargs) + assert len(seen) == len(inputargs), ( + "duplicate Box in the Loop.inputargs") TreeLoop.check_consistency_of_branch(operations, seen) @staticmethod @@ -875,7 +863,7 @@ def dump(self): # RPython-friendly - print '%r: ' % self + print '%r: inputargs =' % self, self._dump_args(self.inputargs) for op in self.operations: args = op.getarglist() print '\t', op.getopname(), self._dump_args(args), \ 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 @@ -7,7 +7,7 @@ from pypy.jit.metainterp.optimizeopt import optimize_loop_1, ALL_OPTS_DICT, build_opt_chain from pypy.jit.metainterp.optimize import InvalidLoop from pypy.jit.metainterp.history import AbstractDescr, ConstInt, BoxInt -from pypy.jit.metainterp.history import TreeLoop, LoopToken, TargetToken +from pypy.jit.metainterp.history import TreeLoop, ProcedureToken, TargetToken from pypy.jit.metainterp.jitprof import EmptyProfiler from pypy.jit.metainterp import executor, compile, resume, history from pypy.jit.metainterp.resoperation import rop, opname, ResOperation @@ -83,18 +83,16 @@ jumpop = operations[-1] assert jumpop.getopnum() == rop.JUMP inputargs = loop.inputargs - loop.inputargs = None jump_args = jumpop.getarglist()[:] operations = operations[:-1] cloned_operations = [op.clone() for op in operations] preamble = TreeLoop('preamble') - #loop.preamble.inputargs = loop.inputargs - #loop.preamble.token = LoopToken() + preamble.inputargs = inputargs preamble.start_resumedescr = FakeDescr() - token = LoopToken() # FIXME: Make this a MergePointToken? + token = ProcedureToken() preamble.operations = [ResOperation(rop.LABEL, inputargs, None, descr=TargetToken(token))] + \ operations + \ [ResOperation(rop.LABEL, jump_args, None, descr=TargetToken(token))] @@ -107,6 +105,8 @@ [ResOperation(rop.LABEL, [inliner.inline_arg(a) for a in jump_args], None, descr=TargetToken(token))] #[inliner.inline_op(jumpop)] + assert loop.operations[0].getopnum() == rop.LABEL + loop.inputargs = loop.operations[0].getarglist() self._do_optimize_loop(loop, call_pure_results) extra_same_as = [] @@ -146,6 +146,8 @@ assert preamble.operations[-1].getdescr() == loop.operations[0].getdescr() if expected_short: short_preamble = TreeLoop('short preamble') + assert short[0].getopnum() == rop.LABEL + short_preamble.inputargs = short[0].getarglist() short_preamble.operations = short self.assert_equal(short_preamble, convert_old_style_to_targets(expected_short, jump=True), text_right='expected short preamble') @@ -155,6 +157,7 @@ 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: 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 LoopToken, ConstInt, History, Stats +from pypy.jit.metainterp.history import ProcedureToken, TargetToken, ConstInt, History, Stats from pypy.jit.metainterp.history import BoxInt, INT -from pypy.jit.metainterp.compile import insert_loop_token, compile_new_loop +from pypy.jit.metainterp.compile import insert_loop_token, compile_procedure from pypy.jit.metainterp.compile import ResumeGuardDescr from pypy.jit.metainterp.compile import ResumeGuardCountersInt from pypy.jit.metainterp.compile import compile_tmp_callback diff --git a/pypy/jit/tool/oparser.py b/pypy/jit/tool/oparser.py --- a/pypy/jit/tool/oparser.py +++ b/pypy/jit/tool/oparser.py @@ -70,7 +70,7 @@ self.invent_fail_descr = invent_fail_descr self.nonstrict = nonstrict self.model = get_model(self.use_mock_model) - self.looptoken = self.model.LoopToken() + self.looptoken = self.model.ProcedureToken() def get_const(self, name, typ): if self._consts is None: diff --git a/pypy/jit/tool/oparser_model.py b/pypy/jit/tool/oparser_model.py --- a/pypy/jit/tool/oparser_model.py +++ b/pypy/jit/tool/oparser_model.py @@ -3,7 +3,7 @@ def get_real_model(): class LoopModel(object): - from pypy.jit.metainterp.history import TreeLoop, LoopToken + from pypy.jit.metainterp.history import TreeLoop, ProcedureToken from pypy.jit.metainterp.history import Box, BoxInt, BoxFloat from pypy.jit.metainterp.history import ConstInt, ConstObj, ConstPtr, ConstFloat from pypy.jit.metainterp.history import BasicFailDescr _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit