diff mbox

Improve PTA restrict handling for non-restrict pointers

Message ID alpine.LSU.2.11.1602151113140.1392@t29.fhfr.qr
State New
Headers show

Commit Message

Richard Biener Feb. 15, 2016, 10:16 a.m. UTC
Currently we only disambiguate restrict based accesses against pointer
based accesses that end up using a default def.  The following removes
this restriction allowing disambiguation against any pointer based
access where PTA computed that the pointer cannot point to one of the
restrict tags we used to assign bases != 0 to.

This results in extra disambigations (all non-restrict pointer IV
uses were not handled previously), see the added vectorizer testcase.

Bootstrapped and tested on x86_64-unknown-linux-gnu, queued for GCC 7.

Richard.

2016-02-12  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.

Index: gcc/tree-ssa-structalias.c
===================================================================
*** gcc/tree-ssa-structalias.c	(revision 233369)
--- gcc/tree-ssa-structalias.c	(working copy)
*************** delete_points_to_sets (void)
*** 7162,7174 ****
    obstack_free (&final_solutions_obstack, NULL);
  }
  
  /* Mark "other" loads and stores as belonging to CLIQUE and with
     base zero.  */
  
  static bool
! visit_loadstore (gimple *, tree base, tree ref, void *clique_)
  {
!   unsigned short clique = (uintptr_t)clique_;
    if (TREE_CODE (base) == MEM_REF
        || TREE_CODE (base) == TARGET_MEM_REF)
      {
--- 7162,7181 ----
    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 *data)
  {
!   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)
      {
*************** visit_loadstore (gimple *, tree base, tr
*** 7176,7188 ****
        if (TREE_CODE (ptr) == SSA_NAME
  	  && ! SSA_NAME_IS_DEFAULT_DEF (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;
  	}
  
-       /* For now let decls through.  */
- 
        /* Do not overwrite existing cliques (that includes clique, base
           pairs we just set).  */
        if (MR_DEPENDENCE_CLIQUE (base) == 0)
--- 7183,7199 ----
        if (TREE_CODE (ptr) == SSA_NAME
  	  && ! SSA_NAME_IS_DEFAULT_DEF (ptr))
  	{
! 	  /* We need to make sure 'ptr' doesn't include any of
  	     the restrict tags we added bases for in its points-to set.  */
! 	  varinfo_t vi = lookup_vi_for_tree (ptr);
! 	  if (! vi)
! 	    return false;
! 
! 	  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).  */
        if (MR_DEPENDENCE_CLIQUE (base) == 0)
*************** compute_dependence_clique (void)
*** 7255,7260 ****
--- 7266,7272 ----
  {
    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);
*************** compute_dependence_clique (void)
*** 7310,7347 ****
  	  /* Now look at possible dereferences of ptr.  */
  	  imm_use_iterator ui;
  	  gimple *use_stmt;
  	  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);
  	    }
  	}
      }
  
!   if (clique == 0)
!     return;
  
!   /* 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);
!       }
  }
  
  /* Compute points-to information for every SSA_NAME pointer in the
--- 7322,7367 ----
  	  /* 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;
! 	      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)
!     {
!       /* 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.  */
!       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);
! 	  }
!     }
  
!   BITMAP_FREE (rvars);
  }
  
  /* Compute points-to information for every SSA_NAME pointer in the
Index: gcc/testsuite/gcc.dg/vect/pr43434.c
===================================================================
*** gcc/testsuite/gcc.dg/vect/pr43434.c	(revision 0)
--- gcc/testsuite/gcc.dg/vect/pr43434.c	(working copy)
***************
*** 0 ****
--- 1,27 ----
+ /* { dg-do compile } */
+ 
+ typedef short DCTELEM;
+ typedef unsigned char uint8_t;
+ 
+ void diff_pixels_c(DCTELEM *__restrict__ block, const uint8_t *s1,
+ 		   const uint8_t *s2, int stride)
+ {
+   int i;
+ 
+   for(i=0;i<8;i++)
+     {
+       block[0] = s1[0] - s2[0];
+       block[1] = s1[1] - s2[1];
+       block[2] = s1[2] - s2[2];
+       block[3] = s1[3] - s2[3];
+       block[4] = s1[4] - s2[4];
+       block[5] = s1[5] - s2[5];
+       block[6] = s1[6] - s2[6];
+       block[7] = s1[7] - s2[7];
+       s1 += stride;
+       s2 += stride;
+       block += 8;
+     }
+ }
+ 
+ /* { dg-final { scan-tree-dump "vectorized 1 loops" "vect" { target { vect_int && { vect_unpack && vect_hw_misalign } } } } } */

Comments

Richard Biener April 18, 2016, 1:10 p.m. UTC | #1
On Mon, Feb 15, 2016 at 11:16 AM, Richard Biener <rguenther@suse.de> wrote:
>
> Currently we only disambiguate restrict based accesses against pointer
> based accesses that end up using a default def.  The following removes
> this restriction allowing disambiguation against any pointer based
> access where PTA computed that the pointer cannot point to one of the
> restrict tags we used to assign bases != 0 to.
>
> This results in extra disambigations (all non-restrict pointer IV
> uses were not handled previously), see the added vectorizer testcase.
>
> Bootstrapped and tested on x86_64-unknown-linux-gnu, queued for GCC 7.

Re-bootstrapped / tested and committed as r235147.

Richard.

> Richard.
>
> 2016-02-12  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.
>
> Index: gcc/tree-ssa-structalias.c
> ===================================================================
> *** gcc/tree-ssa-structalias.c  (revision 233369)
> --- gcc/tree-ssa-structalias.c  (working copy)
> *************** delete_points_to_sets (void)
> *** 7162,7174 ****
>     obstack_free (&final_solutions_obstack, NULL);
>   }
>
>   /* Mark "other" loads and stores as belonging to CLIQUE and with
>      base zero.  */
>
>   static bool
> ! visit_loadstore (gimple *, tree base, tree ref, void *clique_)
>   {
> !   unsigned short clique = (uintptr_t)clique_;
>     if (TREE_CODE (base) == MEM_REF
>         || TREE_CODE (base) == TARGET_MEM_REF)
>       {
> --- 7162,7181 ----
>     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 *data)
>   {
> !   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)
>       {
> *************** visit_loadstore (gimple *, tree base, tr
> *** 7176,7188 ****
>         if (TREE_CODE (ptr) == SSA_NAME
>           && ! SSA_NAME_IS_DEFAULT_DEF (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;
>         }
>
> -       /* For now let decls through.  */
> -
>         /* Do not overwrite existing cliques (that includes clique, base
>            pairs we just set).  */
>         if (MR_DEPENDENCE_CLIQUE (base) == 0)
> --- 7183,7199 ----
>         if (TREE_CODE (ptr) == SSA_NAME
>           && ! SSA_NAME_IS_DEFAULT_DEF (ptr))
>         {
> !         /* We need to make sure 'ptr' doesn't include any of
>              the restrict tags we added bases for in its points-to set.  */
> !         varinfo_t vi = lookup_vi_for_tree (ptr);
> !         if (! vi)
> !           return false;
> !
> !         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).  */
>         if (MR_DEPENDENCE_CLIQUE (base) == 0)
> *************** compute_dependence_clique (void)
> *** 7255,7260 ****
> --- 7266,7272 ----
>   {
>     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);
> *************** compute_dependence_clique (void)
> *** 7310,7347 ****
>           /* Now look at possible dereferences of ptr.  */
>           imm_use_iterator ui;
>           gimple *use_stmt;
>           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);
>             }
>         }
>       }
>
> !   if (clique == 0)
> !     return;
>
> !   /* 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);
> !       }
>   }
>
>   /* Compute points-to information for every SSA_NAME pointer in the
> --- 7322,7367 ----
>           /* 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;
> !             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)
> !     {
> !       /* 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.  */
> !       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);
> !         }
> !     }
>
> !   BITMAP_FREE (rvars);
>   }
>
>   /* Compute points-to information for every SSA_NAME pointer in the
> Index: gcc/testsuite/gcc.dg/vect/pr43434.c
> ===================================================================
> *** gcc/testsuite/gcc.dg/vect/pr43434.c (revision 0)
> --- gcc/testsuite/gcc.dg/vect/pr43434.c (working copy)
> ***************
> *** 0 ****
> --- 1,27 ----
> + /* { dg-do compile } */
> +
> + typedef short DCTELEM;
> + typedef unsigned char uint8_t;
> +
> + void diff_pixels_c(DCTELEM *__restrict__ block, const uint8_t *s1,
> +                  const uint8_t *s2, int stride)
> + {
> +   int i;
> +
> +   for(i=0;i<8;i++)
> +     {
> +       block[0] = s1[0] - s2[0];
> +       block[1] = s1[1] - s2[1];
> +       block[2] = s1[2] - s2[2];
> +       block[3] = s1[3] - s2[3];
> +       block[4] = s1[4] - s2[4];
> +       block[5] = s1[5] - s2[5];
> +       block[6] = s1[6] - s2[6];
> +       block[7] = s1[7] - s2[7];
> +       s1 += stride;
> +       s2 += stride;
> +       block += 8;
> +     }
> + }
> +
> + /* { dg-final { scan-tree-dump "vectorized 1 loops" "vect" { target { vect_int && { vect_unpack && vect_hw_misalign } } } } } */
> Index: gcc/testsuite/c-c++-common/goacc/kernels-alias-3.c
> ===================================================================
> --- gcc/testsuite/c-c++-common/goacc/kernels-alias-3.c  (revision 233418)
> +++ gcc/testsuite/c-c++-common/goacc/kernels-alias-3.c  (working copy)
> @@ -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: gcc/testsuite/c-c++-common/goacc/kernels-alias-4.c
> ===================================================================
> --- gcc/testsuite/c-c++-common/goacc/kernels-alias-4.c  (revision 233418)
> +++ gcc/testsuite/c-c++-common/goacc/kernels-alias-4.c  (working copy)
> @@ -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: gcc/testsuite/c-c++-common/goacc/kernels-alias-5.c
> ===================================================================
> --- gcc/testsuite/c-c++-common/goacc/kernels-alias-5.c  (revision 233418)
> +++ gcc/testsuite/c-c++-common/goacc/kernels-alias-5.c  (working copy)
> @@ -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: gcc/testsuite/c-c++-common/goacc/kernels-alias-6.c
> ===================================================================
> --- gcc/testsuite/c-c++-common/goacc/kernels-alias-6.c  (revision 233418)
> +++ gcc/testsuite/c-c++-common/goacc/kernels-alias-6.c  (working copy)
> @@ -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: gcc/testsuite/c-c++-common/goacc/kernels-alias-7.c
> ===================================================================
> --- gcc/testsuite/c-c++-common/goacc/kernels-alias-7.c  (revision 233418)
> +++ gcc/testsuite/c-c++-common/goacc/kernels-alias-7.c  (working copy)
> @@ -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: gcc/testsuite/c-c++-common/goacc/kernels-alias-8.c
> ===================================================================
> --- gcc/testsuite/c-c++-common/goacc/kernels-alias-8.c  (revision 233418)
> +++ gcc/testsuite/c-c++-common/goacc/kernels-alias-8.c  (working copy)
> @@ -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: gcc/testsuite/gcc.dg/gomp/pr68640.c
> ===================================================================
> --- gcc/testsuite/gcc.dg/gomp/pr68640.c (revision 233418)
> +++ gcc/testsuite/gcc.dg/gomp/pr68640.c (working copy)
> @@ -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" } } */
diff mbox

Patch

Index: gcc/testsuite/c-c++-common/goacc/kernels-alias-3.c
===================================================================
--- gcc/testsuite/c-c++-common/goacc/kernels-alias-3.c	(revision 233418)
+++ gcc/testsuite/c-c++-common/goacc/kernels-alias-3.c	(working copy)
@@ -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: gcc/testsuite/c-c++-common/goacc/kernels-alias-4.c
===================================================================
--- gcc/testsuite/c-c++-common/goacc/kernels-alias-4.c	(revision 233418)
+++ gcc/testsuite/c-c++-common/goacc/kernels-alias-4.c	(working copy)
@@ -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: gcc/testsuite/c-c++-common/goacc/kernels-alias-5.c
===================================================================
--- gcc/testsuite/c-c++-common/goacc/kernels-alias-5.c	(revision 233418)
+++ gcc/testsuite/c-c++-common/goacc/kernels-alias-5.c	(working copy)
@@ -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: gcc/testsuite/c-c++-common/goacc/kernels-alias-6.c
===================================================================
--- gcc/testsuite/c-c++-common/goacc/kernels-alias-6.c	(revision 233418)
+++ gcc/testsuite/c-c++-common/goacc/kernels-alias-6.c	(working copy)
@@ -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: gcc/testsuite/c-c++-common/goacc/kernels-alias-7.c
===================================================================
--- gcc/testsuite/c-c++-common/goacc/kernels-alias-7.c	(revision 233418)
+++ gcc/testsuite/c-c++-common/goacc/kernels-alias-7.c	(working copy)
@@ -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: gcc/testsuite/c-c++-common/goacc/kernels-alias-8.c
===================================================================
--- gcc/testsuite/c-c++-common/goacc/kernels-alias-8.c	(revision 233418)
+++ gcc/testsuite/c-c++-common/goacc/kernels-alias-8.c	(working copy)
@@ -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: gcc/testsuite/gcc.dg/gomp/pr68640.c
===================================================================
--- gcc/testsuite/gcc.dg/gomp/pr68640.c	(revision 233418)
+++ gcc/testsuite/gcc.dg/gomp/pr68640.c	(working copy)
@@ -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" } } */