Author: Richard Plangger <planri...@gmail.com> Branch: vecopt-merge Changeset: r80120:a3b94268d07c Date: 2015-10-12 11:03 +0200 http://bitbucket.org/pypy/pypy/changeset/a3b94268d07c/
Log: fixed costmodel tests diff --git a/rpython/jit/metainterp/optimizeopt/schedule.py b/rpython/jit/metainterp/optimizeopt/schedule.py --- a/rpython/jit/metainterp/optimizeopt/schedule.py +++ b/rpython/jit/metainterp/optimizeopt/schedule.py @@ -753,6 +753,7 @@ arg = self.ensure_unpacked(i, argument) if argument is not arg: fail_args[i] = arg + op.setfailargs(fail_args) def ensure_unpacked(self, index, arg): if arg in self.seen or arg.is_vector(): @@ -786,7 +787,6 @@ assert 0, "not allowed to rename void resop" assert off < vector.count assert not var.is_vector() - print "rename", var, off, "=>", vector self.box_to_vbox[var] = (off, vector) def remember_args_in_vector(self, pack, index, box): diff --git a/rpython/jit/metainterp/optimizeopt/test/test_costmodel.py b/rpython/jit/metainterp/optimizeopt/test/test_costmodel.py --- a/rpython/jit/metainterp/optimizeopt/test/test_costmodel.py +++ b/rpython/jit/metainterp/optimizeopt/test/test_costmodel.py @@ -3,7 +3,7 @@ from rpython.jit.metainterp.history import TargetToken, JitCellToken, TreeLoop from rpython.jit.metainterp.optimizeopt.util import equaloplists from rpython.jit.metainterp.optimizeopt.vector import (Pack, X86_CostModel, - NotAProfitableLoop, VectorizingOptimizer) + NotAProfitableLoop, VectorizingOptimizer, CostModel) from rpython.jit.metainterp.optimizeopt.schedule import VecScheduleState from rpython.jit.metainterp.optimizeopt.dependency import Node, DependencyGraph from rpython.jit.metainterp.optimizeopt.test.test_util import LLtypeMixin @@ -29,9 +29,60 @@ # i1 and i0 ... # but not i0, i2 # ... - print iv, 'is after', ov, "?", val == 1 + #print iv, 'is after', ov, "?", val == 1 return val == 1 +def prepost_savings(orig_func): + def func(self, *args): + f = getattr(self.proxy, orig_func.__name__) + before_savings = self.proxy.savings + r = f(*args) + after_savings = self.proxy.savings + print " CM %s (%d -> %d, diff: %d) " % (orig_func.__name__, + before_savings, after_savings, + (after_savings - before_savings),) + print " args: ", args + return r + return func + +class FakeCostModel(CostModel): + def __init__(self, proxy): + self.proxy = proxy + + def getsavings(self): + return self.proxy.savings + + @prepost_savings + def reset_savings(self): + raise NotImplementedError + + @prepost_savings + def record_cast_int(self, op): + raise NotImplementedError + + @prepost_savings + def record_pack_savings(self, pack, times): + raise NotImplementedError + + @prepost_savings + def record_vector_pack(self, box, index, count): + raise NotImplementedError + + @prepost_savings + def record_vector_unpack(self, box, index, count): + raise NotImplementedError + + @prepost_savings + def unpack_cost(self, op, index, count): + raise NotImplementedError + + @prepost_savings + def savings_for_pack(self, pack, times): + raise NotImplementedError + + def profitable(self): + return self.proxy.savings >= 0 + class CostModelBaseTest(SchedulerBaseTest): def savings(self, loop): @@ -50,10 +101,11 @@ print "pack: \n ", print '\n '.join([str(op.getoperation()) for op in pack.operations]) print - costmodel = X86_CostModel(self.cpu, 0) + costmodel = FakeCostModel(X86_CostModel(self.cpu, 0)) + costmodel.reset_savings() state = VecScheduleState(graph, opt.packset, self.cpu, costmodel) opt.schedule(state) - return costmodel.savings + return costmodel.getsavings() def assert_operations_match(self, loop_a, loop_b): assert equaloplists(loop_a.operations, loop_b.operations) @@ -91,8 +143,10 @@ f11 = raw_load_f(p0, i1, descr=double) guard_true(i0) [f10] """) + assert loop1.operations[2].getfailargs()[0] is loop1.operations[0] savings = self.savings(loop1) assert savings == 0 + assert loop1.operations[2].getfailargs()[0] is loop1.operations[-2] def test_load_2_unpack_1_index1(self): loop1 = self.parse_trace(""" diff --git a/rpython/jit/metainterp/optimizeopt/test/test_dependency.py b/rpython/jit/metainterp/optimizeopt/test/test_dependency.py --- a/rpython/jit/metainterp/optimizeopt/test/test_dependency.py +++ b/rpython/jit/metainterp/optimizeopt/test/test_dependency.py @@ -140,6 +140,9 @@ fmt = (indent, joinedargs, source, indent, joinedargs) src = "%s[%s]\n%s\n%sjump(%s)" % fmt loop = self.parse_loop(src) + # needed to assign the right number to the input + # arguments + [str(arg) for arg in loop.inputargs] loop.graph = FakeDependencyGraph(loop) return loop diff --git a/rpython/jit/metainterp/resoperation.py b/rpython/jit/metainterp/resoperation.py --- a/rpython/jit/metainterp/resoperation.py +++ b/rpython/jit/metainterp/resoperation.py @@ -559,6 +559,9 @@ def getfailargs(self): return self._fail_args + def getfailargs_copy(self): + return self._fail_args[:] + def setfailargs(self, fail_args): self._fail_args = fail_args _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit