diff options
author | Jakub Jelinek <jakub@redhat.com> | 2017-07-28 09:11:51 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2017-07-28 09:11:51 +0200 |
commit | d0ee55a1f7ce56b20e9d52904da026a316241930 (patch) | |
tree | 77c6765ddf61786720242bb3a9d02a72472e690f /gcc | |
parent | 1ce75e415688d0f0bec52cdd8d0fcdaccb5efac5 (diff) | |
download | gcc-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/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/pr81578.c | 12 | ||||
-rw-r--r-- | gcc/tree-parloops.c | 34 |
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); |