diff options
author | Jakub Jelinek <jakub@redhat.com> | 2018-12-02 13:50:50 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2018-12-02 13:50:50 +0100 |
commit | 4a82df9a389506e2a34aa22d9a751c2be834e238 (patch) | |
tree | 534799a344b40cd1bc6a21703dc1c432caafadfb /gcc/tree-nested.c | |
parent | daa8c1d763c951d2242e1842be80b179f63ebad2 (diff) | |
download | gcc-4a82df9a389506e2a34aa22d9a751c2be834e238.zip gcc-4a82df9a389506e2a34aa22d9a751c2be834e238.tar.gz gcc-4a82df9a389506e2a34aa22d9a751c2be834e238.tar.bz2 |
tree-nested.c (convert_nonlocal_omp_clauses, [...]): Handle OMP_CLAUSE_IN_REDUCTION...
* tree-nested.c (convert_nonlocal_omp_clauses,
convert_local_omp_clauses): Handle OMP_CLAUSE_IN_REDUCTION,
OMP_CLAUSE_TASK_REDUCTION and OMP_CLAUSE__SIMT_ clauses.
(convert_nonlocal_reference_stmt, convert_local_reference_stmt):
Convert clauses for GIMPLE_OMP_TASKGROUP.
* testsuite/libgomp.c/task-reduction-3.c: New test.
From-SVN: r266723
Diffstat (limited to 'gcc/tree-nested.c')
-rw-r--r-- | gcc/tree-nested.c | 28 |
1 files changed, 26 insertions, 2 deletions
diff --git a/gcc/tree-nested.c b/gcc/tree-nested.c index c964b7a..3ab60a7 100644 --- a/gcc/tree-nested.c +++ b/gcc/tree-nested.c @@ -1190,6 +1190,8 @@ convert_nonlocal_omp_clauses (tree *pclauses, struct walk_stmt_info *wi) switch (OMP_CLAUSE_CODE (clause)) { case OMP_CLAUSE_REDUCTION: + case OMP_CLAUSE_IN_REDUCTION: + case OMP_CLAUSE_TASK_REDUCTION: if (OMP_CLAUSE_REDUCTION_PLACEHOLDER (clause)) need_stmts = true; goto do_decl_clause; @@ -1369,6 +1371,7 @@ convert_nonlocal_omp_clauses (tree *pclauses, struct walk_stmt_info *wi) case OMP_CLAUSE__REDUCTEMP_: case OMP_CLAUSE__SIMDUID_: case OMP_CLAUSE__GRIDDIM_: + case OMP_CLAUSE__SIMT_: /* Anything else. */ default: gcc_unreachable (); @@ -1382,6 +1385,8 @@ convert_nonlocal_omp_clauses (tree *pclauses, struct walk_stmt_info *wi) switch (OMP_CLAUSE_CODE (clause)) { case OMP_CLAUSE_REDUCTION: + case OMP_CLAUSE_IN_REDUCTION: + case OMP_CLAUSE_TASK_REDUCTION: if (OMP_CLAUSE_REDUCTION_PLACEHOLDER (clause)) { tree old_context @@ -1548,6 +1553,14 @@ convert_nonlocal_reference_stmt (gimple_stmt_iterator *gsi, bool *handled_ops_p, info->suppress_expansion = save_suppress; break; + case GIMPLE_OMP_TASKGROUP: + save_suppress = info->suppress_expansion; + convert_nonlocal_omp_clauses (gimple_omp_taskgroup_clauses_ptr (stmt), wi); + walk_body (convert_nonlocal_reference_stmt, convert_nonlocal_reference_op, + info, gimple_omp_body_ptr (stmt)); + info->suppress_expansion = save_suppress; + break; + case GIMPLE_OMP_TARGET: if (!is_gimple_omp_offloaded (stmt)) { @@ -1598,7 +1611,6 @@ convert_nonlocal_reference_stmt (gimple_stmt_iterator *gsi, bool *handled_ops_p, case GIMPLE_OMP_SECTION: case GIMPLE_OMP_MASTER: - case GIMPLE_OMP_TASKGROUP: case GIMPLE_OMP_ORDERED: walk_body (convert_nonlocal_reference_stmt, convert_nonlocal_reference_op, info, gimple_omp_body_ptr (stmt)); @@ -1873,6 +1885,8 @@ convert_local_omp_clauses (tree *pclauses, struct walk_stmt_info *wi) switch (OMP_CLAUSE_CODE (clause)) { case OMP_CLAUSE_REDUCTION: + case OMP_CLAUSE_IN_REDUCTION: + case OMP_CLAUSE_TASK_REDUCTION: if (OMP_CLAUSE_REDUCTION_PLACEHOLDER (clause)) need_stmts = true; goto do_decl_clause; @@ -2063,6 +2077,7 @@ convert_local_omp_clauses (tree *pclauses, struct walk_stmt_info *wi) case OMP_CLAUSE__REDUCTEMP_: case OMP_CLAUSE__SIMDUID_: case OMP_CLAUSE__GRIDDIM_: + case OMP_CLAUSE__SIMT_: /* Anything else. */ default: gcc_unreachable (); @@ -2076,6 +2091,8 @@ convert_local_omp_clauses (tree *pclauses, struct walk_stmt_info *wi) switch (OMP_CLAUSE_CODE (clause)) { case OMP_CLAUSE_REDUCTION: + case OMP_CLAUSE_IN_REDUCTION: + case OMP_CLAUSE_TASK_REDUCTION: if (OMP_CLAUSE_REDUCTION_PLACEHOLDER (clause)) { tree old_context @@ -2206,6 +2223,14 @@ convert_local_reference_stmt (gimple_stmt_iterator *gsi, bool *handled_ops_p, info->suppress_expansion = save_suppress; break; + case GIMPLE_OMP_TASKGROUP: + save_suppress = info->suppress_expansion; + convert_local_omp_clauses (gimple_omp_taskgroup_clauses_ptr (stmt), wi); + walk_body (convert_local_reference_stmt, convert_local_reference_op, + info, gimple_omp_body_ptr (stmt)); + info->suppress_expansion = save_suppress; + break; + case GIMPLE_OMP_TARGET: if (!is_gimple_omp_offloaded (stmt)) { @@ -2269,7 +2294,6 @@ convert_local_reference_stmt (gimple_stmt_iterator *gsi, bool *handled_ops_p, case GIMPLE_OMP_SECTION: case GIMPLE_OMP_MASTER: - case GIMPLE_OMP_TASKGROUP: case GIMPLE_OMP_ORDERED: walk_body (convert_local_reference_stmt, convert_local_reference_op, info, gimple_omp_body_ptr (stmt)); |