[Bug fortran/104949] [OpenMP] omp target: firstprivate of allocatable array – only descriptor firstprivatized

cvs-commit at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Mon May 23 08:54:58 GMT 2022


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104949

--- Comment #2 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Tobias Burnus <burnus@gcc.gnu.org>:

https://gcc.gnu.org/g:49d1a2f91325fa8cc011149e27e5093a988b3a49

commit r13-706-g49d1a2f91325fa8cc011149e27e5093a988b3a49
Author: Tobias Burnus <tobias@codesourcery.com>
Date:   Mon May 23 10:54:32 2022 +0200

    OpenMP: Handle descriptors in target's firstprivate [PR104949]

    For allocatable/pointer arrays, a firstprivate to a device
    not only needs to privatize the descriptor but also the actual
    data. This is implemented as:
      firstprivate(x) firstprivate(x.data) attach(x [bias: &x.data-&x)
    where the address of x in device memory is saved in hostaddrs[i]
    by libgomp and the middle end actually passes hostaddrs[i]' to
    attach.

    As side effect, has_device_addr(array_desc) had to be changed:
    before, it was converted to firstprivate in the front end; now
    it is handled in omp-low.cc as has_device_addr requires a shallow
    firstprivate (not touching the data pointer) while the normal
    firstprivate requires (now) a deep firstprivate.

    gcc/fortran/ChangeLog:

            PR fortran/104949
            * f95-lang.cc (LANG_HOOKS_OMP_ARRAY_SIZE): Redefine.
            * trans-openmp.cc (gfc_omp_array_size): New.
            (gfc_trans_omp_variable_list): Never turn has_device_addr
            to firstprivate.
            * trans.h (gfc_omp_array_size): New.

    gcc/ChangeLog:

            PR fortran/104949
            * langhooks-def.h (lhd_omp_array_size): New.
            (LANG_HOOKS_OMP_ARRAY_SIZE): Define.
            (LANG_HOOKS_DECLS): Add it.
            * langhooks.cc (lhd_omp_array_size): New.
            * langhooks.h (struct lang_hooks_for_decls): Add hook.
            * omp-low.cc (scan_sharing_clauses, lower_omp_target):
            Handle GOMP_MAP_FIRSTPRIVATE for array descriptors.

    libgomp/ChangeLog:

            PR fortran/104949
            * target.c (gomp_map_vars_internal, copy_firstprivate_data):
            Support attach for GOMP_MAP_FIRSTPRIVATE.
            * testsuite/libgomp.fortran/target-firstprivate-1.f90: New test.
            * testsuite/libgomp.fortran/target-firstprivate-2.f90: New test.
            * testsuite/libgomp.fortran/target-firstprivate-3.f90: New test.


More information about the Gcc-bugs mailing list