re PR tree-optimization/19049 (not vectorizing a fortran loop)
authorRichard Biener <rguenther@suse.de>
Thu, 22 Oct 2015 13:33:17 +0000 (13:33 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Thu, 22 Oct 2015 13:33:17 +0000 (13:33 +0000)
2015-10-22  Richard Biener  <rguenther@suse.de>

PR tree-optimization/19049
PR tree-optimization/65962
* tree-vect-data-refs.c (vect_analyze_group_access_1): Fall back
to strided accesses if single-element interleaving doesn't work.

* gcc.dg/vect/vect-strided-store-pr65962.c: New testcase.
* gcc.dg/vect/vect-63.c: Adjust.
* gcc.dg/vect/vect-70.c: Likewise.
* gcc.dg/vect/vect-strided-u8-i2-gap.c: Likewise.
* gcc.dg/vect/vect-strided-a-u8-i2-gap.c: Likewise.
* gfortran.dg/vect/pr19049.f90: Likewise.
* gfortran.dg/vect/vect-8.f90: Likewise.

From-SVN: r229172

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/vect/vect-63.c
gcc/testsuite/gcc.dg/vect/vect-70.c
gcc/testsuite/gcc.dg/vect/vect-strided-a-u8-i2-gap.c
gcc/testsuite/gcc.dg/vect/vect-strided-u8-i2-gap.c
gcc/testsuite/gfortran.dg/vect/pr19049.f90
gcc/testsuite/gfortran.dg/vect/vect-8.f90
gcc/tree-vect-data-refs.c

index 192360dc752d25fa40209f40598e50ad7f3bc565..1e06d1a46aed48309a02fed2c7e488fd06402666 100644 (file)
@@ -1,3 +1,10 @@
+2015-10-22  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/19049
+       PR tree-optimization/65962
+       * tree-vect-data-refs.c (vect_analyze_group_access_1): Fall back
+       to strided accesses if single-element interleaving doesn't work.
+
 2015-10-22  Richard Biener  <rguenther@suse.de>
 
        PR middle-end/68046
index 45a287f3ec149d7c3f58f309ffc591751b41fe2b..39260d6611c33f616105ed2c6362c3ce389b42e4 100644 (file)
@@ -1,3 +1,15 @@
+2015-10-22  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/19049
+       PR tree-optimization/65962
+       * gcc.dg/vect/vect-strided-store-pr65962.c: New testcase.
+       * gcc.dg/vect/vect-63.c: Adjust.
+       * gcc.dg/vect/vect-70.c: Likewise.
+       * gcc.dg/vect/vect-strided-u8-i2-gap.c: Likewise.
+       * gcc.dg/vect/vect-strided-a-u8-i2-gap.c: Likewise.
+       * gfortran.dg/vect/pr19049.f90: Likewise.
+       * gfortran.dg/vect/vect-8.f90: Likewise.
+
 2015-10-22  Richard Biener  <rguenther@suse.de>
 
        PR middle-end/68046
index 1afbd74b1d4db2820b20986b7e1908d50f8368c4..8d002a5e3c349bd4cbf9e37e8194e9a7450d0bde 100644 (file)
@@ -13,7 +13,7 @@ int main1 ()
   int ia[N*2][4][N];
 
   /* Multidimensional array. Aligned. 
-     The first dimension depends on j: not vectorizable. */
+     The first dimension depends on j: use strided stores. */
   for (i = 0; i < N; i++)
     {
       for (j = 0; j < N; j++)
@@ -42,4 +42,4 @@ int main (void)
   return main1 ();
 }
 
-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail *-*-* } } } */
+/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
index a94140ecabc688b569da0c444ebe3d8ef25d6741..0ec06a273df76f7d69c36e5b1511c630a9e85839 100644 (file)
@@ -37,7 +37,7 @@ int main1 ()
           abort ();
     }
   
-  /* not consecutive */
+  /* not consecutive, will use strided stores */
   for (i = 0; i < N; i++)
     for (j = 3; j < N-3; j++)
       { 
@@ -62,7 +62,7 @@ int main (void)
   return main1 ();
 }
           
-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
+/* { dg-final { scan-tree-dump-times "vectorized 2 loops" 1 "vect" } } */
 /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" } } */
 /* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" {target { vector_alignment_reachable} } } } */
 /* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 1 "vect" {target {{! vector_alignment_reachable} && {! vect_hw_misalign} } } } } */
index bb983b19ddabe7b5a6586c1d91a8e5475d2afe51..52fdcf6ee7d1e9b1e4d8981ea12e72896482e4ca 100644 (file)
@@ -44,7 +44,7 @@ main1 ()
     }
 
   ptr = arr;
-  /* Not vectorizable: gap in store.  */ 
+  /* gap in store, use strided stores  */ 
   for (i = 0; i < N; i++)
     {
       res[i].a = ptr->b;
@@ -71,5 +71,5 @@ int main (void)
   return 0;
 }
 
-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect"  { target vect_strided2 } } } */
+/* { dg-final { scan-tree-dump-times "vectorized 2 loops" 1 "vect"  { target vect_strided2 } } } */
   
index fcbf2cc8c9fbecb18dfb19e0b15b2daac69856de..8c541fe44a429e4beb533f06543bb332e297b812 100644 (file)
@@ -35,7 +35,7 @@ main1 (s *arr)
     }
 
   ptr = arr;
-  /* Not vectorizable: gap in store.  */ 
+  /* gap in store, use strided stores.  */ 
   for (i = 0; i < N; i++)
     {
       res[i].a = ptr->b;
@@ -73,5 +73,5 @@ int main (void)
   return 0;
 }
 
-/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect"  { target vect_strided2 } } } */
+/* { dg-final { scan-tree-dump-times "vectorized 2 loops" 1 "vect"  { target vect_strided2 } } } */
   
index 5f4b9b15c3dd96351884e06363e1115da39042ef..5e4a8da36b07202c8fce7e8caf056158cd2a5177 100644 (file)
@@ -18,7 +18,4 @@ subroutine s111 (ntimes,ld,n,ctime,dtime,a,b,c,d,e,aa,bb,cc)
       return
       end
 
-! { dg-final { scan-tree-dump-times "vectorized 1 loops" 0 "vect" } }
-! { dg-final { scan-tree-dump-times "complicated access pattern" 1 "vect" { xfail vect_multiple_sizes } } }
-! { dg-final { scan-tree-dump-times "complicated access pattern" 2 "vect" { target vect_multiple_sizes } } }
-
+! { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } }
index 324ab78d160fb0c44f9ae2f8effa939485ab6948..1b85a6152a40bec5399971ea65dff85fc604230a 100644 (file)
@@ -703,4 +703,4 @@ CALL track('KERNEL  ')
 RETURN
 END SUBROUTINE kernel
 
-! { dg-final { scan-tree-dump-times "vectorized 19 loops" 1 "vect" } }
+! { dg-final { scan-tree-dump-times "vectorized 20 loops" 1 "vect" } }
index 755b5a17e50d79c47980dbb7387e1261606048d8..b3ca9d6e1b86ebe34987991330989034493771d2 100644 (file)
@@ -2114,7 +2114,6 @@ vect_analyze_group_access_1 (struct data_reference *dr)
          dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
                           "not consecutive access ");
          dump_gimple_stmt (MSG_MISSED_OPTIMIZATION, TDF_SLIM, stmt, 0);
-         dump_printf (MSG_MISSED_OPTIMIZATION, "\n");
         }
 
       if (bb_vinfo)
@@ -2124,7 +2123,9 @@ vect_analyze_group_access_1 (struct data_reference *dr)
           return true;
         }
 
-      return false;
+      dump_printf_loc (MSG_NOTE, vect_location, "using strided accesses\n");
+      STMT_VINFO_STRIDED_P (stmt_info) = true;
+      return true;
     }
 
   if (GROUP_FIRST_ELEMENT (vinfo_for_stmt (stmt)) == stmt)