summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorvries <vries@138bc75d-0d04-0410-961f-82ee72b054a4>2016-01-10 09:12:03 +0000
committervries <vries@138bc75d-0d04-0410-961f-82ee72b054a4>2016-01-10 09:12:03 +0000
commitd95e185643200d3bf39034922eab07b80c2b226d (patch)
tree29b0150b3f71ebf26700dd5944e72b121d533cb0
parent40bcf2f4533dc89ca91d68cb8faaf998abecd479 (diff)
downloadgcc-d95e185643200d3bf39034922eab07b80c2b226d.tar.gz
Only allow single exit phi for reduction in try_create_reduction_list
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. * gcc.dg/autopar/pr69039.c: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@232196 138bc75d-0d04-0410-961f-82ee72b054a4
-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 ");