OSDN Git Service

2012-02-15 Tobias Grosser <grosser@fim.uni-passau.de>
authorrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 15 Feb 2012 12:20:10 +0000 (12:20 +0000)
committerrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 15 Feb 2012 12:20:10 +0000 (12:20 +0000)
PR tree-optimization/50561
* graphite-flattening.c (lst_project_loop): Do not
remove old scattering dimensions after flattening.
(lst_do_flatten): Likewise.

* gcc.dg/graphite/pr50561.c: New testcase.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@184265 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/graphite-flattening.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/graphite/pr50561.c [new file with mode: 0644]

index 1d88845..1e3d36f 100644 (file)
@@ -1,3 +1,10 @@
+2012-02-15  Tobias Grosser <grosser@fim.uni-passau.de>
+
+       PR tree-optimization/50561
+       * graphite-flattening.c (lst_project_loop): Do not
+       remove old scattering dimensions after flattening.
+       (lst_do_flatten): Likewise.
+
 2012-02-15  Georg-Johann Lay  <avr@gjlay.de>
 
        * doc/extend.texi (AVR Built-in Functions): Remove doc for
index ccd0f5f..33f25e0 100644 (file)
@@ -277,12 +277,26 @@ lst_project_loop (lst_p outer, lst_p inner, mpz_t stride)
       ppl_delete_Linear_Expression (expr);
 
       /* Remove inner loop and the static schedule of its body.  */
-      ds = XNEWVEC (ppl_dimension_type, 2);
-      ds[0] = inner_dim;
-      ds[1] = inner_dim + 1;
-      ppl_Polyhedron_remove_space_dimensions (poly, ds, 2);
-      PBB_NB_SCATTERING_TRANSFORM (pbb) -= 2;
-      free (ds);
+      /* FIXME: As long as we use PPL we are not able to remove the old
+        scattering dimensions.  The reason is that these dimensions are not
+        entirely unused.  They are not necessary as part of the scheduling
+        vector, as the earlier dimensions already unambiguously define the
+        execution time, however they may still be needed to carry modulo
+        constraints as introduced e.g. by strip mining.  The correct solution
+        would be to project these dimensions out of the scattering polyhedra.
+        In case they are still required to carry modulo constraints they should be kept
+        internally as existentially quantified dimensions.  PPL does only support
+         projection of rational polyhedra, however in this case we need an integer
+        projection. With isl this will be trivial to implement.  For now we just
+        leave the dimensions. This is a little ugly, but should be correct.  */
+      if (0) {
+       ds = XNEWVEC (ppl_dimension_type, 2);
+       ds[0] = inner_dim;
+       ds[1] = inner_dim + 1;
+       ppl_Polyhedron_remove_space_dimensions (poly, ds, 2);
+       PBB_NB_SCATTERING_TRANSFORM (pbb) -= 2;
+       free (ds);
+      }
     }
 
   mpz_clear (x);
@@ -412,7 +426,21 @@ lst_do_flatten (lst_p lst)
     if (LST_LOOP_P (l))
       {
        res |= lst_flatten_loop (l, zero);
-       remove_unused_scattering_dimensions (l);
+
+       /* FIXME: As long as we use PPL we are not able to remove the old
+          scattering dimensions.  The reason is that these dimensions are not
+          entirely unused.  They are not necessary as part of the scheduling
+          vector, as the earlier dimensions already unambiguously define the
+          execution time, however they may still be needed to carry modulo
+          constraints as introduced e.g. by strip mining.  The correct solution
+          would be to project these dimensions out of the scattering polyhedra.
+          In case they are still required to carry modulo constraints they should be kept
+          internally as existentially quantified dimensions.  PPL does only support
+           projection of rational polyhedra, however in this case we need an integer
+          projection. With isl this will be trivial to implement.  For now we just
+          leave the dimensions. This is a little ugly, but should be correct.  */
+       if (0)
+         remove_unused_scattering_dimensions (l);
       }
 
   lst_update_scattering (lst);
index b0e7c45..64bdac5 100644 (file)
@@ -1,3 +1,8 @@
+2012-02-15  Tobias Grosser <grosser@fim.uni-passau.de>
+
+       PR tree-optimization/50561
+       * gcc.dg/graphite/pr50561.c: New testcase.
+
 2012-02-15  Georg-Johann Lay  <avr@gjlay.de>
 
        * gcc.target/avr/torture/builtin_insert_bits-1.c: New test.
diff --git a/gcc/testsuite/gcc.dg/graphite/pr50561.c b/gcc/testsuite/gcc.dg/graphite/pr50561.c
new file mode 100644 (file)
index 0000000..70c6bbc
--- /dev/null
@@ -0,0 +1,9 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -floop-flatten -floop-strip-mine" } */
+
+void f (unsigned *s)
+{
+  int n;
+  for (n = 0; n < 256; n++)
+    s[n] = 0;
+}