[pypy-commit] pypy vecopt2: adjusted the test suit after a refactoring the vectorization optimizer

plan_rich noreply at buildbot.pypy.org
Tue May 5 09:45:27 CEST 2015


Author: Richard Plangger <rich at pasra.at>
Branch: vecopt2
Changeset: r77079:2298583fcc92
Date: 2015-03-16 11:44 +0100
http://bitbucket.org/pypy/pypy/changeset/2298583fcc92/

Log:	adjusted the test suit after a refactoring the vectorization
	optimizer

diff --git a/rpython/jit/metainterp/optimizeopt/dependency.py b/rpython/jit/metainterp/optimizeopt/dependency.py
--- a/rpython/jit/metainterp/optimizeopt/dependency.py
+++ b/rpython/jit/metainterp/optimizeopt/dependency.py
@@ -18,10 +18,9 @@
         Representation is an adjacent list. The number of edges between the
         vertices is expected to be small.
     """
-    def __init__(self, optimizer):
-        self.loop = optimizer.loop
-        self.operations = self.loop.operations
-        self.optimizer = optimizer
+    def __init__(self, trace):
+        self.trace = trace
+        self.operations = self.trace.operations
         self.adjacent_list = [ [] for i in range(len(self.operations)) ]
 
         self.build_dependencies(self.operations)
diff --git a/rpython/jit/metainterp/optimizeopt/test/test_vectorize.py b/rpython/jit/metainterp/optimizeopt/test/test_vectorize.py
--- a/rpython/jit/metainterp/optimizeopt/test/test_vectorize.py
+++ b/rpython/jit/metainterp/optimizeopt/test/test_vectorize.py
@@ -1,4 +1,5 @@
 import py
+
 from rpython.rlib.objectmodel import instantiate
 from rpython.jit.metainterp.optimizeopt.test.test_util import (
     LLtypeMixin, BaseTest, FakeMetaInterpStaticData, convert_old_style_to_targets)
@@ -8,7 +9,7 @@
 import rpython.jit.metainterp.optimizeopt.virtualize as virtualize
 from rpython.jit.metainterp.optimizeopt.dependency import DependencyGraph
 from rpython.jit.metainterp.optimizeopt.unroll import Inliner
-from rpython.jit.metainterp.optimizeopt.vectorize import OptVectorize, MemoryRef
+from rpython.jit.metainterp.optimizeopt.vectorize import VectorizingOptimizer, MemoryRef
 from rpython.jit.metainterp.optimize import InvalidLoop
 from rpython.jit.metainterp.history import ConstInt, BoxInt, get_const_ptr_for_string
 from rpython.jit.metainterp import executor, compile, resume
@@ -27,7 +28,7 @@
 
     def build_dependency(self, ops):
         loop = self.parse_loop(ops)
-        return DependencyGraph(None, loop)
+        return DependencyGraph(loop)
 
     def parse_loop(self, ops):
         loop = self.parse(ops, postprocess=self.postprocess)
@@ -45,7 +46,7 @@
     def vec_optimizer(self, loop):
         metainterp_sd = FakeMetaInterpStaticData(self.cpu)
         jitdriver_sd = FakeJitDriverStaticData()
-        opt = OptVectorize(metainterp_sd, jitdriver_sd, loop, [])
+        opt = VectorizingOptimizer(metainterp_sd, jitdriver_sd, loop, [])
         return opt
 
     def vec_optimizer_unrolled(self, loop, unroll_factor = -1):
@@ -54,6 +55,7 @@
         if unroll_factor == -1:
             unroll_factor = opt.get_estimated_unroll_factor()
         opt.unroll_loop_iterations(loop, unroll_factor)
+        opt.loop.operations = opt.get_newoperations()
         return opt
 
     def assert_unroll_loop_equals(self, loop, expected_loop, \
@@ -509,11 +511,11 @@
         self.assert_memory_ref_not_adjacent(mref, mref2)
         assert mref == mref2
 
-    def test_array_memory_ref_diff_calc_but_equal(self):
+    def test_array_memory_ref_diff_not_equal(self):
         ops = """
         [p0,i0]
         i1 = int_add(i0,4)
-        i2 = int_floor(i1,2)
+        i2 = int_floordiv(i1,2)
         i3 = raw_load(p0,i2,descr=chararraydescr)
         i4 = int_add(i0,2)
         i5 = int_mul(i4,2)
@@ -528,7 +530,7 @@
         mref2 = vopt.vec_info.memory_refs[7]
 
         self.assert_memory_ref_not_adjacent(mref, mref2)
-        assert mref == mref2
+        assert mref != mref2
 
 
 class TestLLtype(BaseTestDependencyGraph, LLtypeMixin):
diff --git a/rpython/jit/metainterp/optimizeopt/vectorize.py b/rpython/jit/metainterp/optimizeopt/vectorize.py
--- a/rpython/jit/metainterp/optimizeopt/vectorize.py
+++ b/rpython/jit/metainterp/optimizeopt/vectorize.py
@@ -52,19 +52,24 @@
     def unroll_loop_iterations(self, loop, unroll_factor):
         label_op = loop.operations[0]
         jump_op = loop.operations[-1]
-        operations = [loop.operations[i].clone() for i in range(1,len(loop.operations)-1)]
-        loop.operations = []
+
+        # TODO use the new optimizer structure (branch of fijal currently)
+        label_op_args = [self.getvalue(box).get_key_box() for box in label_op.getarglist()]
+        values = [self.getvalue(box) for box in label_op.getarglist()]
+
+        operations = []
+        self.emit_unrolled_operation(label_op)
+
+        for i in range(1,len(loop.operations)-1):
+            op = loop.operations[i].clone()
+            operations.append(op)
+            self.emit_unrolled_operation(op)
 
         op_index = len(operations) + 1
 
-        iterations = [operations]
-        label_op_args = [self.getvalue(box).get_key_box() for box in label_op.getarglist()]
-        values = [self.getvalue(box) for box in label_op.getarglist()]
-
         jump_op_args = jump_op.getarglist()
 
         rename_map = {}
-        self.emit_unrolled_operation(label_op)
         for unroll_i in range(2, unroll_factor+1):
             # for each unrolling factor the boxes are renamed.
             self._rename_arguments_ssa(rename_map, label_op_args, jump_op_args)
@@ -146,7 +151,7 @@
         self.find_adjacent_memory_refs()
 
     def build_dependency_graph(self):
-        self.dependency_graph = DependencyGraph(self)
+        self.dependency_graph = DependencyGraph(self.loop)
 
     def find_adjacent_memory_refs(self):
         """ the pre pass already builds a hash of memory references and the
diff --git a/rpython/jit/metainterp/test/test_vectorize.py b/rpython/jit/metainterp/test/test_vectorize.py
--- a/rpython/jit/metainterp/test/test_vectorize.py
+++ b/rpython/jit/metainterp/test/test_vectorize.py
@@ -15,11 +15,6 @@
 class VectorizeTest(object):
     enable_opts = ''
 
-    automatic_promotion_result = {
-        'int_add' : 6, 'int_gt' : 1, 'guard_false' : 1, 'jump' : 1,
-        'guard_value' : 3
-    }
-
     def meta_interp(self, f, args, policy=None):
         return ll_meta_interp(f, args, enable_opts=self.enable_opts,
                               policy=policy,


More information about the pypy-commit mailing list