arm.c (arm_autovectorize_vector_sizes): New function.
authorIra Rosen <ira.rosen@linaro.org>
Sun, 27 Mar 2011 08:59:10 +0000 (08:59 +0000)
committerIra Rosen <irar@gcc.gnu.org>
Sun, 27 Mar 2011 08:59:10 +0000 (08:59 +0000)
        * config/arm/arm.c (arm_autovectorize_vector_sizes): New
        function.
        (TARGET_VECTORIZE_AUTOVECTORIZE_VECTOR_SIZES): Define.

From-SVN: r171569

gcc/ChangeLog
gcc/config/arm/arm.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/vect/no-vfa-pr29145.c
gcc/testsuite/gcc.dg/vect/slp-3.c
gcc/testsuite/gcc.dg/vect/vect-outer-5.c

index 54dfbe8c7056a51b717a334ed1aadc1485d1c767..ec394f2e231018e153ba468a96ec706bc26f4a11 100644 (file)
@@ -1,3 +1,9 @@
+2011-03-27  Ira Rosen  <ira.rosen@linaro.org>
+
+       * config/arm/arm.c (arm_autovectorize_vector_sizes): New
+       function.
+       (TARGET_VECTORIZE_AUTOVECTORIZE_VECTOR_SIZES): Define.
+
 2011-03-26  Eric Botcazou  <ebotcazou@adacore.com>
 
        * basic-block.h (fixup_abnormal_edges): Adjust prototype.
index 59ab92630fd1e90bf2e347d940d774fb94b9dfa0..de9e6f9cd256a98d44b1db7469e00ca9a4486fcb 100644 (file)
@@ -252,6 +252,7 @@ static bool arm_builtin_support_vector_misalignment (enum machine_mode mode,
                                                     bool is_packed);
 static void arm_conditional_register_usage (void);
 static reg_class_t arm_preferred_rename_class (reg_class_t rclass);
+static unsigned int arm_autovectorize_vector_sizes (void);
 
 \f
 /* Table of machine attributes.  */
@@ -404,6 +405,9 @@ static const struct default_options arm_option_optimization_table[] =
 #define TARGET_VECTOR_MODE_SUPPORTED_P arm_vector_mode_supported_p
 #undef TARGET_VECTORIZE_PREFERRED_SIMD_MODE
 #define TARGET_VECTORIZE_PREFERRED_SIMD_MODE arm_preferred_simd_mode
+#undef TARGET_VECTORIZE_AUTOVECTORIZE_VECTOR_SIZES
+#define TARGET_VECTORIZE_AUTOVECTORIZE_VECTOR_SIZES \
+  arm_autovectorize_vector_sizes
 
 #undef  TARGET_MACHINE_DEPENDENT_REORG
 #define TARGET_MACHINE_DEPENDENT_REORG arm_reorg
@@ -23528,6 +23532,12 @@ arm_expand_sync (enum machine_mode mode,
     }
 }
 
+static unsigned int
+arm_autovectorize_vector_sizes (void)
+{
+  return TARGET_NEON_VECTORIZE_QUAD ? 16 | 8 : 0;
+}
+
 static bool
 arm_vector_alignment_reachable (const_tree type, bool is_packed)
 {
index 7b6dfa3285a3856061280bfac166824e94d49823..df0ab831bc87087013e33cd0c15d6119c5f6e1a8 100644 (file)
@@ -1,3 +1,10 @@
+2011-03-27  Ira Rosen  <ira.rosen@linaro.org>
+
+       * gcc.dg/vect/vect-outer-5.c: Reduce the distance between data
+       accesses to preserve the meaning of the test for doubleword vectors.
+       * gcc.dg/vect/no-vfa-pr29145.c: Likewise.
+       * gcc.dg/vect/slp-3.c: Reduce the loop bound for the same reason.
+
 2011-03-26  Janus Weil  <janus@gcc.gnu.org>
 
        PR fortran/48291
index 954474eb9256ca58a32b5f85773e8314b1ad75b4..507ac25c477e9992fbeb46124fd570083bb69358 100644 (file)
@@ -8,7 +8,7 @@ __attribute__ ((noinline))
 void with_restrict(int * __restrict p)
 {
   int i;
-  int *q = p - 2;
+  int *q = p - 1;
 
   for (i = 0; i < 1000; ++i) {
     p[i] = q[i];
@@ -19,7 +19,7 @@ __attribute__ ((noinline))
 void without_restrict(int * p)
 {
   int i;
-  int *q = p - 2;
+  int *q = p - 1;
 
   for (i = 0; i < 1000; ++i) {
     p[i] = q[i];
@@ -38,8 +38,8 @@ int main(void)
     a[i] = b[i] = i;
   }
 
-  with_restrict(a + 2);
-  without_restrict(b + 2);
+  with_restrict(a + 1);
+  without_restrict(b + 1);
 
   for (i = 0; i < 1002; ++i) {
     if (a[i] != b[i])
index 8c99b01e8e45e604cf068ca3fceb315a96f3d8bc..1413936f706c0dc1b7cd8ba01908606466c03a4b 100644 (file)
@@ -101,7 +101,7 @@ main1 ()
     }
 
   /* SLP with unrolling by 8.  */
-  for (i = 0; i < N/2; i++)
+  for (i = 0; i < N/4; i++)
     {
       out[i*9] = in[i*9];
       out[i*9 + 1] = in[i*9 + 1];
@@ -115,7 +115,7 @@ main1 ()
     }
 
   /* check results:  */
-  for (i = 0; i < N/2; i++)
+  for (i = 0; i < N/4; i++)
     {
       if (out[i*9] !=  in[i*9]
          || out[i*9 + 1] != in[i*9 + 1]
index f5027d626cce90283ad971413d44da3e6136edd1..05ed39a3da2bc5d30bc1961ad486d4c38e204fea 100644 (file)
@@ -17,7 +17,7 @@ int main1 ()
   float B[N] __attribute__ ((__aligned__(__BIGGEST_ALIGNMENT__)));
   float C[N] __attribute__ ((__aligned__(__BIGGEST_ALIGNMENT__)));
   float D[N] __attribute__ ((__aligned__(__BIGGEST_ALIGNMENT__)));
-  float E[4] = {0,1,2,480};
+  float E[4] = {0,480,960,1440};
   float s;
 
   int i, j;
@@ -55,7 +55,7 @@ int main1 ()
       s = 0;
       for (j=0; j<N; j+=4)
        s += C[j];
-      B[i+3] = B[i] + s;
+      B[i+1] = B[i] + s;
     }
 
   /* check results:  */