diff options
author | Cesar Philippidis <cesar@codesourcery.com> | 2016-04-29 10:42:04 -0700 |
---|---|---|
committer | Cesar Philippidis <cesar@gcc.gnu.org> | 2016-04-29 10:42:04 -0700 |
commit | e7ff0319f3736617c70742d8233d73faad523aa3 (patch) | |
tree | e916d372dc0f2cd85d00c0e3d0572f145a5da73c /gcc/c/c-parser.c | |
parent | e49aacaf3083a99dc266209ed91183e91b11ffad (diff) | |
download | gcc-e7ff0319f3736617c70742d8233d73faad523aa3.zip gcc-e7ff0319f3736617c70742d8233d73faad523aa3.tar.gz gcc-e7ff0319f3736617c70742d8233d73faad523aa3.tar.bz2 |
re PR middle-end/70626 (bogus results in 'acc parallel loop' reductions)
gcc/c-family/
PR middle-end/70626
* c-common.h (c_oacc_split_loop_clauses): Add boolean argument.
* c-omp.c (c_oacc_split_loop_clauses): Use it to duplicate
reduction clauses in acc parallel loops.
gcc/c/
PR middle-end/70626
* c-parser.c (c_parser_oacc_loop): Don't augment mask with
OACC_LOOP_CLAUSE_MASK.
(c_parser_oacc_kernels_parallel): Update call to
c_oacc_split_loop_clauses.
gcc/cp/
PR middle-end/70626
* parser.c (cp_parser_oacc_loop): Don't augment mask with
OACC_LOOP_CLAUSE_MASK.
(cp_parser_oacc_kernels_parallel): Update call to
c_oacc_split_loop_clauses.
gcc/fortran/
PR middle-end/70626
* trans-openmp.c (gfc_trans_oacc_combined_directive): Duplicate
the reduction clause in both parallel and loop directives.
gcc/testsuite/
PR middle-end/70626
* c-c++-common/goacc/combined-reduction.c: New test.
* gfortran.dg/goacc/reduction-2.f95: Add check for kernels reductions.
libgomp/
PR middle-end/70626
* testsuite/libgomp.oacc-c++/template-reduction.C: Adjust test.
* testsuite/libgomp.oacc-c-c++-common/combined-reduction.c: New test.
* testsuite/libgomp.oacc-fortran/combined-reduction.f90: New test.
From-SVN: r235651
Diffstat (limited to 'gcc/c/c-parser.c')
-rw-r--r-- | gcc/c/c-parser.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/gcc/c/c-parser.c b/gcc/c/c-parser.c index 36c44ab..832b8dd 100644 --- a/gcc/c/c-parser.c +++ b/gcc/c/c-parser.c @@ -13828,6 +13828,8 @@ static tree c_parser_oacc_loop (location_t loc, c_parser *parser, char *p_name, omp_clause_mask mask, tree *cclauses, bool *if_p) { + bool is_parallel = ((mask >> PRAGMA_OACC_CLAUSE_REDUCTION) & 1) == 1; + strcat (p_name, " loop"); mask |= OACC_LOOP_CLAUSE_MASK; @@ -13835,7 +13837,7 @@ c_parser_oacc_loop (location_t loc, c_parser *parser, char *p_name, cclauses == NULL); if (cclauses) { - clauses = c_oacc_split_loop_clauses (clauses, cclauses); + clauses = c_oacc_split_loop_clauses (clauses, cclauses, is_parallel); if (*cclauses) *cclauses = c_finish_omp_clauses (*cclauses, false); if (clauses) @@ -13930,8 +13932,6 @@ c_parser_oacc_kernels_parallel (location_t loc, c_parser *parser, if (strcmp (p, "loop") == 0) { c_parser_consume_token (parser); - mask |= OACC_LOOP_CLAUSE_MASK; - tree block = c_begin_omp_parallel (); tree clauses; c_parser_oacc_loop (loc, parser, p_name, mask, &clauses, if_p); |