diff options
author | Thomas Schwinge <thomas@codesourcery.com> | 2017-05-12 11:18:34 +0200 |
---|---|---|
committer | Thomas Schwinge <tschwinge@gcc.gnu.org> | 2017-05-12 11:18:34 +0200 |
commit | b0f271ce56b3a1d3e36c6a24228593f9b8851f8e (patch) | |
tree | e7a1167a4d49115dbd14d780819cc4f8823153e4 /gcc/tree-parloops.c | |
parent | 25651634436238d505c586fd308cdd5b6c5db8f9 (diff) | |
download | gcc-b0f271ce56b3a1d3e36c6a24228593f9b8851f8e.zip gcc-b0f271ce56b3a1d3e36c6a24228593f9b8851f8e.tar.gz gcc-b0f271ce56b3a1d3e36c6a24228593f9b8851f8e.tar.bz2 |
[PR middle-end/69921] Use "oacc kernels parallelized" attribute for parallelized OpenACC kernels
gcc/
PR middle-end/69921
* tree-parloops.c (create_parallel_loop): Set "oacc kernels
parallelized" attribute for parallelized OpenACC kernels.
* omp-offload.c (execute_oacc_device_lower): Use it.
gcc/testsuite/
* c-c++-common/goacc/classify-kernels-unparallelized.c: Adjust.
* c-c++-common/goacc/classify-kernels.c: Likewise.
* c-c++-common/goacc/kernels-counter-vars-function-scope.c:
Likewise.
* c-c++-common/goacc/kernels-double-reduction-n.c: Likewise.
* c-c++-common/goacc/kernels-double-reduction.c: Likewise.
* c-c++-common/goacc/kernels-loop-2.c: Likewise.
* c-c++-common/goacc/kernels-loop-3.c: Likewise.
* c-c++-common/goacc/kernels-loop-g.c: Likewise.
* c-c++-common/goacc/kernels-loop-mod-not-zero.c: Likewise.
* c-c++-common/goacc/kernels-loop-n.c: Likewise.
* c-c++-common/goacc/kernels-loop-nest.c: Likewise.
* c-c++-common/goacc/kernels-loop.c: Likewise.
* c-c++-common/goacc/kernels-one-counter-var.c: Likewise.
* c-c++-common/goacc/kernels-reduction.c: Likewise.
* gfortran.dg/goacc/classify-kernels-unparallelized.f95: Likewise.
* gfortran.dg/goacc/classify-kernels.f95: Likewise.
* gfortran.dg/goacc/kernels-loop-2.f95: Likewise.
* gfortran.dg/goacc/kernels-loop-data-2.f95: Likewise.
* gfortran.dg/goacc/kernels-loop-data-enter-exit-2.f95: Likewise.
* gfortran.dg/goacc/kernels-loop-data-enter-exit.f95: Likewise.
* gfortran.dg/goacc/kernels-loop-data-update.f95: Likewise.
* gfortran.dg/goacc/kernels-loop-data.f95: Likewise.
* gfortran.dg/goacc/kernels-loop-n.f95: Likewise.
* gfortran.dg/goacc/kernels-loop.f95: Likewise.
From-SVN: r247957
Diffstat (limited to 'gcc/tree-parloops.c')
-rw-r--r-- | gcc/tree-parloops.c | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/gcc/tree-parloops.c b/gcc/tree-parloops.c index 6ce9d84..f826154 100644 --- a/gcc/tree-parloops.c +++ b/gcc/tree-parloops.c @@ -2040,19 +2040,20 @@ create_parallel_loop (struct loop *loop, tree loop_fn, tree data, tree cvar, cvar_init, initvar, cvar_next, cvar_base, type; edge exit, nexit, guard, end, e; - /* Prepare the GIMPLE_OMP_PARALLEL statement. */ if (oacc_kernels_p) { gcc_checking_assert (lookup_attribute ("oacc kernels", DECL_ATTRIBUTES (cfun->decl))); - - tree clause = build_omp_clause (loc, OMP_CLAUSE_NUM_GANGS); - OMP_CLAUSE_NUM_GANGS_EXPR (clause) - = build_int_cst (integer_type_node, n_threads); - oacc_set_fn_attrib (cfun->decl, clause, NULL); + /* Indicate to later processing that this is a parallelized OpenACC + kernels construct. */ + DECL_ATTRIBUTES (cfun->decl) + = tree_cons (get_identifier ("oacc kernels parallelized"), + NULL_TREE, DECL_ATTRIBUTES (cfun->decl)); } else { + /* Prepare the GIMPLE_OMP_PARALLEL statement. */ + basic_block bb = loop_preheader_edge (loop)->src; basic_block paral_bb = single_pred (bb); gsi = gsi_last_bb (paral_bb); @@ -2154,7 +2155,8 @@ create_parallel_loop (struct loop *loop, tree loop_fn, tree data, /* Emit GIMPLE_OMP_FOR. */ if (oacc_kernels_p) - /* In combination with the NUM_GANGS on the parallel. */ + /* Parallelized OpenACC kernels constructs use gang parallelism. See also + omp-offload.c:execute_oacc_device_lower. */ t = build_omp_clause (loc, OMP_CLAUSE_GANG); else { |