This patch series is a backport of the OpenACC attach/detach support to the openacc-gcc-8-branch branch. It was previously posted upstream here:
https://gcc.gnu.org/ml/gcc-patches/2018-11/msg00823.html This version of the series has been adjusted to account for features on the branch that are not yet upstream. It also contains improvements to the reference counting behaviour, partially verified using self-checking code (not quite complete, and not yet submitted). Tested (as a series) with offloading to nvptx. I will apply to the openacc-gcc-8-branch shortly. Julian Brown (6): [og8] Host-to-device transfer coalescing & magic offset value self-documentation [og8] Factor out duplicate code in gimplify_scan_omp_clauses [og8] OpenACC 2.6 manual deep copy support (attach/detach) [og8] Interaction of dynamic/multidimensional arrays with attach/detach. [og8] Backport parts of upstream declare-allocate patch [og8] OpenACC refcounting refresh gcc/c/c-parser.c | 15 +- gcc/c/c-typeck.c | 4 + gcc/cp/parser.c | 16 +- gcc/cp/semantics.c | 6 +- gcc/fortran/gfortran.h | 2 + gcc/fortran/openmp.c | 126 ++++-- gcc/fortran/trans-openmp.c | 163 +++----- gcc/gimplify.c | 414 ++++++++++-------- gcc/omp-low.c | 13 +- .../c-c++-common/goacc/deep-copy-multidim.c | 32 ++ gcc/testsuite/c-c++-common/goacc/mdc-1.c | 10 +- gcc/testsuite/gfortran.dg/goacc/data-clauses.f95 | 38 +- gcc/testsuite/gfortran.dg/goacc/derived-types.f90 | 23 +- .../gfortran.dg/goacc/enter-exit-data.f95 | 24 +- .../gfortran.dg/goacc/kernels-alias-3.f95 | 4 +- libgomp/libgomp.h | 30 ++- libgomp/libgomp.map | 10 + libgomp/oacc-mem.c | 459 ++++++++++++-------- libgomp/oacc-parallel.c | 212 ++++++++-- libgomp/openacc.h | 6 + libgomp/target.c | 291 +++++++++++-- .../libgomp.oacc-c-c++-common/context-2.c | 6 +- .../libgomp.oacc-c-c++-common/context-4.c | 6 +- .../libgomp.oacc-c-c++-common/deep-copy-1.c | 24 + .../libgomp.oacc-c-c++-common/deep-copy-2.c | 29 ++ .../libgomp.oacc-c-c++-common/deep-copy-3.c | 34 ++ .../libgomp.oacc-c-c++-common/deep-copy-4.c | 87 ++++ .../libgomp.oacc-c-c++-common/deep-copy-5.c | 81 ++++ .../libgomp.oacc-c-c++-common/deep-copy-6.c | 59 +++ .../libgomp.oacc-c-c++-common/deep-copy-7.c | 42 ++ .../libgomp.oacc-c-c++-common/deep-copy-8.c | 53 +++ libgomp/testsuite/libgomp.oacc-fortran/data-2.f90 | 20 +- .../testsuite/libgomp.oacc-fortran/deep-copy-1.f90 | 35 ++ .../testsuite/libgomp.oacc-fortran/deep-copy-2.f90 | 33 ++ .../testsuite/libgomp.oacc-fortran/deep-copy-3.f90 | 34 ++ .../testsuite/libgomp.oacc-fortran/deep-copy-4.f90 | 49 ++ .../testsuite/libgomp.oacc-fortran/deep-copy-5.f90 | 57 +++ .../testsuite/libgomp.oacc-fortran/deep-copy-6.f90 | 61 +++ .../testsuite/libgomp.oacc-fortran/deep-copy-7.f90 | 89 ++++ .../testsuite/libgomp.oacc-fortran/deep-copy-8.f90 | 41 ++ .../libgomp.oacc-fortran/derived-type-1.f90 | 6 +- .../libgomp.oacc-fortran/non-scalar-data.f90 | 6 +- .../testsuite/libgomp.oacc-fortran/update-2.f90 | 44 +- 43 files changed, 2079 insertions(+), 715 deletions(-) create mode 100644 gcc/testsuite/c-c++-common/goacc/deep-copy-multidim.c create mode 100644 libgomp/testsuite/libgomp.oacc-c-c++-common/deep-copy-1.c create mode 100644 libgomp/testsuite/libgomp.oacc-c-c++-common/deep-copy-2.c create mode 100644 libgomp/testsuite/libgomp.oacc-c-c++-common/deep-copy-3.c create mode 100644 libgomp/testsuite/libgomp.oacc-c-c++-common/deep-copy-4.c create mode 100644 libgomp/testsuite/libgomp.oacc-c-c++-common/deep-copy-5.c create mode 100644 libgomp/testsuite/libgomp.oacc-c-c++-common/deep-copy-6.c create mode 100644 libgomp/testsuite/libgomp.oacc-c-c++-common/deep-copy-7.c create mode 100644 libgomp/testsuite/libgomp.oacc-c-c++-common/deep-copy-8.c create mode 100644 libgomp/testsuite/libgomp.oacc-fortran/deep-copy-1.f90 create mode 100644 libgomp/testsuite/libgomp.oacc-fortran/deep-copy-2.f90 create mode 100644 libgomp/testsuite/libgomp.oacc-fortran/deep-copy-3.f90 create mode 100644 libgomp/testsuite/libgomp.oacc-fortran/deep-copy-4.f90 create mode 100644 libgomp/testsuite/libgomp.oacc-fortran/deep-copy-5.f90 create mode 100644 libgomp/testsuite/libgomp.oacc-fortran/deep-copy-6.f90 create mode 100644 libgomp/testsuite/libgomp.oacc-fortran/deep-copy-7.f90 create mode 100644 libgomp/testsuite/libgomp.oacc-fortran/deep-copy-8.f90