]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Revert "Enable gimplify GOMP_MAP_STRUCT handling of (COMPONENT_REF (INDIRECT_REF...
authorCatherine Moore <clm@codesourcery.com>
Sat, 13 Feb 2021 17:04:44 +0000 (09:04 -0800)
committerCatherine Moore <clm@codesourcery.com>
Sat, 13 Feb 2021 17:04:44 +0000 (09:04 -0800)
This reverts commit bf8605f14ec33ea31233a3567f3184fee667b695.

Regressions were reported for BZ 9574 - C++ class member mapping.

gcc/gimplify.c
gcc/testsuite/g++.dg/gomp/target-3.C
gcc/testsuite/g++.dg/gomp/target-this-2.C
gcc/testsuite/g++.dg/gomp/target-this-3.C
gcc/testsuite/g++.dg/gomp/target-this-4.C
libgomp/testsuite/libgomp.c++/target-23.C [deleted file]

index 8184c19ba44a01e12e6f1b453d572c3aeeb4195a..4e99ee2d38af2ff6caa5d712828815e230d41a63 100644 (file)
@@ -53,7 +53,6 @@ along with GCC; see the file COPYING3.  If not see
 #include "langhooks.h"
 #include "tree-cfg.h"
 #include "tree-ssa.h"
-#include "tree-hash-traits.h"
 #include "omp-general.h"
 #include "omp-low.h"
 #include "gimple-low.h"
@@ -8515,7 +8514,7 @@ gimplify_scan_omp_clauses (tree *list_p, gimple_seq *pre_p,
 {
   struct gimplify_omp_ctx *ctx, *outer_ctx;
   tree c;
-  hash_map<tree_operand_hash, tree> *struct_map_to_clause = NULL;
+  hash_map<tree, tree> *struct_map_to_clause = NULL;
   hash_set<tree> *struct_deref_set = NULL;
   tree *prev_list_p = NULL, *orig_list_p = list_p;
   int handled_depend_iterators = -1;
@@ -9083,15 +9082,12 @@ gimplify_scan_omp_clauses (tree *list_p, gimple_seq *pre_p,
                  && TREE_CODE (decl) == INDIRECT_REF
                  && TREE_CODE (TREE_OPERAND (decl, 0)) == COMPONENT_REF
                  && (TREE_CODE (TREE_TYPE (TREE_OPERAND (decl, 0)))
-                     == REFERENCE_TYPE)
-                 && (OMP_CLAUSE_MAP_KIND (c)
-                     != GOMP_MAP_POINTER_TO_ZERO_LENGTH_ARRAY_SECTION))
+                     == REFERENCE_TYPE))
                {
                  pd = &TREE_OPERAND (decl, 0);
                  decl = TREE_OPERAND (decl, 0);
                }
              bool indir_p = false;
-             bool component_ref_p = false;
              tree orig_decl = decl;
              tree decl_ref = NULL_TREE;
              if ((region_type & (ORT_ACC | ORT_TARGET | ORT_TARGET_DATA)) != 0
@@ -9102,7 +9098,6 @@ gimplify_scan_omp_clauses (tree *list_p, gimple_seq *pre_p,
                  while (TREE_CODE (decl) == COMPONENT_REF)
                    {
                      decl = TREE_OPERAND (decl, 0);
-                     component_ref_p = true;
                      if (((TREE_CODE (decl) == MEM_REF
                            && integer_zerop (TREE_OPERAND (decl, 1)))
                           || INDIRECT_REF_P (decl))
@@ -9122,11 +9117,8 @@ gimplify_scan_omp_clauses (tree *list_p, gimple_seq *pre_p,
                        }
                    }
                }
-             else if (TREE_CODE (decl) == COMPONENT_REF
-                      && (OMP_CLAUSE_MAP_KIND (c)
-                          != GOMP_MAP_ATTACH_ZERO_LENGTH_ARRAY_SECTION))
+             else if (TREE_CODE (decl) == COMPONENT_REF)
                {
-                 component_ref_p = true;
                  while (TREE_CODE (decl) == COMPONENT_REF)
                    decl = TREE_OPERAND (decl, 0);
                  if (TREE_CODE (decl) == INDIRECT_REF
@@ -9196,8 +9188,7 @@ gimplify_scan_omp_clauses (tree *list_p, gimple_seq *pre_p,
              if (code == OACC_UPDATE
                  && 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)))
+             if (DECL_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
@@ -9254,10 +9245,7 @@ gimplify_scan_omp_clauses (tree *list_p, gimple_seq *pre_p,
                  gcc_assert (base == decl);
 
                  splay_tree_node n
-                   = (DECL_P (decl)
-                      ? splay_tree_lookup (ctx->variables,
-                                           (splay_tree_key) decl)
-                      : NULL);
+                   = splay_tree_lookup (ctx->variables, (splay_tree_key)decl);
                  bool ptr = (OMP_CLAUSE_MAP_KIND (c)
                              == GOMP_MAP_ALWAYS_POINTER);
                  bool attach_detach = (OMP_CLAUSE_MAP_KIND (c)
@@ -9283,11 +9271,7 @@ gimplify_scan_omp_clauses (tree *list_p, gimple_seq *pre_p,
                      OMP_CLAUSE_SET_MAP_KIND (c, k);
                      has_attachments = true;
                    }
-                 if ((DECL_P (decl)
-                      && (n == NULL || (n->value & GOVD_MAP) == 0))
-                     || (!DECL_P (decl)
-                         && (!struct_map_to_clause
-                             || struct_map_to_clause->get (decl) == NULL)))
+                 if (n == NULL || (n->value & GOVD_MAP) == 0)
                    {
                      tree l = build_omp_clause (OMP_CLAUSE_LOCATION (c),
                                                 OMP_CLAUSE_MAP);
@@ -9306,8 +9290,7 @@ gimplify_scan_omp_clauses (tree *list_p, gimple_seq *pre_p,
                           ? DECL_SIZE_UNIT (OMP_CLAUSE_DECL (l))
                           : TYPE_SIZE_UNIT (TREE_TYPE (OMP_CLAUSE_DECL (l))));
                      if (struct_map_to_clause == NULL)
-                       struct_map_to_clause
-                         = new hash_map<tree_operand_hash, tree>;
+                       struct_map_to_clause = new hash_map<tree, tree>;
                      struct_map_to_clause->put (decl, l);
                      if (ptr || attach_detach)
                        {
@@ -9341,8 +9324,7 @@ gimplify_scan_omp_clauses (tree *list_p, gimple_seq *pre_p,
                        flags |= GOVD_SEEN;
                      if (has_attachments)
                        flags |= GOVD_MAP_HAS_ATTACHMENTS;
-                     if (DECL_P (decl))
-                       goto do_add_decl;
+                     goto do_add_decl;
                    }
                  else if (struct_map_to_clause)
                    {
@@ -9451,13 +9433,6 @@ gimplify_scan_omp_clauses (tree *list_p, gimple_seq *pre_p,
                        }
                      else if (*sc != c)
                        {
-                         if (gimplify_expr (pd, pre_p, NULL, is_gimple_lvalue,
-                                            fb_lvalue)
-                             == GS_ERROR)
-                           {
-                             remove = true;
-                             break;
-                           }
                          *list_p = OMP_CLAUSE_CHAIN (c);
                          OMP_CLAUSE_CHAIN (c) = *sc;
                          *sc = c;
@@ -10836,12 +10811,6 @@ gimplify_adjust_omp_clauses (gimple_seq *pre_p, gimple_seq body, tree *list_p,
                    }
                }
            }
-         if (OMP_CLAUSE_MAP_KIND (c) == GOMP_MAP_STRUCT
-             && (code == OMP_TARGET_EXIT_DATA || code == OACC_EXIT_DATA))
-           {
-             remove = true;
-             break;
-           }
          if (!DECL_P (decl))
            {
              if ((ctx->region_type & ORT_TARGET) != 0
@@ -10888,6 +10857,10 @@ gimplify_adjust_omp_clauses (gimple_seq *pre_p, gimple_seq body, tree *list_p,
                      = OMP_CLAUSE_CHAIN (OMP_CLAUSE_CHAIN (c));
                }
            }
+         else if (OMP_CLAUSE_MAP_KIND (c) == GOMP_MAP_STRUCT
+                  && (code == OMP_TARGET_EXIT_DATA
+                      || code == OACC_EXIT_DATA))
+           remove = true;
          else if (DECL_SIZE (decl)
                   && TREE_CODE (DECL_SIZE (decl)) != INTEGER_CST
                   && OMP_CLAUSE_MAP_KIND (c) != GOMP_MAP_POINTER
index f4d40ec8e4b9bc3c7c2053dae504beb54938c565..fe2e38b46a3699a56bfaf561d7d7d7edc1002a92 100644 (file)
@@ -33,4 +33,4 @@ T<N>::bar (int x)
 
 template struct T<0>;
 
-/* { dg-final { scan-tree-dump-times "map\\(struct:\\*this \\\[len: 2\\\]\\) map\\(alloc:this->a \\\[len: \[0-9\]+\\\]\\) map\\(alloc:this->b \\\[len: \[0-9\]+\\\]\\)" 4 "gimple" } } */
+/* { dg-final { scan-tree-dump-times "map\\(alloc:this->b \\\[len: \[0-9\]+\\\]\\) map\\(alloc:this->a \\\[len: \[0-9\]+\\\]\\)" 4 "gimple" } } */
index 679c85a54ddd596a9e46a6868e6e78b9f134542e..a5e832130fba9debfc1ce3fe8f204acdb129c637 100644 (file)
@@ -46,4 +46,4 @@ int main (void)
   return 0;
 }
 
-/* { dg-final { scan-tree-dump {map\(to:\*__closure \[len: [0-9]+\]\) map\(firstprivate:__closure \[pointer assign, bias: 0\]\) map\(struct:\*__closure \[len: 1\]\) map\(alloc:__closure->__this \[len: [0-9]+\]\) map\(tofrom:\*_[0-9]+ \[len: [0-9]+\]\) map\(always_pointer:__closure->__this \[pointer assign, bias: 0\]\)} "gimple" } } */
+/* { dg-final { scan-tree-dump {map\(to:\*__closure \[len: [0-9]+\]\) map\(firstprivate:__closure \[pointer assign, bias: 0\]\) map\(tofrom:\*_[0-9]+ \[len: [0-9]+\]\) map\(always_pointer:__closure->__this \[pointer assign, bias: 0\]\)} "gimple" } } */
index a450b3723e5c5b0fe739a677abe23f35159074dd..208ea079b95fca2a0fe853d2b70537fc1f7f81f7 100644 (file)
@@ -100,6 +100,6 @@ int main (void)
   return 0;
 }
 
-/* { dg-final { scan-tree-dump {#pragma omp target num_teams.* map\(tofrom:\*this \[len: [0-9]+\]\) map\(firstprivate:this \[pointer assign, bias: 0\]\) map\(alloc:\*_[0-9]+ \[pointer assign, zero-length array section, bias: 0\]\) map\(attach:this->refptr \[bias: 0\]\) map\(from:mapped \[len: [0-9]+\]\) map\(alloc:\*_[0-9+] \[len: 0\]\) firstprivate\(n\)} "gimple" } } */
+/* { dg-final { scan-tree-dump {#pragma omp target num_teams.* map\(tofrom:\*this \[len: [0-9]+\]\) map\(firstprivate:this \[pointer assign, bias: 0\]\) map\(alloc:\*this->refptr \[pointer assign, zero-length array section, bias: 0\]\) map\(attach:this->refptr \[bias: 0\]\) map\(from:mapped \[len: [0-9]+\]\) map\(alloc:\*_[0-9+] \[len: 0\]\) firstprivate\(n\)} "gimple" } } */
 
 /* { dg-final { scan-tree-dump {#pragma omp target num_teams.* map\(tofrom:\*this \[len: [0-9]+\]\) map\(firstprivate:this \[pointer assign, bias: 0\]\) map\(attach_zero_length_array_section:this->ptr \[bias: 0\]\) map\(from:mapped \[len: [0-9]+\]\) map\(alloc:MEM.* \[len: 0\]\) firstprivate\(n\)} "gimple" } } */
index af23cbb90231ea05dd749704806f1280db9cf60b..f42cf38454170a41e568307bc51faabec4c8eb47 100644 (file)
@@ -102,6 +102,6 @@ int main (void)
   return 0;
 }
 
-/* { dg-final { scan-tree-dump {#pragma omp target num_teams.* map\(to:\*__closure \[len: [0-9]+\]\) map\(firstprivate:__closure \[pointer assign, bias: 0\]\) map\(struct:\*__closure \[len: 1\]\) map\(alloc:__closure->__this \[len: [0-9]+\]\) map\(tofrom:\*_[0-9]+ \[len: [0-9]+\]\) map\(always_pointer:__closure->__this \[pointer assign, bias: 0\]\) map\(attach_zero_length_array_section:_[0-9]+->ptr \[bias: 0\]\) map\(from:mapped \[len: 1\]\) map\(alloc:MEM.* \[len: 0\]\) firstprivate\(n\) map\(alloc:MEM.* \[len: 0\]\) map\(firstprivate:this \[pointer assign, bias: 0\]\)} "gimple" } } */
+/* { dg-final { scan-tree-dump {#pragma omp target num_teams.* map\(to:\*__closure \[len: [0-9]+\]\) map\(firstprivate:__closure \[pointer assign, bias: 0\]\) map\(tofrom:\*_[0-9]+ \[len: [0-9]+\]\) map\(always_pointer:__closure->__this \[pointer assign, bias: 0\]\) map\(attach_zero_length_array_section:_[0-9]+->ptr \[bias: 0\]\) map\(from:mapped \[len: 1\]\) map\(alloc:MEM.* \[len: 0\]\) firstprivate\(n\) map\(alloc:MEM.* \[len: 0\]\) map\(firstprivate:this \[pointer assign, bias: 0\]\)} "gimple" } } */
 
-/* { dg-final { scan-tree-dump {#pragma omp target num_teams.* map\(to:\*__closure \[len: [0-9]+\]\) map\(firstprivate:__closure \[pointer assign, bias: 0\]\) map\(struct:\*__closure \[len: 1\]\) map\(alloc:__closure->__this \[len: [0-9]+\]\) map\(tofrom:\*_[0-9]+ \[len: [0-9]+\]\) map\(always_pointer:__closure->__this \[pointer assign, bias: 0\]\) map\(alloc:\*_[0-9]+ \[pointer assign, zero-length array section, bias: 0\]\) map\(attach:_[0-9]+->refptr \[bias: 0\]\) map\(from:mapped \[len: [0-9]+\]\) map\(alloc:\*_[0-9]+ \[len: 0\]\) firstprivate\(n\) map\(alloc:MEM.* \[len: 0\]\) map\(firstprivate:this \[pointer assign, bias: 0\]\)} "gimple" } } */
+/* { dg-final { scan-tree-dump {#pragma omp target num_teams.* map\(to:\*__closure \[len: [0-9]+\]\) map\(firstprivate:__closure \[pointer assign, bias: 0\]\) map\(tofrom:\*_[0-9]+ \[len: [0-9]+\]\) map\(always_pointer:__closure->__this \[pointer assign, bias: 0\]\) map\(alloc:\*_[0-9]+->refptr \[pointer assign, zero-length array section, bias: 0\]\) map\(attach:_3->refptr \[bias: 0\]\) map\(from:mapped \[len: [0-9]+\]\) map\(alloc:\*_[0-9]+ \[len: 0\]\) firstprivate\(n\) map\(alloc:MEM.* \[len: 0\]\) map\(firstprivate:this \[pointer assign, bias: 0\]\)} "gimple" } } */
diff --git a/libgomp/testsuite/libgomp.c++/target-23.C b/libgomp/testsuite/libgomp.c++/target-23.C
deleted file mode 100644 (file)
index d4f9ff3..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-extern "C" void abort ();
-
-struct S
-{
-  int *data;
-};
-
-int
-main (void)
-{
-  #define SZ 10
-  S *s = new S ();
-  s->data = new int[SZ];
-
-  for (int i = 0; i < SZ; i++)
-    s->data[i] = 0;
-
-  #pragma omp target enter data map(to: s)
-  #pragma omp target enter data map(to: s->data[:SZ])
-  #pragma omp target
-  {
-    for (int i = 0; i < SZ; i++)
-      s->data[i] = i;
-  }
-  #pragma omp target exit data map(from: s->data[:SZ])
-  #pragma omp target exit data map(from: s)
-
-  for (int i = 0; i < SZ; i++)
-    if (s->data[i] != i)
-      abort ();
-
-  return 0;
-}
-