]> gcc.gnu.org Git - gcc.git/commit
OpenACC 'kernels' decomposition: Mark variables used in synthesized data clauses...
authorThomas Schwinge <thomas@codesourcery.com>
Thu, 16 Dec 2021 21:02:37 +0000 (22:02 +0100)
committerThomas Schwinge <thomas@codesourcery.com>
Thu, 13 Jan 2022 09:42:17 +0000 (10:42 +0100)
commit9b32c1669aad5459dd053424f9967011348add83
tree75b0716cca2cbd3fe6b09190ba32f3cca10da61b
parent862e5f398b7e0a62460e8bc3fe4045e9da6cbf3b
OpenACC 'kernels' decomposition: Mark variables used in synthesized data clauses as addressable [PR100280]

... as otherwise 'gcc/omp-low.c:lower_omp_target' has to create a temporary:

    13073 else if (is_gimple_reg (var))
    13074   {
    13075     gcc_assert (offloaded);
    13076     tree avar = create_tmp_var (TREE_TYPE (var));
    13077     mark_addressable (avar);

..., which (a) is only implemented for actualy *offloaded* regions (but not
data regions), and (b) the subsequently synthesized code for writing to and
later reading back from the temporary fundamentally conflicts with OpenACC
'async' (as used by OpenACC 'kernels' decomposition).  That's all not trivial
to make work, so let's just avoid this case.

gcc/
PR middle-end/100280
* omp-oacc-kernels-decompose.cc (maybe_build_inner_data_region):
Mark variables used in synthesized data clauses as addressable.
gcc/testsuite/
PR middle-end/100280
* c-c++-common/goacc/kernels-decompose-pr100280-1.c: New.
* c-c++-common/goacc/classify-kernels-parloops.c: Likewise.
* c-c++-common/goacc/classify-kernels-unparallelized-parloops.c:
Likewise.
* c-c++-common/goacc/classify-kernels-unparallelized.c: Test
'--param openacc-kernels=decompose'.
* c-c++-common/goacc/classify-kernels.c: Likewise.
* c-c++-common/goacc/kernels-decompose-2.c: Update.
* c-c++-common/goacc/kernels-decompose-ice-1.c: Remove.
* c-c++-common/goacc/kernels-decompose-ice-2.c: Likewise.
* gfortran.dg/goacc/classify-kernels-parloops.f95: New.
* gfortran.dg/goacc/classify-kernels-unparallelized-parloops.f95:
Likewise.
* gfortran.dg/goacc/classify-kernels-unparallelized.f95: Test
'--param openacc-kernels=decompose'.
* gfortran.dg/goacc/classify-kernels.f95: Likewise.
libgomp/
PR middle-end/100280
* testsuite/libgomp.oacc-c-c++-common/declare-vla-kernels-decompose-ice-1.c:
Update.
* testsuite/libgomp.oacc-c-c++-common/f-asyncwait-1.c: Likewise.
* testsuite/libgomp.oacc-c-c++-common/kernels-decompose-1.c:
Likewise.

Suggested-by: Julian Brown <julian@codesourcery.com>
16 files changed:
gcc/omp-oacc-kernels-decompose.cc
gcc/testsuite/c-c++-common/goacc/classify-kernels-parloops.c [new file with mode: 0644]
gcc/testsuite/c-c++-common/goacc/classify-kernels-unparallelized-parloops.c [new file with mode: 0644]
gcc/testsuite/c-c++-common/goacc/classify-kernels-unparallelized.c
gcc/testsuite/c-c++-common/goacc/classify-kernels.c
gcc/testsuite/c-c++-common/goacc/kernels-decompose-2.c
gcc/testsuite/c-c++-common/goacc/kernels-decompose-ice-1.c [deleted file]
gcc/testsuite/c-c++-common/goacc/kernels-decompose-ice-2.c [deleted file]
gcc/testsuite/c-c++-common/goacc/kernels-decompose-pr100280-1.c [new file with mode: 0644]
gcc/testsuite/gfortran.dg/goacc/classify-kernels-parloops.f95 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/goacc/classify-kernels-unparallelized-parloops.f95 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/goacc/classify-kernels-unparallelized.f95
gcc/testsuite/gfortran.dg/goacc/classify-kernels.f95
libgomp/testsuite/libgomp.oacc-c-c++-common/declare-vla-kernels-decompose-ice-1.c
libgomp/testsuite/libgomp.oacc-c-c++-common/f-asyncwait-1.c
libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-decompose-1.c
This page took 0.064798 seconds and 5 git commands to generate.