re PR tree-optimization/42205 ([graphite] internal compiler error: verify_ssa failed...
authorSebastian Pop <sebastian.pop@amd.com>
Wed, 23 Dec 2009 07:50:22 +0000 (07:50 +0000)
committerSebastian Pop <spop@gcc.gnu.org>
Wed, 23 Dec 2009 07:50:22 +0000 (07:50 +0000)
Fix PR42205.

2009-12-17  Sebastian Pop  <sebastian.pop@amd.com>

PR middle-end/42205
* graphite-sese-to-poly.c (translate_scalar_reduction_to_array_for_stmt):
Insert the reduction copy in the same block as the phi node.
(follow_ssa_with_commutative_ops): Handle GIMPLE_NOPs.

* testsuite/gcc.dg/graphite/pr42205-1.c: New.
* testsuite/gcc.dg/graphite/pr42205-2.c: New.

From-SVN: r155419

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

index 232e13d7696b40812cd346c543b354af1df8de76..ac1c4d6cfabd56cc989f77d4aebac063fc143f48 100644 (file)
@@ -1,3 +1,21 @@
+2009-12-17  Sebastian Pop  <sebastian.pop@amd.com>
+
+       PR middle-end/42205
+       * graphite-sese-to-poly.c (translate_scalar_reduction_to_array_for_stmt):
+       Insert the reduction copy in the same block as the phi node.
+       (follow_ssa_with_commutative_ops): Handle GIMPLE_NOPs.
+
+       * testsuite/gcc.dg/graphite/pr42205-1.c: New.
+       * testsuite/gcc.dg/graphite/pr42205-2.c: New.
+
+2009-12-17  Sebastian Pop  <sebastian.pop@amd.com>
+
+       PR middle-end/42221
+       * sese.c (expand_scalar_variables_expr): Follow the SSA links into
+       the array indexing of ADDR_EXPRs.
+
+       * testsuite/gcc.dg/graphite/pr42221.c: New.
+
 2009-12-17  Sebastian Pop  <sebastian.pop@amd.com>
 
        PR middle-end/42178
index 370bbff5ddd6e8fe9e931e7fd223cc51f17a5337..7b61ed72a21c93f8e9c846727a43aff7623bd9dc 100644 (file)
@@ -2498,6 +2498,9 @@ follow_ssa_with_commutative_ops (tree arg, tree lhs)
 
   stmt = SSA_NAME_DEF_STMT (arg);
 
+  if (gimple_code (stmt) == GIMPLE_NOP)
+    return NULL;
+
   if (gimple_code (stmt) == GIMPLE_PHI)
     {
       if (phi_contains_arg (stmt, lhs))
@@ -2674,13 +2677,13 @@ static void
 translate_scalar_reduction_to_array_for_stmt (tree red, gimple stmt,
                                              gimple loop_phi)
 {
-  basic_block bb = gimple_bb (stmt);
-  gimple_stmt_iterator insert_gsi = gsi_after_labels (bb);
+  gimple_stmt_iterator insert_gsi = gsi_after_labels (gimple_bb (loop_phi));
   tree res = gimple_phi_result (loop_phi);
   gimple assign = gimple_build_assign (res, red);
 
   gsi_insert_before (&insert_gsi, assign, GSI_SAME_STMT);
 
+  insert_gsi = gsi_after_labels (gimple_bb (stmt));
   assign = gimple_build_assign (red, gimple_assign_lhs (stmt));
   insert_gsi = gsi_for_stmt (stmt);
   gsi_insert_after (&insert_gsi, assign, GSI_SAME_STMT);
diff --git a/gcc/testsuite/gcc.dg/graphite/pr42205-1.c b/gcc/testsuite/gcc.dg/graphite/pr42205-1.c
new file mode 100644 (file)
index 0000000..413b9f7
--- /dev/null
@@ -0,0 +1,17 @@
+/* { dg-options "-O1 -ffast-math -floop-interchange" } */
+
+int adler32(int adler, char *buf, int n)
+{
+  int sum = 0;
+  do {
+     adler += buf[0];
+     sum += adler;
+     adler += buf[1];
+     sum += adler;
+     adler += buf[2];
+     sum += adler;
+     adler += buf[3];
+     sum += adler;
+  } while (--n);
+  return adler | (sum << 16);
+}
diff --git a/gcc/testsuite/gcc.dg/graphite/pr42205-2.c b/gcc/testsuite/gcc.dg/graphite/pr42205-2.c
new file mode 100644 (file)
index 0000000..595cedb
--- /dev/null
@@ -0,0 +1,11 @@
+/* { dg-options "-O1 -funsafe-math-optimizations -floop-interchange" } */
+
+double f(double x)
+{
+  double y = 0.0;
+  int i;
+  for (i = 0; i < 8; i++) {
+    y += x * i;
+  }
+  return y;
+}