This patch has been split out from the previous one to avoid a
confusingly-interleaved diff.  The two patches should probably be
committed squashed together.

2021-10-01  Julian Brown  <jul...@codesourcery.com>

gcc/
        * gimplify.c (is_or_contains_p, omp_target_reorder_clauses): Delete.
---
 gcc/gimplify.cc | 207 ------------------------------------------------
 1 file changed, 207 deletions(-)

diff --git a/gcc/gimplify.cc b/gcc/gimplify.cc
index 968cbd263f5..b667012a118 100644
--- a/gcc/gimplify.cc
+++ b/gcc/gimplify.cc
@@ -8738,213 +8738,6 @@ extract_base_bit_offset (tree base, tree *base_ref, 
poly_int64 *bitposp,
   return base;
 }
 
-#if 0
-/* Returns true if EXPR is or contains (as a sub-component) BASE_PTR.  */
-
-static bool
-is_or_contains_p (tree expr, tree base_ptr)
-{
-  if ((TREE_CODE (expr) == INDIRECT_REF && TREE_CODE (base_ptr) == MEM_REF)
-      || (TREE_CODE (expr) == MEM_REF && TREE_CODE (base_ptr) == INDIRECT_REF))
-    return operand_equal_p (TREE_OPERAND (expr, 0),
-                           TREE_OPERAND (base_ptr, 0));
-  while (!operand_equal_p (expr, base_ptr))
-    {
-      if (TREE_CODE (base_ptr) == COMPOUND_EXPR)
-       base_ptr = TREE_OPERAND (base_ptr, 1);
-      if (TREE_CODE (base_ptr) == COMPONENT_REF
-         || TREE_CODE (base_ptr) == POINTER_PLUS_EXPR
-         || TREE_CODE (base_ptr) == SAVE_EXPR)
-       base_ptr = TREE_OPERAND (base_ptr, 0);
-      else
-       break;
-    }
-  return operand_equal_p (expr, base_ptr);
-}
-
-
-/* Implement OpenMP 5.x map ordering rules for target directives. There are
-   several rules, and with some level of ambiguity, hopefully we can at least
-   collect the complexity here in one place.  */
-
-static void
-omp_target_reorder_clauses (tree *list_p)
-{
-  /* Collect refs to alloc/release/delete maps.  */
-  auto_vec<tree, 32> ard;
-  tree *cp = list_p;
-  while (*cp != NULL_TREE)
-    if (OMP_CLAUSE_CODE (*cp) == OMP_CLAUSE_MAP
-       && (OMP_CLAUSE_MAP_KIND (*cp) == GOMP_MAP_ALLOC
-           || OMP_CLAUSE_MAP_KIND (*cp) == GOMP_MAP_RELEASE
-           || OMP_CLAUSE_MAP_KIND (*cp) == GOMP_MAP_DELETE))
-      {
-       /* Unlink cp and push to ard.  */
-       tree c = *cp;
-       tree nc = OMP_CLAUSE_CHAIN (c);
-       *cp = nc;
-       ard.safe_push (c);
-
-       /* Any associated pointer type maps should also move along.  */
-       while (*cp != NULL_TREE
-              && OMP_CLAUSE_CODE (*cp) == OMP_CLAUSE_MAP
-              && (OMP_CLAUSE_MAP_KIND (*cp) == GOMP_MAP_FIRSTPRIVATE_REFERENCE
-                  || OMP_CLAUSE_MAP_KIND (*cp) == GOMP_MAP_FIRSTPRIVATE_POINTER
-                  || OMP_CLAUSE_MAP_KIND (*cp) == GOMP_MAP_ATTACH_DETACH
-                  || OMP_CLAUSE_MAP_KIND (*cp) == GOMP_MAP_POINTER
-                  || OMP_CLAUSE_MAP_KIND (*cp) == GOMP_MAP_ALWAYS_POINTER
-                  || OMP_CLAUSE_MAP_KIND (*cp) == GOMP_MAP_TO_PSET))
-         {
-           c = *cp;
-           nc = OMP_CLAUSE_CHAIN (c);
-           *cp = nc;
-           ard.safe_push (c);
-         }
-      }
-    else
-      cp = &OMP_CLAUSE_CHAIN (*cp);
-
-  /* Link alloc/release/delete maps to the end of list.  */
-  for (unsigned int i = 0; i < ard.length (); i++)
-    {
-      *cp = ard[i];
-      cp = &OMP_CLAUSE_CHAIN (ard[i]);
-    }
-  *cp = NULL_TREE;
-
-  /* OpenMP 5.0 requires that pointer variables are mapped before
-     its use as a base-pointer.  */
-  auto_vec<tree *, 32> atf;
-  for (tree *cp = list_p; *cp; cp = &OMP_CLAUSE_CHAIN (*cp))
-    if (OMP_CLAUSE_CODE (*cp) == OMP_CLAUSE_MAP)
-      {
-       /* Collect alloc, to, from, to/from clause tree pointers.  */
-       gomp_map_kind k = OMP_CLAUSE_MAP_KIND (*cp);
-       if (k == GOMP_MAP_ALLOC
-           || k == GOMP_MAP_TO
-           || k == GOMP_MAP_FROM
-           || k == GOMP_MAP_TOFROM
-           || k == GOMP_MAP_ALWAYS_TO
-           || k == GOMP_MAP_ALWAYS_FROM
-           || k == GOMP_MAP_ALWAYS_TOFROM)
-         atf.safe_push (cp);
-      }
-
-  for (unsigned int i = 0; i < atf.length (); i++)
-    if (atf[i])
-      {
-       tree *cp = atf[i];
-       tree decl = OMP_CLAUSE_DECL (*cp);
-       if (TREE_CODE (decl) == INDIRECT_REF || TREE_CODE (decl) == MEM_REF)
-         {
-           tree base_ptr = TREE_OPERAND (decl, 0);
-           STRIP_TYPE_NOPS (base_ptr);
-           for (unsigned int j = i + 1; j < atf.length (); j++)
-             if (atf[j])
-               {
-                 tree *cp2 = atf[j];
-                 tree decl2 = OMP_CLAUSE_DECL (*cp2);
-
-                 decl2 = OMP_CLAUSE_DECL (*cp2);
-                 if (is_or_contains_p (decl2, base_ptr))
-                   {
-                     /* Move *cp2 to before *cp.  */
-                     tree c = *cp2;
-                     *cp2 = OMP_CLAUSE_CHAIN (c);
-                     OMP_CLAUSE_CHAIN (c) = *cp;
-                     *cp = c;
-
-                     if (*cp2 != NULL_TREE
-                         && OMP_CLAUSE_CODE (*cp2) == OMP_CLAUSE_MAP
-                         && OMP_CLAUSE_MAP_KIND (*cp2) == 
GOMP_MAP_ALWAYS_POINTER)
-                       {
-                         tree c2 = *cp2;
-                         *cp2 = OMP_CLAUSE_CHAIN (c2);
-                         OMP_CLAUSE_CHAIN (c2) = OMP_CLAUSE_CHAIN (c);
-                         OMP_CLAUSE_CHAIN (c) = c2;
-                       }
-
-                     atf[j] = NULL;
-                 }
-               }
-         }
-      }
-
-  /* For attach_detach map clauses, if there is another map that maps the
-     attached/detached pointer, make sure that map is ordered before the
-     attach_detach.  */
-  atf.truncate (0);
-  for (tree *cp = list_p; *cp; cp = &OMP_CLAUSE_CHAIN (*cp))
-    if (OMP_CLAUSE_CODE (*cp) == OMP_CLAUSE_MAP)
-      {
-       /* Collect alloc, to, from, to/from clauses, and
-          always_pointer/attach_detach clauses.  */
-       gomp_map_kind k = OMP_CLAUSE_MAP_KIND (*cp);
-       if (k == GOMP_MAP_ALLOC
-           || k == GOMP_MAP_TO
-           || k == GOMP_MAP_FROM
-           || k == GOMP_MAP_TOFROM
-           || k == GOMP_MAP_ALWAYS_TO
-           || k == GOMP_MAP_ALWAYS_FROM
-           || k == GOMP_MAP_ALWAYS_TOFROM
-           || k == GOMP_MAP_ATTACH_DETACH
-           || k == GOMP_MAP_ALWAYS_POINTER)
-         atf.safe_push (cp);
-      }
-
-  for (unsigned int i = 0; i < atf.length (); i++)
-    if (atf[i])
-      {
-       tree *cp = atf[i];
-       tree ptr = OMP_CLAUSE_DECL (*cp);
-       STRIP_TYPE_NOPS (ptr);
-       if (OMP_CLAUSE_MAP_KIND (*cp) == GOMP_MAP_ATTACH_DETACH)
-         for (unsigned int j = i + 1; j < atf.length (); j++)
-           {
-             tree *cp2 = atf[j];
-             tree decl2 = OMP_CLAUSE_DECL (*cp2);
-             if (OMP_CLAUSE_MAP_KIND (*cp2) != GOMP_MAP_ATTACH_DETACH
-                 && OMP_CLAUSE_MAP_KIND (*cp2) != GOMP_MAP_ALWAYS_POINTER
-                 && is_or_contains_p (decl2, ptr))
-               {
-                 /* Move *cp2 to before *cp.  */
-                 tree c = *cp2;
-                 *cp2 = OMP_CLAUSE_CHAIN (c);
-                 OMP_CLAUSE_CHAIN (c) = *cp;
-                 *cp = c;
-                 atf[j] = NULL;
-
-                 /* If decl2 is of the form '*decl2_opnd0', and followed by an
-                    ALWAYS_POINTER or ATTACH_DETACH of 'decl2_opnd0', move the
-                    pointer operation along with *cp2. This can happen for C++
-                    reference sequences.  */
-                 if (j + 1 < atf.length ()
-                     && (TREE_CODE (decl2) == INDIRECT_REF
-                         || TREE_CODE (decl2) == MEM_REF))
-                   {
-                     tree *cp3 = atf[j + 1];
-                     tree decl3 = OMP_CLAUSE_DECL (*cp3);
-                     tree decl2_opnd0 = TREE_OPERAND (decl2, 0);
-                     if ((OMP_CLAUSE_MAP_KIND (*cp3) == GOMP_MAP_ALWAYS_POINTER
-                          || OMP_CLAUSE_MAP_KIND (*cp3) == 
GOMP_MAP_ATTACH_DETACH)
-                         && operand_equal_p (decl3, decl2_opnd0))
-                       {
-                         /* Also move *cp3 to before *cp.  */
-                         c = *cp3;
-                         *cp2 = OMP_CLAUSE_CHAIN (c);
-                         OMP_CLAUSE_CHAIN (c) = *cp;
-                         *cp = c;
-                         atf[j + 1] = NULL;
-                         j += 1;
-                       }
-                   }
-               }
-           }
-      }
-}
-#endif
-
-
 enum omp_tsort_mark {
   UNVISITED,
   TEMPORARY,
-- 
2.29.2

Reply via email to