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

Reply via email to