]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
backport: [multiple changes]
authorRichard Biener <rguenther@suse.de>
Thu, 22 Jun 2017 11:46:45 +0000 (11:46 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Thu, 22 Jun 2017 11:46:45 +0000 (11:46 +0000)
2017-06-22  Richard Biener  <rguenther@suse.de>

Backport from mainline
2017-02-17  Richard Biener  <rguenther@suse.de>

PR tree-optimization/79552
* tree-ssa-structalias.c (visit_loadstore): Properly verify
default defs.

2016-04-18  Richard Biener  <rguenther@suse.de>

PR tree-optimization/43434
* tree-ssa-structalias.c (struct vls_data): New.
(visit_loadstore): Handle all pointer-based accesses.
(compute_dependence_clique): Compute a bitmap of restrict tags
assigned bases and pass it to visit_loadstore.

* gcc.dg/vect/pr43434.c: New testcase.
* c-c++-common/goacc/kernels-alias-3.c: Adjust.
* c-c++-common/goacc/kernels-alias-4.c: Likewise.
* c-c++-common/goacc/kernels-alias-5.c: Likewise.
* c-c++-common/goacc/kernels-alias-6.c: Likewise.
* c-c++-common/goacc/kernels-alias-7.c: Likewise.
* c-c++-common/goacc/kernels-alias-8.c: Likewise.
* gcc.dg/gomp/pr68640.c: Likewise.
* gfortran.dg/goacc/kernels-alias-3.f95: Likewise.
* gfortran.dg/goacc/kernels-alias-4.f95: Likewise.

From-SVN: r249552

12 files changed:
gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/c-c++-common/goacc/kernels-alias-3.c
gcc/testsuite/c-c++-common/goacc/kernels-alias-4.c
gcc/testsuite/c-c++-common/goacc/kernels-alias-5.c
gcc/testsuite/c-c++-common/goacc/kernels-alias-6.c
gcc/testsuite/c-c++-common/goacc/kernels-alias-7.c
gcc/testsuite/c-c++-common/goacc/kernels-alias-8.c
gcc/testsuite/gcc.dg/gomp/pr68640.c
gcc/testsuite/gfortran.dg/goacc/kernels-alias-3.f95
gcc/testsuite/gfortran.dg/goacc/kernels-alias-4.f95
gcc/tree-ssa-structalias.c

index eacdaacadf6f4a58d6d3ffa8266e2ee93785689a..cb4dc8bf7a73eb2f4efa578ba3942387fa1aac9a 100644 (file)
@@ -1,3 +1,20 @@
+2017-06-22  Richard Biener  <rguenther@suse.de>
+
+       Backport from mainline
+       2017-02-17  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/79552
+       * tree-ssa-structalias.c (visit_loadstore): Properly verify
+       default defs.
+
+       2016-04-18  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/43434
+       * tree-ssa-structalias.c (struct vls_data): New.
+       (visit_loadstore): Handle all pointer-based accesses.
+       (compute_dependence_clique): Compute a bitmap of restrict tags
+       assigned bases and pass it to visit_loadstore.
+
 2017-06-22  Jakub Jelinek  <jakub@redhat.com>
 
        Backported from mainline
index cd051e41b432901f0fb21eb06ced65f94946a4ec..0ae1c09c754e986fca75debfce0a0dbff5ac6b38 100644 (file)
@@ -1,3 +1,20 @@
+2017-06-22  Richard Biener  <rguenther@suse.de>
+
+       Backport from mainline
+       2016-04-18  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/43434
+       * gcc.dg/vect/pr43434.c: New testcase.
+       * c-c++-common/goacc/kernels-alias-3.c: Adjust.
+       * c-c++-common/goacc/kernels-alias-4.c: Likewise.
+       * c-c++-common/goacc/kernels-alias-5.c: Likewise.
+       * c-c++-common/goacc/kernels-alias-6.c: Likewise.
+       * c-c++-common/goacc/kernels-alias-7.c: Likewise.
+       * c-c++-common/goacc/kernels-alias-8.c: Likewise.
+       * gcc.dg/gomp/pr68640.c: Likewise.
+       * gfortran.dg/goacc/kernels-alias-3.f95: Likewise.
+       * gfortran.dg/goacc/kernels-alias-4.f95: Likewise.
+
 2017-06-22  Jakub Jelinek  <jakub@redhat.com>
 
        Backported from mainline
index 0eda7e17c3b9c65239bd727965ebc4f69c76e709..6989c1c1b6d1ac79afb967158848512d9a515b36 100644 (file)
@@ -14,7 +14,8 @@ foo (void)
   }
 }
 
-/* Only the omp_data_i related loads should be annotated with cliques.  */
+/* Only the omp_data_i related loads should be annotated with
+   non-base 0 cliques.  */
 /* { dg-final { scan-tree-dump-times "clique 1 base 1" 2 "ealias" } } */
-/* { dg-final { scan-tree-dump-times "(?n)clique .* base .*" 2 "ealias" } } */
+/* { dg-final { scan-tree-dump-times "(?n)clique 1 base 0" 3 "ealias" } } */
 
index 037901fcffb3d2c53522aaaf8db30b3708de2545..d41802c00db76e43c90d98748f3de903a82cc662 100644 (file)
@@ -16,7 +16,8 @@ foo (void)
   }
 }
 
-/* Only the omp_data_i related loads should be annotated with cliques.  */
+/* Only the omp_data_i related loads should be annotated with
+   non-base 0 cliques.  */
 /* { dg-final { scan-tree-dump-times "clique 1 base 1" 2 "ealias" } } */
-/* { dg-final { scan-tree-dump-times "(?n)clique .* base .*" 2 "ealias" } } */
+/* { dg-final { scan-tree-dump-times "(?n)clique 1 base 0" 3 "ealias" } } */
 
index 69cd3fb94491c91001c4d04dfd3d20b063a9edad..6fefe183203687d31bce5ec8acb93bb0f2ff19dd 100644 (file)
@@ -15,5 +15,5 @@ foo (int *a)
 
 /* Only the omp_data_i related loads should be annotated with cliques.  */
 /* { dg-final { scan-tree-dump-times "clique 1 base 1" 2 "ealias" } } */
-/* { dg-final { scan-tree-dump-times "(?n)clique .* base .*" 2 "ealias" } } */
+/* { dg-final { scan-tree-dump-times "(?n)clique 1 base 0" 4 "ealias" } } */
 
index 6ebce15f5e2e17e906261bbddf55f620b2a8ead2..908e1cafd71915bf300b593492950577213b6f75 100644 (file)
@@ -19,5 +19,5 @@ foo (void)
 
 /* Only the omp_data_i related loads should be annotated with cliques.  */
 /* { dg-final { scan-tree-dump-times "clique 1 base 1" 2 "ealias" } } */
-/* { dg-final { scan-tree-dump-times "(?n)clique .* base .*" 2 "ealias" } } */
+/* { dg-final { scan-tree-dump-times "(?n)clique 1 base 0" 3 "ealias" } } */
 
index 40eb235d6019be7b6437024ffc2c1a29d6e18601..923d00239a2abf7322a91ccbeb709a26efabfec7 100644 (file)
@@ -21,5 +21,5 @@ foo (void)
 
 /* Only the omp_data_i related loads should be annotated with cliques.  */
 /* { dg-final { scan-tree-dump-times "clique 1 base 1" 2 "ealias" } } */
-/* { dg-final { scan-tree-dump-times "(?n)clique .* base .*" 2 "ealias" } } */
+/* { dg-final { scan-tree-dump-times "(?n)clique 1 base 0" 3 "ealias" } } */
 
index 0b93e35909b79db95ebfab778ff551b0c64b1b31..3b91acd27f57d419d2d017eeeaa7fa27f6809414 100644 (file)
@@ -18,5 +18,5 @@ foo (int *a, size_t n)
 
 /* Only the omp_data_i related loads should be annotated with cliques.  */
 /* { dg-final { scan-tree-dump-times "clique 1 base 1" 2 "ealias" } } */
-/* { dg-final { scan-tree-dump-times "(?n)clique .* base .*" 2 "ealias" } } */
+/* { dg-final { scan-tree-dump-times "(?n)clique 1 base 0" 3 "ealias" } } */
 
index f333db0923a40f317853289b24487bbbc8ed85dc..d2b1b472140a1064dcc58396d9bed3cb7d30d1fe 100644 (file)
@@ -13,4 +13,4 @@ foo (int *__restrict__ ap)
 }
 
 /* { dg-final { scan-tree-dump-times "clique 1 base 1" 2 "ealias" } } */
-/* { dg-final { scan-tree-dump-times "(?n)clique .* base .*" 2 "ealias" } } */
+/* { dg-final { scan-tree-dump-times "(?n)clique 1 base 0" 2 "ealias" } } */
index 56f3d598d667b522012529d3158df2c55d142989..07dc8d6c641973af7fb9aa011a3b186f93e49ce8 100644 (file)
@@ -16,4 +16,4 @@ end program main
 
 ! Only the omp_data_i related loads should be annotated with cliques.
 ! { dg-final { scan-tree-dump-times "clique 1 base 1" 2 "ealias" } }
-! { dg-final { scan-tree-dump-times "(?n)clique .* base .*" 2 "ealias" } }
+! { dg-final { scan-tree-dump-times "(?n)clique 1 base 0" 3 "ealias" } }
index e65253b1844851aa6a6d69f756c907621a02ddb7..36f7f65fbacee0804604dfe387fab757136127e5 100644 (file)
@@ -17,4 +17,4 @@ end program main
 
 ! Only the omp_data_i related loads should be annotated with cliques.
 ! { dg-final { scan-tree-dump-times "clique 1 base 1" 3 "ealias" } }
-! { dg-final { scan-tree-dump-times "(?n)clique .* base .*" 3 "ealias" } }
+! { dg-final { scan-tree-dump-times "(?n)clique 1 base 0" 4 "ealias" } }
index 07736e33923192d1b41e61b3c32f006e99d139c9..0a28739e6f7beab62a1d6ca70048cc41ceb53e4e 100644 (file)
@@ -7237,26 +7237,43 @@ delete_points_to_sets (void)
   obstack_free (&final_solutions_obstack, NULL);
 }
 
+struct vls_data
+{
+  unsigned short clique;
+  bitmap rvars;
+};
+
 /* Mark "other" loads and stores as belonging to CLIQUE and with
    base zero.  */
 
 static bool
-visit_loadstore (gimple *, tree base, tree ref, void *clique_)
+visit_loadstore (gimple *, tree base, tree ref, void *data)
 {
-  unsigned short clique = (uintptr_t)clique_;
+  unsigned short clique = ((vls_data *) data)->clique;
+  bitmap rvars = ((vls_data *) data)->rvars;
   if (TREE_CODE (base) == MEM_REF
       || TREE_CODE (base) == TARGET_MEM_REF)
     {
       tree ptr = TREE_OPERAND (base, 0);
-      if (TREE_CODE (ptr) == SSA_NAME
-         && ! SSA_NAME_IS_DEFAULT_DEF (ptr))
+      if (TREE_CODE (ptr) == SSA_NAME)
        {
-         /* ???  We need to make sure 'ptr' doesn't include any of
+         /* For parameters, get at the points-to set for the actual parm
+            decl.  */
+         if (SSA_NAME_IS_DEFAULT_DEF (ptr)
+             && (TREE_CODE (SSA_NAME_VAR (ptr)) == PARM_DECL
+                 || TREE_CODE (SSA_NAME_VAR (ptr)) == RESULT_DECL))
+           ptr = SSA_NAME_VAR (ptr);
+
+         /* We need to make sure 'ptr' doesn't include any of
             the restrict tags we added bases for in its points-to set.  */
-         return false;
-       }
+         varinfo_t vi = lookup_vi_for_tree (ptr);
+         if (! vi)
+           return false;
 
-      /* For now let decls through.  */
+         vi = get_varinfo (find (vi->id));
+         if (bitmap_intersect_p (rvars, vi->solution))
+           return false;
+       }
 
       /* Do not overwrite existing cliques (that includes clique, base
          pairs we just set).  */
@@ -7330,6 +7347,7 @@ compute_dependence_clique (void)
 {
   unsigned short clique = 0;
   unsigned short last_ruid = 0;
+  bitmap rvars = BITMAP_ALLOC (NULL);
   for (unsigned i = 0; i < num_ssa_names; ++i)
     {
       tree ptr = ssa_name (i);
@@ -7385,38 +7403,46 @@ compute_dependence_clique (void)
          /* Now look at possible dereferences of ptr.  */
          imm_use_iterator ui;
          gimple *use_stmt;
+         bool used = false;
          FOR_EACH_IMM_USE_STMT (use_stmt, ui, ptr)
            {
              /* ???  Calls and asms.  */
              if (!gimple_assign_single_p (use_stmt))
                continue;
-             maybe_set_dependence_info (gimple_assign_lhs (use_stmt), ptr,
-                                        clique, restrict_var, last_ruid);
-             maybe_set_dependence_info (gimple_assign_rhs1 (use_stmt), ptr,
-                                        clique, restrict_var, last_ruid);
+             used |= maybe_set_dependence_info (gimple_assign_lhs (use_stmt),
+                                                ptr, clique, restrict_var,
+                                                last_ruid);
+             used |= maybe_set_dependence_info (gimple_assign_rhs1 (use_stmt),
+                                                ptr, clique, restrict_var,
+                                                last_ruid);
            }
+         if (used)
+           bitmap_set_bit (rvars, restrict_var->id);
        }
     }
 
-  if (clique == 0)
-    return;
+  if (clique != 0)
+    {
+      /* Assign the BASE id zero to all accesses not based on a restrict
+        pointer.  That way they get disambiguated against restrict
+        accesses but not against each other.  */
+      /* ???  For restricts derived from globals (thus not incoming
+        parameters) we can't restrict scoping properly thus the following
+        is too aggressive there.  For now we have excluded those globals from
+        getting into the MR_DEPENDENCE machinery.  */
+      vls_data data = { clique, rvars };
+      basic_block bb;
+      FOR_EACH_BB_FN (bb, cfun)
+       for (gimple_stmt_iterator gsi = gsi_start_bb (bb);
+            !gsi_end_p (gsi); gsi_next (&gsi))
+         {
+           gimple *stmt = gsi_stmt (gsi);
+           walk_stmt_load_store_ops (stmt, &data,
+                                     visit_loadstore, visit_loadstore);
+         }
+    }
 
-  /* Assign the BASE id zero to all accesses not based on a restrict
-     pointer.  That way they get disabiguated against restrict
-     accesses but not against each other.  */
-  /* ???  For restricts derived from globals (thus not incoming
-     parameters) we can't restrict scoping properly thus the following
-     is too aggressive there.  For now we have excluded those globals from
-     getting into the MR_DEPENDENCE machinery.  */
-  basic_block bb;
-  FOR_EACH_BB_FN (bb, cfun)
-    for (gimple_stmt_iterator gsi = gsi_start_bb (bb);
-        !gsi_end_p (gsi); gsi_next (&gsi))
-      {
-       gimple *stmt = gsi_stmt (gsi);
-       walk_stmt_load_store_ops (stmt, (void *)(uintptr_t)clique,
-                                 visit_loadstore, visit_loadstore);
-      }
+  BITMAP_FREE (rvars);
 }
 
 /* Compute points-to information for every SSA_NAME pointer in the