[pypy-commit] pypy jit-targets: reintroduce inputargs on loops
hakanardo
noreply at buildbot.pypy.org
Sun Nov 6 10:46:27 CET 2011
Author: Hakan Ardo <hakan at 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
More information about the pypy-commit
mailing list