public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc/devel/omp/gcc-12] [og11] OpenMP/OpenACC: Move array_ref/indirect_ref handling code out of extract_base_bit_offset
@ 2022-06-29 14:40 Kwok Yeung
  0 siblings, 0 replies; only message in thread
From: Kwok Yeung @ 2022-06-29 14:40 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:35b976d48e91a2422c7163c391d57e35daa40e5f

commit 35b976d48e91a2422c7163c391d57e35daa40e5f
Author: Julian Brown <julian@codesourcery.com>
Date:   Thu Jun 3 06:47:00 2021 -0700

    [og11] OpenMP/OpenACC: Move array_ref/indirect_ref handling code out of extract_base_bit_offset
    
    At Richard Biener's suggestion, this patch undoes the following patch:
    
      https://gcc.gnu.org/pipermail/gcc-patches/2021-June/571712.html
    
    and moves the stripping of ARRAY_REFS/INDIRECT_REFS out of
    extract_base_bit_offset and back into the (two) call sites of the
    function. The difference between the two ways of looking through these
    nodes comes down to (I think) what processing has been done on the
    clause in question already: in the case where BASE_REF is non-NULL,
    we are processing an OMP_CLAUSE_DECL for the first time. Conversely,
    when BASE_REF is NULL, we are processing a node from the sorted list
    that is being constructed after a GOMP_MAP_STRUCT node.
    
    2021-06-07  Julian Brown  <julian@codesourcery.com>
    
    gcc/
            * gimplify.cc (extract_base_bit_offset): Don't look through ARRAY_REFs or
            INDIRECT_REFs here.
            (build_struct_group): Reinstate previous behaviour for handling
            ARRAY_REFs/INDIRECT_REFs.

Diff:
---
 gcc/ChangeLog.omp |  7 +++++++
 gcc/gimplify.cc   | 46 ++++++++++++++++++++++++++--------------------
 2 files changed, 33 insertions(+), 20 deletions(-)

diff --git a/gcc/ChangeLog.omp b/gcc/ChangeLog.omp
index 25914ac1cad..d3628663b26 100644
--- a/gcc/ChangeLog.omp
+++ b/gcc/ChangeLog.omp
@@ -1,3 +1,10 @@
+2021-06-03  Julian Brown  <julian@codesourcery.com>
+
+	* gimplify.cc (extract_base_bit_offset): Don't look through ARRAY_REFs or
+	INDIRECT_REFs here.
+	(build_struct_group): Reinstate previous behaviour for handling
+	ARRAY_REFs/INDIRECT_REFs.
+
 2021-06-02  Julian Brown  <julian@codesourcery.com>
 
 	* gimplify.cc (extract_base_bit_offset): Add BASE_IND and OPENMP
diff --git a/gcc/gimplify.cc b/gcc/gimplify.cc
index ea0cc6f69f9..f962c727df4 100644
--- a/gcc/gimplify.cc
+++ b/gcc/gimplify.cc
@@ -8823,20 +8823,6 @@ extract_base_bit_offset (tree base, tree *base_ind, tree *base_ref,
   if (base_ref)
     *base_ref = NULL_TREE;
 
-  if (TREE_CODE (base) == ARRAY_REF)
-    {
-      while (TREE_CODE (base) == ARRAY_REF)
-	base = TREE_OPERAND (base, 0);
-      if (TREE_CODE (base) != COMPONENT_REF
-	  || TREE_CODE (TREE_TYPE (base)) != ARRAY_TYPE)
-	return NULL_TREE;
-    }
-  else if (TREE_CODE (base) == INDIRECT_REF
-	   && TREE_CODE (TREE_OPERAND (base, 0)) == COMPONENT_REF
-	   && (TREE_CODE (TREE_TYPE (TREE_OPERAND (base, 0)))
-	       == REFERENCE_TYPE))
-    base = TREE_OPERAND (base, 0);
-
   base = get_inner_reference (base, &bitsize, &bitpos, &offset, &mode,
 			      &unsignedp, &reversep, &volatilep);
 
@@ -9413,11 +9399,17 @@ build_struct_group (struct gimplify_omp_ctx *ctx,
   poly_offset_int coffset;
   poly_int64 cbitpos;
   tree base_ind, base_ref, tree_coffset;
+  tree ocd = OMP_CLAUSE_DECL (c);
   bool openmp = !(region_type & ORT_ACC);
 
-  tree base = extract_base_bit_offset (OMP_CLAUSE_DECL (c), &base_ind,
-				       &base_ref, &cbitpos, &coffset,
-				       &tree_coffset, openmp);
+  while (TREE_CODE (ocd) == ARRAY_REF)
+    ocd = TREE_OPERAND (ocd, 0);
+
+  if (TREE_CODE (ocd) == INDIRECT_REF)
+    ocd = TREE_OPERAND (ocd, 0);
+
+  tree base = extract_base_bit_offset (ocd, &base_ind, &base_ref, &cbitpos,
+				       &coffset, &tree_coffset, openmp);
 
   bool do_map_struct = (base == decl && !tree_coffset);
 
@@ -9644,9 +9636,23 @@ build_struct_group (struct gimplify_omp_ctx *ctx,
 	    poly_offset_int offset;
 	    poly_int64 bitpos;
 	    tree tree_offset;
-	    tree base = extract_base_bit_offset (sc_decl, NULL, NULL,
-						 &bitpos, &offset,
-						 &tree_offset, openmp);
+
+	    if (TREE_CODE (sc_decl) == ARRAY_REF)
+	      {
+		while (TREE_CODE (sc_decl) == ARRAY_REF)
+		  sc_decl = TREE_OPERAND (sc_decl, 0);
+		if (TREE_CODE (sc_decl) != COMPONENT_REF
+		    || TREE_CODE (TREE_TYPE (sc_decl)) != ARRAY_TYPE)
+		  break;
+	      }
+	    else if (TREE_CODE (sc_decl) == INDIRECT_REF
+		     && TREE_CODE (TREE_OPERAND (sc_decl, 0)) == COMPONENT_REF
+		     && (TREE_CODE (TREE_TYPE (TREE_OPERAND (sc_decl, 0)))
+			 == REFERENCE_TYPE))
+	      sc_decl = TREE_OPERAND (sc_decl, 0);
+
+	    tree base = extract_base_bit_offset (sc_decl, NULL, NULL, &bitpos,
+						 &offset, &tree_offset, openmp);
 	    if (!base || !operand_equal_p (base, decl, 0))
 	      break;
 	    if (scp)


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2022-06-29 14:40 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-06-29 14:40 [gcc/devel/omp/gcc-12] [og11] OpenMP/OpenACC: Move array_ref/indirect_ref handling code out of extract_base_bit_offset Kwok Yeung

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).