[4/7,og10] Revert gimplify.c parts of "Arrow operator handling for C front-end in OpenMP map clauses"

Message ID 8e978e55e80508930d32e88e563279f4ce491389.1620721888.git.julian@codesourcery.com
State New
Headers show
Series
  • OpenACC/OpenMP: Rework struct component handling
Related show

Commit Message

Julian Brown May 11, 2021, 8:56 a.m.
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  <julian@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(-)

-- 
2.29.2

Patch

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 *-*-* } } } */