With the "rework indirect struct handling" patch later in this series, some parts of this earlier patch (by Chung-Lin) become unnecessary. This patch reverts those bits.
An XFAIL has been added for a test that fails for the time being with this reversion, until the later patch in the series fixes it again. 2021-05-11 Julian Brown <jul...@codesourcery.com> gcc/ * gimplify.c (build_struct_group): Remove COMPONENT_REF_P parameter. Don't call gimplify_expr on decl in non-reference case. Remove code to add FIRSTPRIVATE_POINTER for *pointer-to-struct expressions. (gimplify_scan_omp_clauses): Remove COMPONENT_REF_P handling. gcc/testsuite/ * gcc.dg/gomp/target-3.c: XFAIL test. --- gcc/gimplify.c | 41 ++++------------------------ gcc/testsuite/gcc.dg/gomp/target-3.c | 2 +- 2 files changed, 6 insertions(+), 37 deletions(-) diff --git a/gcc/gimplify.c b/gcc/gimplify.c index 0674d882861..c2072c7188f 100644 --- a/gcc/gimplify.c +++ b/gcc/gimplify.c @@ -8686,8 +8686,7 @@ move_concat_nodes_after (tree first_new, tree *last_new_tail, tree *first_ptr, static tree build_struct_group (struct gimplify_omp_ctx *ctx, enum omp_region_type region_type, enum tree_code code, - tree decl, tree *pd, bool component_ref_p, - unsigned int *flags, tree c, + tree decl, tree *pd, unsigned int *flags, tree c, hash_map<tree_operand_hash, tree> *&struct_map_to_clause, tree *&prev_list_p, tree *&list_p, gimple_seq *pre_p, bool *cont) @@ -8737,13 +8736,7 @@ build_struct_group (struct gimplify_omp_ctx *ctx, if (base_ref) OMP_CLAUSE_DECL (l) = unshare_expr (base_ref); else - { - OMP_CLAUSE_DECL (l) = unshare_expr (decl); - if (!DECL_P (OMP_CLAUSE_DECL (l)) - && (gimplify_expr (&OMP_CLAUSE_DECL (l), pre_p, NULL, - is_gimple_lvalue, fb_lvalue) == GS_ERROR)) - return error_mark_node; - } + OMP_CLAUSE_DECL (l) = decl; OMP_CLAUSE_SIZE (l) = (!attach ? size_int (1) : (DECL_P (OMP_CLAUSE_DECL (l)) @@ -8785,27 +8778,6 @@ build_struct_group (struct gimplify_omp_ctx *ctx, *flags |= GOVD_SEEN; if (has_attachments) *flags |= GOVD_MAP_HAS_ATTACHMENTS; - - /* If this is a *pointer-to-struct expression, make sure a - firstprivate map of the base-pointer exists. */ - if (component_ref_p - && ((TREE_CODE (decl) == MEM_REF - && integer_zerop (TREE_OPERAND (decl, 1))) - || INDIRECT_REF_P (decl)) - && DECL_P (TREE_OPERAND (decl, 0)) - && !splay_tree_lookup (ctx->variables, - ((splay_tree_key) TREE_OPERAND (decl, 0)))) - { - decl = TREE_OPERAND (decl, 0); - tree c2 = build_omp_clause (OMP_CLAUSE_LOCATION (c), OMP_CLAUSE_MAP); - enum gomp_map_kind mkind = GOMP_MAP_FIRSTPRIVATE_POINTER; - OMP_CLAUSE_SET_MAP_KIND (c2, mkind); - OMP_CLAUSE_DECL (c2) = decl; - OMP_CLAUSE_SIZE (c2) = size_zero_node; - OMP_CLAUSE_CHAIN (c2) = OMP_CLAUSE_CHAIN (c); - OMP_CLAUSE_CHAIN (c) = c2; - } - return decl; } else if (struct_map_to_clause) @@ -9660,9 +9632,7 @@ gimplify_scan_omp_clauses (tree *list_p, gimple_seq *pre_p, && OMP_CLAUSE_MAP_KIND (c) == GOMP_MAP_ATTACH_DETACH) OMP_CLAUSE_SET_MAP_KIND (c, GOMP_MAP_ALWAYS_POINTER); if ((DECL_P (decl) - || (component_ref_p - && (INDIRECT_REF_P (decl) - || TREE_CODE (decl) == MEM_REF))) + || (component_ref_p && INDIRECT_REF_P (decl))) && OMP_CLAUSE_MAP_KIND (c) != GOMP_MAP_TO_PSET && OMP_CLAUSE_MAP_KIND (c) != GOMP_MAP_ATTACH && OMP_CLAUSE_MAP_KIND (c) != GOMP_MAP_DETACH @@ -9710,9 +9680,8 @@ gimplify_scan_omp_clauses (tree *list_p, gimple_seq *pre_p, bool cont = false; tree add_decl = build_struct_group (ctx, region_type, code, decl, pd, - component_ref_p, &flags, c, - struct_map_to_clause, prev_list_p, - list_p, pre_p, &cont); + &flags, c, struct_map_to_clause, + prev_list_p, list_p, pre_p, &cont); if (add_decl == error_mark_node) { remove = true; diff --git a/gcc/testsuite/gcc.dg/gomp/target-3.c b/gcc/testsuite/gcc.dg/gomp/target-3.c index 3e7921270c9..08e42eeb304 100644 --- a/gcc/testsuite/gcc.dg/gomp/target-3.c +++ b/gcc/testsuite/gcc.dg/gomp/target-3.c @@ -13,4 +13,4 @@ void foo (struct S *s) #pragma omp target enter data map (alloc: s->a, s->b) } -/* { dg-final { scan-tree-dump-times "map\\(struct:\\*s \\\[len: 2\\\]\\) map\\(alloc:s->a \\\[len: \[0-9\]+\\\]\\) map\\(alloc:s->b \\\[len: \[0-9\]+\\\]\\)" 2 "gimple" } } */ +/* { dg-final { scan-tree-dump-times "map\\(struct:\\*s \\\[len: 2\\\]\\) map\\(alloc:s->a \\\[len: \[0-9\]+\\\]\\) map\\(alloc:s->b \\\[len: \[0-9\]+\\\]\\)" 2 "gimple" { xfail *-*-* } } } */ -- 2.29.2