[PATCH v2, OpenMP 5, C++] Implement implicit mapping of this[:1] (PR92120)
Chung-Lin Tang
cltang@codesourcery.com
Mon Dec 14 10:31:23 GMT 2020
Ping.
On 2020/11/13 9:13 PM, Chung-Lin Tang wrote:
> Hi Jakub,
> there was a first version of this patch here:
> https://gcc.gnu.org/pipermail/gcc-patches/2020-September/554087.html
>
> The attached patch here is a v2 version that adds implementation of
> this part in the this[:1] functionality description in the OpenMP 5.0 spec:
>
> "if the [member] variable [accessed in a target region] is of a type pointer
> or reference to pointer, it is also treated as if it has appeared in a map
> clause as a zero-length array section."
>
> Basically, referencing a pointer member 'ptr' automatically maps it with the
> equivalent of 'map(this->ptr[:0])'
>
> To achieve this, two new map kinds GOMP_MAP_ATTACH_ZERO_LENGTH_ARRAY_SECTION,
> and GOMP_MAP_POINTER_TO_ZERO_LENGTH_ARRAY_SECTION were added, which are
> basically split from GOMP_MAP_ATTACH and GOMP_MAP_POINTER, except now allowing
> the pointer target to be NULL.
>
> This patch has been tested for gcc, g++, gfortran (C and Fortran are not really
> affected, but since omp-low.c was slightly touched, tested along for completeness)
> and libgomp on x86_64-linux with nvptx offloading, all without regressions.
>
> Is this okay for trunk?
>
> Thanks,
> Chung-Lin
>
> 2020-11-13 Chung-Lin Tang <cltang@codesourcery.com>
>
> PR middle-end/92120
>
> gcc/cp/
> * cp-tree.h (finish_omp_target): New declaration.
> (set_omp_target_this_expr): Likewise.
> * lambda.c (lambda_expr_this_capture): Add call to
> set_omp_target_this_expr.
> * parser.c (cp_parser_omp_target): Factor out code, change to call
> finish_omp_target, add re-initing call to set_omp_target_this_expr.
> * semantics.c (omp_target_this_expr): New static variable.
> (omp_target_ptr_members_accessed): New static hash_map for tracking
> accessed non-static pointer-type members.
> (finish_non_static_data_member): Add call to set_omp_target_this_expr.
> Add recording of non-static pointer-type members access.
> (finish_this_expr): Add call to set_omp_target_this_expr.
> (set_omp_target_this_expr): New function to set omp_target_this_expr.
> (finish_omp_target): New function with code merged from
> cp_parser_omp_target, plus code to implement this[:1] and __closure map
> clauses for OpenMP.
>
> gcc/
> * omp-low.c (lower_omp_target):
> Handle GOMP_MAP_ATTACH_ZERO_LENGTH_ARRAY_SECTION, and
> GOMP_MAP_POINTER_TO_ZERO_LENGTH_ARRAY_SECTION map kinds.
> * tree-pretty-print.c (dump_omp_clause): Likewise.
>
> include/
> * gomp-constants.h (enum gomp_map_kind):
> Add GOMP_MAP_ATTACH_ZERO_LENGTH_ARRAY_SECTION, and
> GOMP_MAP_POINTER_TO_ZERO_LENGTH_ARRAY_SECTION map kinds.
> (GOMP_MAP_POINTER_P):
> Include GOMP_MAP_POINTER_TO_ZERO_LENGTH_ARRAY_SECTION.
>
> libgomp/
> * libgomp.h (gomp_attach_pointer): Add bool parameter.
> * oacc-mem.c (acc_attach_async): Update call to gomp_attach_pointer.
> (goacc_enter_data_internal): Likewise.
> * target.c (gomp_map_vars_existing): Update assert condition to
> include GOMP_MAP_ATTACH_ZERO_LENGTH_ARRAY_SECTION.
> (gomp_map_pointer): Add 'bool allow_zero_length_array_sections'
> parameter, add support for mapping a pointer with NULL target.
> (gomp_attach_pointer): Add 'bool allow_zero_length_array_sections'
> parameter, add support for attaching a pointer with NULL target.
> (gomp_map_vars_internal): Update calls to gomp_map_pointer and
> gomp_attach_pointer, add handling for
> GOMP_MAP_ATTACH_ZERO_LENGTH_ARRAY_SECTION, and
> GOMP_MAP_POINTER_TO_ZERO_LENGTH_ARRAY_SECTION cases.
>
> gcc/testsuite/
> * g++.dg/gomp/target-this-1.C: New testcase.
> * g++.dg/gomp/target-this-2.C: New testcase.
> * g++.dg/gomp/target-this-3.C: New testcase.
> * g++.dg/gomp/target-this-4.C: New testcase.
>
> libgomp/
> * testsuite/libgomp.c++/target-this-1.C: New testcase.
> * testsuite/libgomp.c++/target-this-2.C: New testcase.
> * testsuite/libgomp.c++/target-this-3.C: New testcase.
> * testsuite/libgomp.c++/target-this-4.C: New testcase.
>
More information about the Gcc-patches
mailing list