aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2017-07-28 09:11:51 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2017-07-28 09:11:51 +0200
commitd0ee55a1f7ce56b20e9d52904da026a316241930 (patch)
tree77c6765ddf61786720242bb3a9d02a72472e690f /gcc
parent1ce75e415688d0f0bec52cdd8d0fcdaccb5efac5 (diff)
downloadgcc-d0ee55a1f7ce56b20e9d52904da026a316241930.zip
gcc-d0ee55a1f7ce56b20e9d52904da026a316241930.tar.gz
gcc-d0ee55a1f7ce56b20e9d52904da026a316241930.tar.bz2
re PR tree-optimization/81578 (ICE in omp_reduction_init_op)
PR tree-optimization/81578 * tree-parloops.c (build_new_reduction): Bail out if reduction_code isn't one of the standard OpenMP reductions. Move the details printing after that decision. * gcc.dg/pr81578.c: New test. From-SVN: r250651
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/pr81578.c12
-rw-r--r--gcc/tree-parloops.c34
4 files changed, 49 insertions, 9 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index be98abe..b2aec1a 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2017-07-28 Jakub Jelinek <jakub@redhat.com>
+
+ PR tree-optimization/81578
+ * tree-parloops.c (build_new_reduction): Bail out if
+ reduction_code isn't one of the standard OpenMP reductions.
+ Move the details printing after that decision.
+
2017-07-27 Peter Bergner <bergner@vnet.ibm.com>
* config/rs6000/predicates.md (volatile_mem_operand): Remove code
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 0fa0da8..19f1070 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2017-07-28 Jakub Jelinek <jakub@redhat.com>
+
+ PR tree-optimization/81578
+ * gcc.dg/pr81578.c: New test.
+
2017-07-28 Richard Biener <rguenther@suse.de>
PR tree-optimization/81573
diff --git a/gcc/testsuite/gcc.dg/pr81578.c b/gcc/testsuite/gcc.dg/pr81578.c
new file mode 100644
index 0000000..a6ef77f
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr81578.c
@@ -0,0 +1,12 @@
+/* PR tree-optimization/81578 */
+/* { dg-do compile { target pthread } } */
+/* { dg-options "-O2 -ftree-parallelize-loops=2" } */
+
+int
+foo (int *x)
+{
+ int i, r = 1;
+ for (i = 0; i != 1024; i++)
+ r *= x[i] < 0;
+ return r;
+}
diff --git a/gcc/tree-parloops.c b/gcc/tree-parloops.c
index 470964b..538932e 100644
--- a/gcc/tree-parloops.c
+++ b/gcc/tree-parloops.c
@@ -2475,23 +2475,39 @@ build_new_reduction (reduction_info_table_type *reduction_list,
gcc_assert (reduc_stmt);
- if (dump_file && (dump_flags & TDF_DETAILS))
- {
- fprintf (dump_file,
- "Detected reduction. reduction stmt is:\n");
- print_gimple_stmt (dump_file, reduc_stmt, 0);
- fprintf (dump_file, "\n");
- }
-
if (gimple_code (reduc_stmt) == GIMPLE_PHI)
{
tree op1 = PHI_ARG_DEF (reduc_stmt, 0);
gimple *def1 = SSA_NAME_DEF_STMT (op1);
reduction_code = gimple_assign_rhs_code (def1);
}
-
else
reduction_code = gimple_assign_rhs_code (reduc_stmt);
+ /* Check for OpenMP supported reduction. */
+ switch (reduction_code)
+ {
+ case PLUS_EXPR:
+ case MULT_EXPR:
+ case MAX_EXPR:
+ case MIN_EXPR:
+ case BIT_IOR_EXPR:
+ case BIT_XOR_EXPR:
+ case BIT_AND_EXPR:
+ case TRUTH_OR_EXPR:
+ case TRUTH_XOR_EXPR:
+ case TRUTH_AND_EXPR:
+ break;
+ default:
+ return;
+ }
+
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ {
+ fprintf (dump_file,
+ "Detected reduction. reduction stmt is:\n");
+ print_gimple_stmt (dump_file, reduc_stmt, 0);
+ fprintf (dump_file, "\n");
+ }
new_reduction = XCNEW (struct reduction_info);