Hi, This patch series provides support for OpenACC 2.6's manual deep copy (attach/detach) feature. Many of these patches have been submitted previously, but this series has been rebased and the large deep-copy part proper has been split into several pieces for ease of review.
Tested with offloading to NVPTX. Further commentary (together with links to previous submissions) is provided alongside individual patches, where relevant. Thanks, Julian Julian Brown (13): Use aux struct in libgomp for infrequently-used/API-specific data OpenACC reference count overhaul OpenACC reference count consistency checking Use gomp_map_val for OpenACC host-to-device address translation Factor out duplicate code in gimplify_scan_omp_clauses OpenACC 2.6 deep copy: attach/detach API routines OpenACC 2.6 deep copy: libgomp parts OpenACC 2.6 deep copy: middle-end parts OpenACC 2.6 deep copy: C and C++ front-end parts OpenACC 2.6 deep copy: Fortran front-end parts OpenACC 2.6 deep copy: C and C++ execution tests OpenACC 2.6 deep copy: Fortran execution tests Fortran polymorphic class-type support for OpenACC gcc/c-family/c-common.h | 1 + gcc/c-family/c-omp.c | 33 ++ gcc/c-family/c-pragma.h | 2 + gcc/c/c-parser.c | 53 +- gcc/c/c-typeck.c | 76 ++- gcc/cp/parser.c | 56 +- gcc/cp/semantics.c | 98 +++- gcc/fortran/gfortran.h | 2 + gcc/fortran/openmp.c | 166 ++++-- gcc/fortran/trans-expr.c | 184 +++--- gcc/fortran/trans-openmp.c | 342 ++++++++--- gcc/fortran/trans.h | 8 + gcc/gimplify.c | 514 ++++++++++++----- gcc/omp-low.c | 3 + .../goacc/deep-copy-arrayofstruct.c | 84 +++ gcc/testsuite/c-c++-common/goacc/mdc-1.c | 55 ++ gcc/testsuite/c-c++-common/goacc/mdc-2.c | 62 ++ gcc/testsuite/g++.dg/goacc/mdc.C | 68 +++ .../gfortran.dg/goacc/data-clauses.f95 | 38 +- .../gfortran.dg/goacc/derived-types-2.f90 | 14 + .../gfortran.dg/goacc/derived-types.f90 | 77 +++ .../gfortran.dg/goacc/enter-exit-data.f95 | 24 +- gcc/tree-pretty-print.c | 18 + include/gomp-constants.h | 16 +- libgomp/libgomp.h | 50 +- libgomp/libgomp.map | 10 + libgomp/oacc-init.c | 10 +- libgomp/oacc-mem.c | 544 ++++++++++-------- libgomp/oacc-parallel.c | 35 +- libgomp/openacc.h | 6 + libgomp/target.c | 440 ++++++++++++-- .../libgomp.c-c++-common/unmap-infinity-2.c | 19 + .../testsuite/libgomp.oacc-c++/deep-copy-12.C | 72 +++ .../testsuite/libgomp.oacc-c++/deep-copy-13.C | 72 +++ .../libgomp.oacc-c-c++-common/deep-copy-1.c | 24 + .../libgomp.oacc-c-c++-common/deep-copy-10.c | 53 ++ .../libgomp.oacc-c-c++-common/deep-copy-11.c | 72 +++ .../libgomp.oacc-c-c++-common/deep-copy-14.c | 63 ++ .../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 | 45 ++ .../libgomp.oacc-c-c++-common/deep-copy-8.c | 54 ++ .../libgomp.oacc-c-c++-common/deep-copy-9.c | 53 ++ .../libgomp.oacc-c-c++-common/pr92843-1.c | 1 + .../subset-subarray-mappings-1-r-p.c | 16 - .../unmap-infinity-1.c | 17 + .../libgomp.oacc-fortran/class-ptr-param.f95 | 34 ++ .../libgomp.oacc-fortran/classtypes-1.f95 | 48 ++ .../libgomp.oacc-fortran/classtypes-2.f95 | 106 ++++ .../libgomp.oacc-fortran/deep-copy-1.f90 | 35 ++ .../libgomp.oacc-fortran/deep-copy-2.f90 | 33 ++ .../libgomp.oacc-fortran/deep-copy-3.f90 | 34 ++ .../libgomp.oacc-fortran/deep-copy-4.f90 | 49 ++ .../libgomp.oacc-fortran/deep-copy-5.f90 | 57 ++ .../libgomp.oacc-fortran/deep-copy-6.f90 | 61 ++ .../libgomp.oacc-fortran/deep-copy-7.f90 | 89 +++ .../libgomp.oacc-fortran/deep-copy-8.f90 | 41 ++ .../libgomp.oacc-fortran/derived-type-1.f90 | 28 + .../libgomp.oacc-fortran/derivedtype-1.f95 | 30 + .../libgomp.oacc-fortran/derivedtype-2.f95 | 41 ++ .../libgomp.oacc-fortran/multidim-slice.f95 | 50 ++ .../libgomp.oacc-fortran/update-2.f90 | 284 +++++++++ 65 files changed, 4225 insertions(+), 735 deletions(-) create mode 100644 gcc/testsuite/c-c++-common/goacc/deep-copy-arrayofstruct.c create mode 100644 gcc/testsuite/c-c++-common/goacc/mdc-1.c create mode 100644 gcc/testsuite/c-c++-common/goacc/mdc-2.c create mode 100644 gcc/testsuite/g++.dg/goacc/mdc.C create mode 100644 gcc/testsuite/gfortran.dg/goacc/derived-types-2.f90 create mode 100644 gcc/testsuite/gfortran.dg/goacc/derived-types.f90 create mode 100644 libgomp/testsuite/libgomp.c-c++-common/unmap-infinity-2.c create mode 100644 libgomp/testsuite/libgomp.oacc-c++/deep-copy-12.C create mode 100644 libgomp/testsuite/libgomp.oacc-c++/deep-copy-13.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-10.c create mode 100644 libgomp/testsuite/libgomp.oacc-c-c++-common/deep-copy-11.c create mode 100644 libgomp/testsuite/libgomp.oacc-c-c++-common/deep-copy-14.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-c-c++-common/deep-copy-9.c create mode 100644 libgomp/testsuite/libgomp.oacc-c-c++-common/unmap-infinity-1.c create mode 100644 libgomp/testsuite/libgomp.oacc-fortran/class-ptr-param.f95 create mode 100644 libgomp/testsuite/libgomp.oacc-fortran/classtypes-1.f95 create mode 100644 libgomp/testsuite/libgomp.oacc-fortran/classtypes-2.f95 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 create mode 100644 libgomp/testsuite/libgomp.oacc-fortran/derived-type-1.f90 create mode 100644 libgomp/testsuite/libgomp.oacc-fortran/derivedtype-1.f95 create mode 100644 libgomp/testsuite/libgomp.oacc-fortran/derivedtype-2.f95 create mode 100644 libgomp/testsuite/libgomp.oacc-fortran/multidim-slice.f95 create mode 100644 libgomp/testsuite/libgomp.oacc-fortran/update-2.f90 -- 2.23.0