[pypy-commit] pypy vecopt: pblendw_xxi -> only tests byte for the i argument

plan_rich noreply at buildbot.pypy.org
Wed Jul 29 09:31:10 CEST 2015


Author: Richard Plangger <rich at pasra.at>
Branch: vecopt
Changeset: r78700:1544d293e4b7
Date: 2015-07-29 08:56 +0200
http://bitbucket.org/pypy/pypy/changeset/1544d293e4b7/

Log:	pblendw_xxi -> only tests byte for the i argument last two tests in
	test_vectorize

diff --git a/rpython/jit/backend/x86/test/test_rx86_32_auto_encoding.py b/rpython/jit/backend/x86/test/test_rx86_32_auto_encoding.py
--- a/rpython/jit/backend/x86/test/test_rx86_32_auto_encoding.py
+++ b/rpython/jit/backend/x86/test/test_rx86_32_auto_encoding.py
@@ -388,7 +388,8 @@
            instrname.find('INSERT') != -1 or \
            instrname.find('EXTRACT') != -1 or \
            instrname.find('SRLDQ') != -1 or \
-           instrname.find('SHUF') != -1:
+           instrname.find('SHUF') != -1 or \
+           instrname.find('PBLEND') != -1:
             realargmodes = []
             for mode in argmodes:
                 if mode == 'i':
diff --git a/rpython/jit/metainterp/history.py b/rpython/jit/metainterp/history.py
--- a/rpython/jit/metainterp/history.py
+++ b/rpython/jit/metainterp/history.py
@@ -734,13 +734,16 @@
     def repr_of_descr(self):
         return 'TargetToken(%d)' % compute_unique_id(self)
 
-def index_of_first(opnum, operations):
+def index_of_first(opnum, operations, pass_by=0):
     """ returns the position of the first operation matching the opnum.
     Or -1 if non is found
     """
     for i,op in enumerate(operations):
         if op.getopnum() == opnum:
-            return i
+            if pass_by == 0:
+                return i
+            else:
+                pass_by -= 1
     return -1
 
 
@@ -849,9 +852,9 @@
     def get_operations(self):
         return self.operations
 
-    def find_first_index(self, opnum):
+    def find_first_index(self, opnum, pass_by=0):
         """ return the first operation having the same opnum or -1 """
-        return index_of_first(opnum, self.operations)
+        return index_of_first(opnum, self.operations, pass_by)
 
     def snapshot(self):
         version = LoopVersion(self.copy_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
@@ -357,17 +357,13 @@
         i1 = int_add(i0,1)
         jump(p0,i1)
         """
-        vopt = self.vectoroptimizer_unrolled(self.parse_loop(ops),1)
-        self.assert_edges(vopt.dependency_graph,
-                [ [1,2,3,5], [5], [3,4], [5], [5], [] ], {})
-
+        loop = self.parse_loop(ops)
+        vopt = self.vectoroptimizer_unrolled(loop,1)
         vopt.find_adjacent_memory_refs()
-        self.assert_has_memory_ref_at(1)
-        self.assert_has_memory_ref_at(3)
         assert len(vopt.dependency_graph.memory_refs) == 2
 
-        mref1 = self.getmemref(1)
-        mref3 = self.getmemref(3)
+        mref1 = self.getmemref(loop.find_first_index(rop.RAW_LOAD))
+        mref3 = self.getmemref(loop.find_first_index(rop.RAW_LOAD,1))
         assert isinstance(mref1, MemoryRef)
         assert isinstance(mref3, MemoryRef)
 
@@ -493,37 +489,17 @@
         i6 = int_add(i4,1)
         jump(p0,i1,i6)
         """
-        ops2 = """
-        [p0,i0,i4]
-        i3 = raw_load(p0,i0,descr=chararraydescr)
-        i1 = int_add(i0,1)
-        i5 = raw_load(p0,i4,descr=chararraydescr)
-        i6 = int_add(i4,1)
-        i3 = raw_load(p0,i1,descr=chararraydescr)
-        i8 = int_add(i1,1)
-        i9 = raw_load(p0,i6,descr=chararraydescr)
-        i7 = int_add(i6,1)
-        jump(p0,i8,i7)
-        """
-
-        vopt = self.vectoroptimizer_unrolled(self.parse_loop(ops),1)
-        self.assert_edges(vopt.dependency_graph,
-                [ [1,2,3,4,5,7,9], 
-                    [9], [5,6], [9], [7,8],
-                    [9],  [9], [9], [9], 
-                  [],
-                ], {})
-
+        loop = self.parse_loop(ops)
+        vopt = self.vectoroptimizer_unrolled(loop,1)
         vopt.find_adjacent_memory_refs()
 
-        for i in [1,3,5,7]:
+        f = lambda x: loop.find_first_index(rop.RAW_LOAD, x)
+        indices = [f(0),f(1),f(2),f(3)]
+        for i in indices:
             self.assert_has_memory_ref_at(i)
         assert len(vopt.dependency_graph.memory_refs) == 4
 
-        mref1 = self.getmemref(1)
-        mref3 = self.getmemref(3)
-        mref5 = self.getmemref(5)
-        mref7 = self.getmemref(7)
+        mref1, mref3, mref5, mref7 = [self.getmemref(i) for i in indices]
         assert isinstance(mref1, MemoryRef)
         assert isinstance(mref3, MemoryRef)
         assert isinstance(mref5, MemoryRef)
@@ -1056,27 +1032,6 @@
         assert opt.loop.inputargs[2] in opt.packset.accum_vars
         self.debug_print_operations(opt.loop)
 
-    def test_accumulate_int16(self):
-        py.test.skip("only sum int64 on x64 is supported")
-        trace = """
-        [p3, i4, p1, i5, i6, i7, i8]
-        guard_early_exit() [p1, i4, i5, i6, p3]
-        i9 = raw_load(i7, i5, descr=int16arraydescr)
-        guard_not_invalidated() [p1, i9, i4, i5, i6, p3]
-        i10 = int_add(i6, i9)
-        i12 = int_add(i4, 1)
-        i14 = int_add(i5, 2)
-        i15 = int_ge(i12, i8)
-        guard_false(i15) [p1, i14, i10, i12, None, None, None, p3]
-        jump(p3, i12, p1, i14, i10, i7, i8)
-        """
-        opt = self.schedule(self.parse_loop(trace))
-        assert len(opt.packset.packs) == 2
-        assert len(opt.packset.accum_vars) == 1
-        assert opt.loop.inputargs[4] in opt.packset.accum_vars
-        self.debug_print_operations(opt.loop)
-
-
     def test_element_f45_in_guard_failargs(self):
         ops = """
         [p36, i28, p9, i37, p14, f34, p12, p38, f35, p39, i40, i41, p42, i43, i44, i21, i4, i0, i18]


More information about the pypy-commit mailing list