Author: Maciej Fijalkowski <fij...@gmail.com> Branch: optresult-unroll Changeset: r78372:d655c193c36a Date: 2015-07-01 11:13 +0200 http://bitbucket.org/pypy/pypy/changeset/d655c193c36a/
Log: start writing more direct unrolling tests diff --git a/rpython/jit/metainterp/optimizeopt/test/test_unroll.py b/rpython/jit/metainterp/optimizeopt/test/test_unroll.py new file mode 100644 --- /dev/null +++ b/rpython/jit/metainterp/optimizeopt/test/test_unroll.py @@ -0,0 +1,53 @@ + +""" More direct tests for unrolling +""" + +from rpython.jit.metainterp.optimizeopt.test.test_util import BaseTest,\ + LLtypeMixin, FakeMetaInterpStaticData +from rpython.jit.metainterp.history import (TreeLoop, AbstractDescr, + JitCellToken, TargetToken) +from rpython.jit.metainterp.resoperation import rop, ResOperation +from rpython.jit.metainterp.optimizeopt.virtualstate import \ + NotVirtualStateInfo, LEVEL_CONSTANT + +class FakeOptimizer(object): + optearlyforce = None + +class TestUnroll(BaseTest, LLtypeMixin): + enable_opts = "intbounds:rewrite:virtualize:string:earlyforce:pure:heap:unroll" + + def optimize(self, ops): + loop = self.parse(ops, postprocess=self.postprocess) + metainterp_sd = FakeMetaInterpStaticData(self.cpu) + self.add_guard_future_condition(loop) + operations = loop.operations + jumpop = operations[-1] + assert jumpop.getopnum() == rop.JUMP + inputargs = loop.inputargs + + jump_args = jumpop.getarglist()[:] + operations = operations[:-1] + + preamble = TreeLoop('preamble') + preamble.inputargs = inputargs + + token = JitCellToken() + start_label = ResOperation(rop.LABEL, inputargs, descr=TargetToken(token)) + stop_label = ResOperation(rop.LABEL, jump_args, descr=token) + preamble.operations = [start_label] + operations + [stop_label] + start_state = self._do_optimize_loop(preamble, None, + export_state=True) + vs = preamble.operations[-1].getdescr().virtual_state + return start_state, vs + + def test_simple(self): + loop = """ + [i0] + i1 = int_add(i0, 1) + guard_value(i1, 1) [] + jump(i1) + """ + es, vs = self.optimize(loop) + assert isinstance(vs.state[0], NotVirtualStateInfo) + assert vs.make_inputargs([1], FakeOptimizer()) == [] + assert vs.state[0].level == LEVEL_CONSTANT _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit