From: Jakub Jelinek <jakub@redhat.com>
To: Chung-Lin Tang <cltang@codesourcery.com>
Cc: gcc-patches <gcc-patches@gcc.gnu.org>,
Catherine Moore <clm@codesourcery.com>
Subject: Re: [PATCH, v5, OpenMP 5.0] Improve OpenMP target support for C++ [PR92120 v5]
Date: Fri, 3 Dec 2021 17:47:06 +0100 [thread overview]
Message-ID: <20211203164706.GT2646553@tucnak> (raw)
In-Reply-To: <d24da62a-5135-5945-b985-134cc3274859@codesourcery.com>
On Tue, Nov 16, 2021 at 08:43:27PM +0800, Chung-Lin Tang wrote:
> 2021-11-16 Chung-Lin Tang <cltang@codesourcery.com>
>
> PR middle-end/92120
>
> gcc/cp/ChangeLog:
>
> * cp-tree.h (finish_omp_target): New declaration.
> (finish_omp_target_clauses): Likewise.
> * parser.c (cp_parser_omp_clause_map): Adjust call to
> cp_parser_omp_var_list_no_open to set 'allow_deref' argument to true.
> (cp_parser_omp_target): Factor out code, adjust into calls to new
> function finish_omp_target.
> * pt.c (tsubst_expr): Add call to finish_omp_target_clauses for
> OMP_TARGET case.
> * semantics.c (handle_omp_array_sections_1): Add handling to create
> 'this->member' from 'member' FIELD_DECL. Remove case of rejecting
> 'this' when not in declare simd.
> (handle_omp_array_sections): Likewise.
> (finish_omp_clauses): Likewise. Adjust to allow 'this[]' in OpenMP
> map clauses. Handle 'A->member' case in map clauses. Remove case of
> rejecting 'this' when not in declare simd.
> (struct omp_target_walk_data): New struct for walking over
> target-directive tree body.
> (finish_omp_target_clauses_r): New function for tree walk.
> (finish_omp_target_clauses): New function.
> (finish_omp_target): New function.
>
> gcc/c/ChangeLog:
>
> * c-parser.c (c_parser_omp_clause_map): Set 'allow_deref' argument in
> call to c_parser_omp_variable_list to 'true'.
> * c-typeck.c (handle_omp_array_sections_1): Add strip of MEM_REF in
> array base handling.
> (c_finish_omp_clauses): Handle 'A->member' case in map clauses.
>
> gcc/ChangeLog:
>
> * gimplify.c ("tree-hash-traits.h"): Add include.
> (gimplify_scan_omp_clauses): Change struct_map_to_clause to type
> hash_map<tree_operand, tree> *. Adjust struct map handling to handle
> cases of *A and A->B expressions. Under !DECL_P case of
> GOMP_CLAUSE_MAP handling, add STRIP_NOPS for indir_p case, add to
> struct_deref_set for map(*ptr_to_struct) cases. Add MEM_REF case when
> handling component_ref_p case. Add unshare_expr and gimplification
> when created GOMP_MAP_STRUCT is not a DECL. Add code to add
> firstprivate pointer for *pointer-to-struct case.
> (gimplify_adjust_omp_clauses): Move GOMP_MAP_STRUCT removal code for
> exit data directives code to earlier position.
> * 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.
>
> gcc/testsuite/ChangeLog:
>
> * gcc.dg/gomp/target-3.c: New testcase.
> * g++.dg/gomp/target-3.C: New testcase.
> * g++.dg/gomp/target-lambda-1.C: New testcase.
> * g++.dg/gomp/target-lambda-2.C: New testcase.
> * 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.
> * g++.dg/gomp/target-this-5.C: New testcase.
> * g++.dg/gomp/this-2.C: Adjust testcase.
>
> include/ChangeLog:
>
> * 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/ChangeLog:
>
> * 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.
> * testsuite/libgomp.c++/target-23.C: New testcase.
> * testsuite/libgomp.c++/target-lambda-1.C: New testcase.
> * testsuite/libgomp.c++/target-lambda-2.C: New testcase.
> * 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.
> * testsuite/libgomp.c++/target-this-5.C: New testcase.
> +/* Used to walk OpenMP target directive body. */
> +
> +struct omp_target_walk_data
> +{
> + tree current_object;
> + bool this_expr_accessed;
> +
> + hash_map<tree, tree> ptr_members_accessed;
> + hash_set<tree> lambda_objects_accessed;
> +
> + tree current_closure;
> + hash_set<tree> closure_vars_accessed;
> +
> + hash_set<tree> local_decls;
Can you please add short comments above the members describing
what they are for?
> +};
> +
> +static tree
> +finish_omp_target_clauses_r (tree *tp, int *walk_subtrees, void *ptr)
And add function comments above here.
> +
> +void
> +finish_omp_target_clauses (location_t loc, tree body, tree *clauses_ptr)
And here.
> +
> +tree
> +finish_omp_target (location_t loc, tree clauses, tree body, bool combined_p)
And here?
> + if (allow_zero_length_array_sections)
> + {
> + /* When allowing attachment to zero-length array sections, we
> + allow attaching to NULL pointers when the target region is not
> + mapped. */
> + data = 0;
> + }
No {}s around single statement if body.
Otherwise LGTM.
Jakub
next prev parent reply other threads:[~2021-12-03 16:47 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-06-18 14:25 [PATCH, OpenMP 5.0] Improve OpenMP target support for C++ [PR92120 v4] Chung-Lin Tang
2021-06-24 13:15 ` Jakub Jelinek
2021-11-16 12:43 ` [PATCH, v5, OpenMP 5.0] Improve OpenMP target support for C++ [PR92120 v5] Chung-Lin Tang
2021-12-03 16:47 ` Jakub Jelinek [this message]
2021-12-09 16:41 ` Chung-Lin Tang
2022-09-07 7:04 ` [committed] openmp: Fix handling of target constructs in static member functions [PR106829] Jakub Jelinek
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20211203164706.GT2646553@tucnak \
--to=jakub@redhat.com \
--cc=clm@codesourcery.com \
--cc=cltang@codesourcery.com \
--cc=gcc-patches@gcc.gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).