diff options
author | Thomas Schwinge <thomas@codesourcery.com> | 2017-05-23 17:47:32 +0200 |
---|---|---|
committer | Thomas Schwinge <tschwinge@gcc.gnu.org> | 2017-05-23 17:47:32 +0200 |
commit | fd71a9a24da0a52b9a752b4a7d4a6f71d96f5c29 (patch) | |
tree | 97c97af78e8ae6ff6ebb3d425ad65855616b9a43 /gcc/omp-offload.c | |
parent | 464d01188e46ccdb19b4783c5d28ef6bc72d32f9 (diff) | |
download | gcc-fd71a9a24da0a52b9a752b4a7d4a6f71d96f5c29.zip gcc-fd71a9a24da0a52b9a752b4a7d4a6f71d96f5c29.tar.gz gcc-fd71a9a24da0a52b9a752b4a7d4a6f71d96f5c29.tar.bz2 |
OpenACC 2.5 kernels construct: num_gangs, num_workers, vector_length clauses
gcc/c/
* c-parser.c (OACC_KERNELS_CLAUSE_MASK): Add
"PRAGMA_OACC_CLAUSE_NUM_GANGS", "PRAGMA_OACC_CLAUSE_NUM_WORKERS",
"VECTOR_LENGTH".
gcc/cp/
* parser.c (OACC_KERNELS_CLAUSE_MASK): Add
"PRAGMA_OACC_CLAUSE_NUM_GANGS", "PRAGMA_OACC_CLAUSE_NUM_WORKERS",
"VECTOR_LENGTH".
gcc/fortran/
* openmp.c (OACC_KERNELS_CLAUSES): Add "OMP_CLAUSE_NUM_GANGS",
"OMP_CLAUSE_NUM_WORKERS", "OMP_CLAUSE_VECTOR_LENGTH".
gcc/
* omp-offload.c (execute_oacc_device_lower): Remove the
parallelism dimensions function attributes for unparallelized
OpenACC kernels constructs.
gcc/testsuite/
* c-c++-common/goacc/parallel-dims-1.c: Update.
* c-c++-common/goacc/parallel-dims-2.c: Likewise.
* c-c++-common/goacc/routine-1.c: Likewise.
* c-c++-common/goacc/uninit-dim-clause.c: Likewise.
* g++.dg/goacc/template.C: Likewise.
* gfortran.dg/goacc/kernels-tree.f95: Likewise.
* gfortran.dg/goacc/routine-3.f90: Likewise.
* gfortran.dg/goacc/sie.f95: Likewise.
* gfortran.dg/goacc/uninit-dim-clause.f95: Likewise.
libgomp/
* testsuite/libgomp.oacc-c-c++-common/kernels-loop-2.c: Update.
* testsuite/libgomp.oacc-c-c++-common/parallel-dims.c: Likewise.
* testsuite/libgomp.oacc-fortran/kernels-loop-2.f95: Likewise.
From-SVN: r248370
Diffstat (limited to 'gcc/omp-offload.c')
-rw-r--r-- | gcc/omp-offload.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/gcc/omp-offload.c b/gcc/omp-offload.c index f02b4f8..54a4e90 100644 --- a/gcc/omp-offload.c +++ b/gcc/omp-offload.c @@ -1451,6 +1451,15 @@ execute_oacc_device_lower () = (lookup_attribute ("oacc kernels parallelized", DECL_ATTRIBUTES (current_function_decl)) != NULL); + /* Unparallelized OpenACC kernels constructs must get launched as 1 x 1 x 1 + kernels, so remove the parallelism dimensions function attributes + potentially set earlier on. */ + if (is_oacc_kernels && !is_oacc_kernels_parallelized) + { + oacc_set_fn_attrib (current_function_decl, NULL, NULL); + attrs = oacc_get_fn_attrib (current_function_decl); + } + /* Discover, partition and process the loops. */ oacc_loop *loops = oacc_loop_discovery (); int fn_level = oacc_fn_attrib_level (attrs); |