]> git.ipfire.org Git - people/ms/gcc.git/commit
OpenMP: Support reverse offload (middle end part)
authorTobias Burnus <tobias@codesourcery.com>
Fri, 26 Aug 2022 10:12:25 +0000 (12:12 +0200)
committerTobias Burnus <tobias@codesourcery.com>
Fri, 26 Aug 2022 10:12:25 +0000 (12:12 +0200)
commitd6621a2f3176dd6a593d4f5fa7f85db0234b40d2
tree422a2ee9ee9aa68b26785ec326ad3312ff5e06f9
parent0c2d6aa1be2ea85e751852834986ae52d58134d3
OpenMP: Support reverse offload (middle end part)

gcc/ChangeLog:

* internal-fn.cc (expand_GOMP_TARGET_REV): New.
* internal-fn.def (GOMP_TARGET_REV): New.
* lto-cgraph.cc (lto_output_node, verify_node_partition): Mark
'omp target device_ancestor_host' as in_other_partition and don't
error if absent.
* omp-low.cc (create_omp_child_function): Mark as 'noclone'.
* omp-expand.cc (expand_omp_target): For reverse offload, remove
sorry, use device = GOMP_DEVICE_HOST_FALLBACK and create
empty-body nohost function.
* omp-offload.cc (execute_omp_device_lower): Handle
IFN_GOMP_TARGET_REV.
(pass_omp_target_link::execute): For ACCEL_COMPILER, don't
nullify fn argument for reverse offload

libgomp/ChangeLog:

* libgomp.texi (OpenMP 5.0): Mark 'ancestor' as implemented but
refer to 'requires'.
* testsuite/libgomp.c-c++-common/reverse-offload-1-aux.c: New test.
* testsuite/libgomp.c-c++-common/reverse-offload-1.c: New test.
* testsuite/libgomp.fortran/reverse-offload-1-aux.f90: New test.
* testsuite/libgomp.fortran/reverse-offload-1.f90: New test.

gcc/testsuite/ChangeLog:

* c-c++-common/gomp/reverse-offload-1.c: Remove dg-sorry.
* c-c++-common/gomp/target-device-ancestor-4.c: Likewise.
* gfortran.dg/gomp/target-device-ancestor-4.f90: Likewise.
* gfortran.dg/gomp/target-device-ancestor-5.f90: Likewise.
* c-c++-common/goacc/classify-kernels-parloops.c: Add 'noclone' to
scan-tree-dump-times.
* c-c++-common/goacc/classify-kernels-unparallelized-parloops.c:
Likewise.
* c-c++-common/goacc/classify-kernels-unparallelized.c: Likewise.
* c-c++-common/goacc/classify-kernels.c: Likewise.
* c-c++-common/goacc/classify-parallel.c: Likewise.
* c-c++-common/goacc/classify-serial.c: Likewise.
* c-c++-common/goacc/kernels-counter-vars-function-scope.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-data-2.c: Likewise.
* c-c++-common/goacc/kernels-loop-data-enter-exit-2.c: Likewise.
* c-c++-common/goacc/kernels-loop-data-enter-exit.c: Likewise.
* c-c++-common/goacc/kernels-loop-data-update.c: Likewise.
* c-c++-common/goacc/kernels-loop-data.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-parallel-loop-data-enter-exit.c: Likewise.
* gfortran.dg/goacc/classify-kernels-parloops.f95: Likewise.
* gfortran.dg/goacc/classify-kernels-unparallelized-parloops.f95:
Likewise.
* gfortran.dg/goacc/classify-kernels-unparallelized.f95: Likewise.
* gfortran.dg/goacc/classify-kernels.f95: Likewise.
* gfortran.dg/goacc/classify-parallel.f95: Likewise.
* gfortran.dg/goacc/classify-serial.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.
* gfortran.dg/goacc/kernels-parallel-loop-data-enter-exit.f95: Likewise.
51 files changed:
gcc/internal-fn.cc
gcc/internal-fn.def
gcc/lto-cgraph.cc
gcc/omp-expand.cc
gcc/omp-low.cc
gcc/omp-offload.cc
gcc/testsuite/c-c++-common/goacc/classify-kernels-parloops.c
gcc/testsuite/c-c++-common/goacc/classify-kernels-unparallelized-parloops.c
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/classify-parallel.c
gcc/testsuite/c-c++-common/goacc/classify-serial.c
gcc/testsuite/c-c++-common/goacc/kernels-counter-vars-function-scope.c
gcc/testsuite/c-c++-common/goacc/kernels-loop-2.c
gcc/testsuite/c-c++-common/goacc/kernels-loop-3.c
gcc/testsuite/c-c++-common/goacc/kernels-loop-data-2.c
gcc/testsuite/c-c++-common/goacc/kernels-loop-data-enter-exit-2.c
gcc/testsuite/c-c++-common/goacc/kernels-loop-data-enter-exit.c
gcc/testsuite/c-c++-common/goacc/kernels-loop-data-update.c
gcc/testsuite/c-c++-common/goacc/kernels-loop-data.c
gcc/testsuite/c-c++-common/goacc/kernels-loop-g.c
gcc/testsuite/c-c++-common/goacc/kernels-loop-mod-not-zero.c
gcc/testsuite/c-c++-common/goacc/kernels-loop-n.c
gcc/testsuite/c-c++-common/goacc/kernels-loop-nest.c
gcc/testsuite/c-c++-common/goacc/kernels-loop.c
gcc/testsuite/c-c++-common/goacc/kernels-one-counter-var.c
gcc/testsuite/c-c++-common/goacc/kernels-parallel-loop-data-enter-exit.c
gcc/testsuite/c-c++-common/gomp/reverse-offload-1.c
gcc/testsuite/c-c++-common/gomp/target-device-ancestor-4.c
gcc/testsuite/gfortran.dg/goacc/classify-kernels-parloops.f95
gcc/testsuite/gfortran.dg/goacc/classify-kernels-unparallelized-parloops.f95
gcc/testsuite/gfortran.dg/goacc/classify-kernels-unparallelized.f95
gcc/testsuite/gfortran.dg/goacc/classify-kernels.f95
gcc/testsuite/gfortran.dg/goacc/classify-parallel.f95
gcc/testsuite/gfortran.dg/goacc/classify-serial.f95
gcc/testsuite/gfortran.dg/goacc/kernels-loop-2.f95
gcc/testsuite/gfortran.dg/goacc/kernels-loop-data-2.f95
gcc/testsuite/gfortran.dg/goacc/kernels-loop-data-enter-exit-2.f95
gcc/testsuite/gfortran.dg/goacc/kernels-loop-data-enter-exit.f95
gcc/testsuite/gfortran.dg/goacc/kernels-loop-data-update.f95
gcc/testsuite/gfortran.dg/goacc/kernels-loop-data.f95
gcc/testsuite/gfortran.dg/goacc/kernels-loop-n.f95
gcc/testsuite/gfortran.dg/goacc/kernels-loop.f95
gcc/testsuite/gfortran.dg/goacc/kernels-parallel-loop-data-enter-exit.f95
gcc/testsuite/gfortran.dg/gomp/target-device-ancestor-4.f90
gcc/testsuite/gfortran.dg/gomp/target-device-ancestor-5.f90
libgomp/libgomp.texi
libgomp/testsuite/libgomp.c-c++-common/reverse-offload-1-aux.c [new file with mode: 0644]
libgomp/testsuite/libgomp.c-c++-common/reverse-offload-1.c [new file with mode: 0644]
libgomp/testsuite/libgomp.fortran/reverse-offload-1-aux.f90 [new file with mode: 0644]
libgomp/testsuite/libgomp.fortran/reverse-offload-1.f90 [new file with mode: 0644]