Author: Richard Plangger <r...@pasra.at>
Branch: vecopt
Changeset: r78843:e8a74e18fc6e
Date: 2015-08-07 10:50 +0200
http://bitbucket.org/pypy/pypy/changeset/e8a74e18fc6e/

Log:    missing update pack of nodes scheduled some nodes as a non packed
        operation (wrong obviously)

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
@@ -939,9 +939,11 @@
             return False, 0
         #
         c = (self.constant - other.constant)
-        if isinstance(self.var, Const) and isinstance(other.var, Const):
-            return True, (self.var.value - other.var.value)
-        if self.var.same_box(other.var):
+        svar = self.var
+        ovar = other.var
+        if isinstance(svar, ConstInt) and isinstance(ovar, ConstInt):
+            return True, (svar.getint() - ovar.getint())
+        if svar.same_box(ovar):
             return True, c
         return False, 0
 
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
@@ -83,9 +83,9 @@
         for dep in node.provides()[:]: # COPY
             to = dep.to
             node.remove_edge_to(to)
+            nodes = self.schedulable_nodes
             if not to.emitted and to.depends_count() == 0:
                 # sorts them by priority
-                nodes = self.schedulable_nodes
                 i = len(nodes)-1
                 while i >= 0:
                     itnode = nodes[i]
@@ -97,7 +97,7 @@
                         # if they have the same priority, sort them
                         # using the original position in the trace
                         if itnode.getindex() < to.getindex():
-                            nodes.insert(i+1, to)
+                            nodes.insert(i, to)
                             break
                     i -= 1
                 else:
@@ -821,13 +821,11 @@
     """
     def __init__(self, ops, input_type, output_type):
         self.operations = ops
-        for i,node in enumerate(self.operations):
-            node.pack = self
-            node.pack_position = i
         self.accum = None
         self.input_type = input_type
         self.output_type = output_type
         assert self.input_type is not None or self.output_type is not None
+        self.update_pack_of_nodes()
 
     def opcount(self):
         return len(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
@@ -1072,16 +1072,16 @@
         [p36, i28, p9, i37, p14, f34, p12, p38, f35, p39, i40, i41, p42, i43, 
i44, i21, i4, i0, i18]
         guard_not_invalidated() [p38, p12, p9, p14, p39, i37, i44, f35, i40, 
p42, i43, f34, i28, p36, i41]
         i50 = int_add(i28, 1) 
-        i46 = int_add(i44, 8) 
         i48 = int_add(i41, 8) 
         i51 = int_add(i37, 8) 
+        i54 = int_add(i41, 16) 
+        i46 = int_add(i44, 8) 
+        i56 = int_add(i37, 16) 
         i52 = int_ge(i50, i18) 
         i637 = int_add(i28, 2)
         i638 = int_ge(i637, i18)
         guard_false(i638) [p38, p12, p9, p14, p39, i37, i44, f35, i40, p42, 
i43, f34, i28, p36, i41]
         i55 = int_add(i44, 16) 
-        i54 = int_add(i41, 16) 
-        i56 = int_add(i37, 16) 
         i629 = int_add(i28, 2)
         i57 = int_ge(i637, i18) 
         v61 = vec_raw_load(i21, i44, 2, descr=floatarraydescr) 
@@ -1173,10 +1173,10 @@
         v233 = vec_cast_singlefloat_to_float(v232)
         v234 = vec_int_unpack(v232, 2, 2)
         v235 = vec_cast_singlefloat_to_float(v234)
+        v237 = vec_float_add(v231, v235)
+        v239 = vec_cast_float_to_singlefloat(v237)
         v236 = vec_float_add(v229, v233)
-        v237 = vec_float_add(v231, v235)
         v238 = vec_cast_float_to_singlefloat(v236)
-        v239 = vec_cast_float_to_singlefloat(v237)
         v240 = vec_float_pack(v238, v239, 2, 2)
         vec_raw_store(p2, i4, v240, descr=singlefloatarraydescr)
         jump(p0, p1, p2, i207, i500)
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
@@ -409,13 +409,12 @@
                         # do not inc in rightmost_match_leftmost
                         # this could miss some pack
                         j += 1
-                # set for each node to which pack it belongs
-                pack = self.packset.packs[i]
-                pack.update_pack_of_nodes()
+                i += 1
                 j = 0
-                i += 1
             if len_before == len(self.packset.packs):
                 break
+        for pack in self.packset.packs:
+            pack.update_pack_of_nodes()
 
 
         if not we_are_translated():
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to