summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/autopar/pr69039.c15
-rw-r--r--gcc/tree-parloops.c8
4 files changed, 34 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 609a6a3eab8..21b47fea579 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2016-01-10 Tom de Vries <tom@codesourcery.com>
+
+ PR tree-optimization/69039
+ * tree-parloops.c (try_create_reduction_list): Only allow single exit
+ phi for reduction.
+
2016-01-09 John David Anglin <danglin@gcc.gnu.org>
PR middle-end/68743
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 4af4374cea6..198f26c3cab 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2016-01-10 Tom de Vries <tom@codesourcery.com>
+
+ PR tree-optimization/69039
+ * gcc.dg/autopar/pr69039.c: New test.
+
2016-01-09 Marek Polacek <polacek@redhat.com>
PR c++/69113
diff --git a/gcc/testsuite/gcc.dg/autopar/pr69039.c b/gcc/testsuite/gcc.dg/autopar/pr69039.c
new file mode 100644
index 00000000000..556f70004e8
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/autopar/pr69039.c
@@ -0,0 +1,15 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -ftree-parallelize-loops=2" } */
+
+unsigned int b;
+
+unsigned int
+fn1 (unsigned int d)
+{
+ int i;
+
+ for (i = 0; i < 1000; i++)
+ b |= d;
+
+ return b;
+}
diff --git a/gcc/tree-parloops.c b/gcc/tree-parloops.c
index 84f18bd8f03..394aba8d121 100644
--- a/gcc/tree-parloops.c
+++ b/gcc/tree-parloops.c
@@ -2595,6 +2595,14 @@ try_create_reduction_list (loop_p loop,
" FAILED: it is not a part of reduction.\n");
return false;
}
+ if (red->keep_res != NULL)
+ {
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ fprintf (dump_file,
+ " FAILED: reduction has multiple exit phis.\n");
+ return false;
+ }
+ red->keep_res = phi;
if (dump_file && (dump_flags & TDF_DETAILS))
{
fprintf (dump_file, "reduction phi is ");