From 23fab8aee7a9d510c9f451d5f31ed0b9b7b30981 Mon Sep 17 00:00:00 2001 From: Tom de Vries Date: Sun, 10 Jan 2016 09:12:03 +0000 Subject: [PATCH] Only allow single exit phi for reduction in try_create_reduction_list 2016-01-10 Tom de Vries 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. From-SVN: r232196 --- gcc/ChangeLog | 6 ++++++ gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gcc.dg/autopar/pr69039.c | 15 +++++++++++++++ gcc/tree-parloops.c | 8 ++++++++ 4 files changed, 34 insertions(+) create mode 100644 gcc/testsuite/gcc.dg/autopar/pr69039.c 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 + + PR tree-optimization/69039 + * tree-parloops.c (try_create_reduction_list): Only allow single exit + phi for reduction. + 2016-01-09 John David Anglin 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 + + PR tree-optimization/69039 + * gcc.dg/autopar/pr69039.c: New test. + 2016-01-09 Marek Polacek 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 ");