Fix pdr accesses order
authorTom de Vries <tom@codesourcery.com>
Sat, 9 Apr 2016 15:28:24 +0000 (15:28 +0000)
committerTom de Vries <vries@gcc.gnu.org>
Sat, 9 Apr 2016 15:28:24 +0000 (15:28 +0000)
2016-04-09  Tom de Vries  <tom@codesourcery.com>

PR tree-optimization/68953
* graphite-sese-to-poly.c (pdr_add_memory_accesses): Order accesses from
first to last subscript.

* gcc.dg/graphite/pr68953.c: New test.

From-SVN: r234851

gcc/ChangeLog
gcc/graphite-sese-to-poly.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/graphite/pr68953.c [new file with mode: 0644]

index 7f2180d232a7b9f612da0bdf841c9fe405a4d662..8d9a94d61f3ae5e40e7862111eed3eaeb7f2e8bf 100644 (file)
@@ -1,3 +1,9 @@
+2016-04-09  Tom de Vries  <tom@codesourcery.com>
+
+       PR tree-optimization/68953
+       * graphite-sese-to-poly.c (pdr_add_memory_accesses): Order accesses from
+       first to last subscript.
+
 2016-04-09  Jakub Jelinek  <jakub@redhat.com>
 
        PR tree-optimization/70586
index b62789f84c63c570cd392048d72b5f63a95350f8..22a09a1782ff71871d8b408841c1c291982f95c3 100644 (file)
@@ -672,7 +672,7 @@ pdr_add_memory_accesses (isl_map *acc, dr_info &dri)
 
       aff = extract_affine (scop, afn,
                            isl_space_domain (isl_map_get_space (acc)));
-      acc = set_index (acc, i + 1, aff);
+      acc = set_index (acc, nb_subscripts - i , aff);
     }
 
   return isl_map_coalesce (acc);
index fb1ff1eb084715c172929940ab986993707e281c..1b8a9c7015ccab0781b9501095e54599ba219a36 100644 (file)
@@ -1,3 +1,8 @@
+2016-04-09  Tom de Vries  <tom@codesourcery.com>
+
+       PR tree-optimization/68953
+       * gcc.dg/graphite/pr68953.c: New test.
+
 2016-04-09  Dominique d'Humieres  <dominiq@lps.ens.fr>
 
        PR fortran/70592
diff --git a/gcc/testsuite/gcc.dg/graphite/pr68953.c b/gcc/testsuite/gcc.dg/graphite/pr68953.c
new file mode 100644 (file)
index 0000000..12c632d
--- /dev/null
@@ -0,0 +1,30 @@
+/* { dg-do run } */
+/* { dg-options "-O1 -floop-nest-optimize" } */
+
+extern void abort (void);
+
+int yu[4][1] = { { 1 }, { 2 }, { 3 }, { 4 } };
+
+static void __attribute__((noinline,noclone))
+foo (void)
+{
+  int zh, ro;
+
+  for (zh = 0; zh < 2; ++zh)
+    for (ro = 0; ro < 3; ++ro)
+      yu[ro][0] = yu[zh + 1][0];
+}
+
+int
+main (void)
+{
+  foo ();
+
+  if (yu[0][0] != 2
+      || yu[1][0] != 2
+      || yu[2][0] != 2
+      || yu[3][0] != 4)
+    abort ();
+
+  return 0;
+}