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

Reply via email to