Author: Richard Plangger <[email protected]>
Branch: vecopt
Changeset: r77970:c853e8ea2f01
Date: 2015-06-09 08:34 +0200
http://bitbucket.org/pypy/pypy/changeset/c853e8ea2f01/

Log:    scheduler emits packs that are interdependent (only within pack and
        marked accum)

diff --git a/rpython/jit/metainterp/logger.py b/rpython/jit/metainterp/logger.py
--- a/rpython/jit/metainterp/logger.py
+++ b/rpython/jit/metainterp/logger.py
@@ -127,7 +127,8 @@
         elif isinstance(arg, BoxFloat):
             return 'f' + str(mv)
         elif isinstance(arg, BoxVector):
-            return 'v%s[%s%d#%d]' % (str(mv), arg.item_type, arg.item_size, 
arg.item_count)
+            return 'v%s[%s%d|%d]' % (str(mv), arg.item_type,
+                                     arg.item_size * 8, arg.item_count)
         elif arg is None:
             return 'None'
         else:
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
@@ -44,9 +44,17 @@
 
     def schedulable(self, candidate):
         if candidate.pack:
-            for node in candidate.pack.operations:
-                if node.depends_count() > 0:
-                    return False
+            pack = candidate.pack
+            if pack.is_accumulating():
+                for node in pack.operations:
+                    for dep in node.depends():
+                        if dep.to.pack is not pack:
+                            return False
+                return True
+            else:
+                for node in candidate.pack.operations:
+                    if node.depends_count() > 0:
+                        return False
         return candidate.depends_count() == 0
 
     def schedule(self, candidate, position):
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
@@ -552,6 +552,8 @@
                     if not dep.because_of(accum):
                         # not quite ... this is not handlable
                         return None
+            # get the original variable
+            accum = lop.getarg(accum_pos)
 
             # in either of the two cases the arguments are mixed,
             # which is not handled currently
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to