[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