Increase array sizes in vect-tests to enable 256-bit vectorization
authorMichael Zolotukhin <michael.v.zolotukhin@intel.com>
Fri, 2 Dec 2011 19:49:10 +0000 (19:49 +0000)
committerH.J. Lu <hjl@gcc.gnu.org>
Fri, 2 Dec 2011 19:49:10 +0000 (11:49 -0800)
2011-12-02  Michael Zolotukhin  <michael.v.zolotukhin@intel.com>

* gcc.dg/vect/slp-13.c: Increase array size, add initialization.
* gcc.dg/vect/slp-24.c: Ditto.
* gcc.dg/vect/slp-3.c: Likewise and fix scans.
* gcc.dg/vect/slp-34.c: Ditto.
* gcc.dg/vect/slp-4.c: Ditto.
* gcc.dg/vect/slp-cond-2.c: Ditto.
* gcc.dg/vect/slp-multitypes-11.c: Ditto.
* gcc.dg/vect/vect-1.c: Ditto.
* gcc.dg/vect/vect-10.c: Ditto.
* gcc.dg/vect/vect-105.c: Ditto.
* gcc.dg/vect/vect-112.c: Ditto.
* gcc.dg/vect/vect-15.c: Ditto.
* gcc.dg/vect/vect-2.c: Ditto.
* gcc.dg/vect/vect-31.c: Ditto.
* gcc.dg/vect/vect-32.c: Ditto.
* gcc.dg/vect/vect-33.c: Ditto.
* gcc.dg/vect/vect-34.c: Ditto.
* gcc.dg/vect/vect-35.c: Ditto.
* gcc.dg/vect/vect-36.c: Ditto.
* gcc.dg/vect/vect-6.c: Ditto.
* gcc.dg/vect/vect-73.c: Ditto.
* gcc.dg/vect/vect-74.c: Ditto.
* gcc.dg/vect/vect-75.c: Ditto.
* gcc.dg/vect/vect-76.c: Ditto.
* gcc.dg/vect/vect-80.c: Ditto.
* gcc.dg/vect/vect-85.c: Ditto.
* gcc.dg/vect/vect-89.c: Ditto.
* gcc.dg/vect/vect-97.c: Ditto.
* gcc.dg/vect/vect-98.c: Ditto.
* gcc.dg/vect/vect-all.c: Ditto.
* gcc.dg/vect/vect-double-reduc-6.c: Ditto.
* gcc.dg/vect/vect-iv-8.c: Ditto.
* gcc.dg/vect/vect-iv-8a.c: Ditto.
* gcc.dg/vect/vect-outer-1.c: Ditto.
* gcc.dg/vect/vect-outer-1a.c: Ditto.
* gcc.dg/vect/vect-outer-1b.c: Ditto.
* gcc.dg/vect/vect-outer-2.c: Ditto.
* gcc.dg/vect/vect-outer-2a.c: Ditto.
* gcc.dg/vect/vect-outer-2c.c: Ditto.
* gcc.dg/vect/vect-outer-3.c: Ditto.
* gcc.dg/vect/vect-outer-3a.c: Ditto.
* gcc.dg/vect/vect-outer-4a.c: Ditto.
* gcc.dg/vect/vect-outer-4b.c: Ditto.
* gcc.dg/vect/vect-outer-4c.c: Ditto.
* gcc.dg/vect/vect-outer-4d.c: Ditto.
* gcc.dg/vect/vect-outer-4m.c: Ditto.
* gcc.dg/vect/vect-outer-fir-lb.c: Ditto.
* gcc.dg/vect/vect-outer-fir.c: Ditto.
* gcc.dg/vect/vect-over-widen-1.c: Ditto.
* gcc.dg/vect/vect-over-widen-2.c: Ditto.
* gcc.dg/vect/vect-over-widen-3.c: Ditto.
* gcc.dg/vect/vect-over-widen-4.c: Ditto.
* gcc.dg/vect/vect-reduc-1char.c: Ditto.
* gcc.dg/vect/vect-reduc-2char.c: Ditto.
* gcc.dg/vect/vect-reduc-pattern-1b.c: Ditto.
* gcc.dg/vect/vect-reduc-pattern-1c.c: Ditto.
* gcc.dg/vect/vect-reduc-pattern-2b.c: Ditto.
* gcc.dg/vect/vect-shift-2.c: Ditto.
* gcc.dg/vect/vect-strided-a-u8-i8-gap2.c: Ditto.
* gcc.dg/vect/vect-strided-a-u8-i8-gap7.c: Ditto.
* gcc.dg/vect/vect-strided-u8-i8-gap2.c: Ditto.
* gcc.dg/vect/vect-strided-u8-i8-gap4.c: Ditto.
* gcc.dg/vect/vect-strided-u8-i8-gap7.c: Ditto.

From-SVN: r181939

64 files changed:
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/vect/slp-13.c
gcc/testsuite/gcc.dg/vect/slp-24.c
gcc/testsuite/gcc.dg/vect/slp-3.c
gcc/testsuite/gcc.dg/vect/slp-34.c
gcc/testsuite/gcc.dg/vect/slp-4.c
gcc/testsuite/gcc.dg/vect/slp-cond-2.c
gcc/testsuite/gcc.dg/vect/slp-multitypes-11.c
gcc/testsuite/gcc.dg/vect/vect-1.c
gcc/testsuite/gcc.dg/vect/vect-10.c
gcc/testsuite/gcc.dg/vect/vect-105.c
gcc/testsuite/gcc.dg/vect/vect-112.c
gcc/testsuite/gcc.dg/vect/vect-15.c
gcc/testsuite/gcc.dg/vect/vect-2.c
gcc/testsuite/gcc.dg/vect/vect-31.c
gcc/testsuite/gcc.dg/vect/vect-32.c
gcc/testsuite/gcc.dg/vect/vect-33.c
gcc/testsuite/gcc.dg/vect/vect-34.c
gcc/testsuite/gcc.dg/vect/vect-35.c
gcc/testsuite/gcc.dg/vect/vect-36.c
gcc/testsuite/gcc.dg/vect/vect-6.c
gcc/testsuite/gcc.dg/vect/vect-73.c
gcc/testsuite/gcc.dg/vect/vect-74.c
gcc/testsuite/gcc.dg/vect/vect-75.c
gcc/testsuite/gcc.dg/vect/vect-76.c
gcc/testsuite/gcc.dg/vect/vect-80.c
gcc/testsuite/gcc.dg/vect/vect-85.c
gcc/testsuite/gcc.dg/vect/vect-89.c
gcc/testsuite/gcc.dg/vect/vect-97.c
gcc/testsuite/gcc.dg/vect/vect-98.c
gcc/testsuite/gcc.dg/vect/vect-all.c
gcc/testsuite/gcc.dg/vect/vect-double-reduc-6.c
gcc/testsuite/gcc.dg/vect/vect-iv-8.c
gcc/testsuite/gcc.dg/vect/vect-iv-8a.c
gcc/testsuite/gcc.dg/vect/vect-outer-1.c
gcc/testsuite/gcc.dg/vect/vect-outer-1a.c
gcc/testsuite/gcc.dg/vect/vect-outer-1b.c
gcc/testsuite/gcc.dg/vect/vect-outer-2.c
gcc/testsuite/gcc.dg/vect/vect-outer-2a.c
gcc/testsuite/gcc.dg/vect/vect-outer-2c.c
gcc/testsuite/gcc.dg/vect/vect-outer-3.c
gcc/testsuite/gcc.dg/vect/vect-outer-3a.c
gcc/testsuite/gcc.dg/vect/vect-outer-4a.c
gcc/testsuite/gcc.dg/vect/vect-outer-4b.c
gcc/testsuite/gcc.dg/vect/vect-outer-4c.c
gcc/testsuite/gcc.dg/vect/vect-outer-4d.c
gcc/testsuite/gcc.dg/vect/vect-outer-4m.c
gcc/testsuite/gcc.dg/vect/vect-outer-fir-lb.c
gcc/testsuite/gcc.dg/vect/vect-outer-fir.c
gcc/testsuite/gcc.dg/vect/vect-over-widen-1.c
gcc/testsuite/gcc.dg/vect/vect-over-widen-2.c
gcc/testsuite/gcc.dg/vect/vect-over-widen-3.c
gcc/testsuite/gcc.dg/vect/vect-over-widen-4.c
gcc/testsuite/gcc.dg/vect/vect-reduc-1char.c
gcc/testsuite/gcc.dg/vect/vect-reduc-2char.c
gcc/testsuite/gcc.dg/vect/vect-reduc-pattern-1b.c
gcc/testsuite/gcc.dg/vect/vect-reduc-pattern-1c.c
gcc/testsuite/gcc.dg/vect/vect-reduc-pattern-2b.c
gcc/testsuite/gcc.dg/vect/vect-shift-2.c
gcc/testsuite/gcc.dg/vect/vect-strided-a-u8-i8-gap2.c
gcc/testsuite/gcc.dg/vect/vect-strided-a-u8-i8-gap7.c
gcc/testsuite/gcc.dg/vect/vect-strided-u8-i8-gap2.c
gcc/testsuite/gcc.dg/vect/vect-strided-u8-i8-gap4.c
gcc/testsuite/gcc.dg/vect/vect-strided-u8-i8-gap7.c

index c4bc564c389a76cc5c5739f62c9a554e7a86aa26..dcf2343d6378952f102d11d4aa8e5dbf9ad22f14 100644 (file)
@@ -1,3 +1,69 @@
+2011-12-02  Michael Zolotukhin  <michael.v.zolotukhin@intel.com>
+
+       * gcc.dg/vect/slp-13.c: Increase array size, add initialization.
+       * gcc.dg/vect/slp-24.c: Ditto.
+       * gcc.dg/vect/slp-3.c: Likewise and fix scans.
+       * gcc.dg/vect/slp-34.c: Ditto.
+       * gcc.dg/vect/slp-4.c: Ditto.
+       * gcc.dg/vect/slp-cond-2.c: Ditto.
+       * gcc.dg/vect/slp-multitypes-11.c: Ditto.
+       * gcc.dg/vect/vect-1.c: Ditto.
+       * gcc.dg/vect/vect-10.c: Ditto.
+       * gcc.dg/vect/vect-105.c: Ditto.
+       * gcc.dg/vect/vect-112.c: Ditto.
+       * gcc.dg/vect/vect-15.c: Ditto.
+       * gcc.dg/vect/vect-2.c: Ditto.
+       * gcc.dg/vect/vect-31.c: Ditto.
+       * gcc.dg/vect/vect-32.c: Ditto.
+       * gcc.dg/vect/vect-33.c: Ditto.
+       * gcc.dg/vect/vect-34.c: Ditto.
+       * gcc.dg/vect/vect-35.c: Ditto.
+       * gcc.dg/vect/vect-36.c: Ditto.
+       * gcc.dg/vect/vect-6.c: Ditto.
+       * gcc.dg/vect/vect-73.c: Ditto.
+       * gcc.dg/vect/vect-74.c: Ditto.
+       * gcc.dg/vect/vect-75.c: Ditto.
+       * gcc.dg/vect/vect-76.c: Ditto.
+       * gcc.dg/vect/vect-80.c: Ditto.
+       * gcc.dg/vect/vect-85.c: Ditto.
+       * gcc.dg/vect/vect-89.c: Ditto.
+       * gcc.dg/vect/vect-97.c: Ditto.
+       * gcc.dg/vect/vect-98.c: Ditto.
+       * gcc.dg/vect/vect-all.c: Ditto.
+       * gcc.dg/vect/vect-double-reduc-6.c: Ditto.
+       * gcc.dg/vect/vect-iv-8.c: Ditto.
+       * gcc.dg/vect/vect-iv-8a.c: Ditto.
+       * gcc.dg/vect/vect-outer-1.c: Ditto.
+       * gcc.dg/vect/vect-outer-1a.c: Ditto.
+       * gcc.dg/vect/vect-outer-1b.c: Ditto.
+       * gcc.dg/vect/vect-outer-2.c: Ditto.
+       * gcc.dg/vect/vect-outer-2a.c: Ditto.
+       * gcc.dg/vect/vect-outer-2c.c: Ditto.
+       * gcc.dg/vect/vect-outer-3.c: Ditto.
+       * gcc.dg/vect/vect-outer-3a.c: Ditto.
+       * gcc.dg/vect/vect-outer-4a.c: Ditto.
+       * gcc.dg/vect/vect-outer-4b.c: Ditto.
+       * gcc.dg/vect/vect-outer-4c.c: Ditto.
+       * gcc.dg/vect/vect-outer-4d.c: Ditto.
+       * gcc.dg/vect/vect-outer-4m.c: Ditto.
+       * gcc.dg/vect/vect-outer-fir-lb.c: Ditto.
+       * gcc.dg/vect/vect-outer-fir.c: Ditto.
+       * gcc.dg/vect/vect-over-widen-1.c: Ditto.
+       * gcc.dg/vect/vect-over-widen-2.c: Ditto.
+       * gcc.dg/vect/vect-over-widen-3.c: Ditto.
+       * gcc.dg/vect/vect-over-widen-4.c: Ditto.
+       * gcc.dg/vect/vect-reduc-1char.c: Ditto.
+       * gcc.dg/vect/vect-reduc-2char.c: Ditto.
+       * gcc.dg/vect/vect-reduc-pattern-1b.c: Ditto.
+       * gcc.dg/vect/vect-reduc-pattern-1c.c: Ditto.
+       * gcc.dg/vect/vect-reduc-pattern-2b.c: Ditto.
+       * gcc.dg/vect/vect-shift-2.c: Ditto.
+       * gcc.dg/vect/vect-strided-a-u8-i8-gap2.c: Ditto.
+       * gcc.dg/vect/vect-strided-a-u8-i8-gap7.c: Ditto.
+       * gcc.dg/vect/vect-strided-u8-i8-gap2.c: Ditto.
+       * gcc.dg/vect/vect-strided-u8-i8-gap4.c: Ditto.
+       * gcc.dg/vect/vect-strided-u8-i8-gap7.c: Ditto.
+
 2011-12-02  Georg-Johann Lay  <avr@gjlay.de>
 
        * gcc.c-torture/execute/vector-subscript-1.c (main): Fix
index 655e6ade1d0ceb58908ad13547a90e0bf0498155..e1c4e415f67217fee6573b2a2094ed2f67d76211 100644 (file)
@@ -3,17 +3,25 @@
 #include <stdarg.h>
 #include "tree-vect.h"
 
-#define N 8 
+#define N 64
+volatile int y = 0;
 
 int
 main1 ()
 {
   int i;
   unsigned short out[N*8];
-  unsigned short in[N*8] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63};
-  unsigned int in2[N*8] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63};
+  unsigned short in[N*8];
+  unsigned int in2[N*8];
   unsigned int out2[N*8];
 
+  for (i = 0; i < N*8; i++)
+    {
+      in[i] = in2[i] = i;
+      if (y) /* Avoid vectorization.  */
+       abort ();
+    }
+
   /* Induction is not SLPable yet.  */
   for (i = 0; i < N; i++)
     {
index 61c53f08fa688021147e79f9ce6ecc0b0bc460d7..690422231bd428902c1ceac4997096bf687349f0 100644 (file)
@@ -3,8 +3,7 @@
 #include <stdarg.h>
 #include "tree-vect.h"
 
-#define N 16
-#define DIFF 242
+#define N 64
 
 typedef struct {
    unsigned char a;
@@ -13,8 +12,11 @@ typedef struct {
    unsigned char d;
 } s;
 
-unsigned char ub[N*2] = {1,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,1,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
-unsigned char uc[N] = {1,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
+unsigned char ub[N*2];
+unsigned char uc[N];
+
+volatile int y = 0;
+unsigned char check_diff = 2;
 
 void
 main1 (unsigned char x, unsigned char max_result, unsigned char min_result, s *arr)
@@ -28,7 +30,7 @@ main1 (unsigned char x, unsigned char max_result, unsigned char min_result, s *a
   s out[N];
 
   for (i = 0; i < N; i++) {
-    udiff += (unsigned char)(ub[i] - uc[i]);
+    udiff += (unsigned char) (ub[i] - uc[i]);
 
     ua1[2*i+1] = ub[2*i+1];
     ua1[2*i] = ub[2*i];
@@ -52,7 +54,7 @@ main1 (unsigned char x, unsigned char max_result, unsigned char min_result, s *a
   }
 
   /* check results:  */
-  if (udiff != DIFF)
+  if (udiff != check_diff)
     abort ();
 }
 
@@ -61,6 +63,21 @@ int main (void)
   int i; 
   s arr[N];
 
+  check_diff = 2;
+  ub[0] = uc[0] = 1;
+  for (i = 1; i < N; i++) {
+    ub[i] = (i%5 == 0)?i*3:i;
+    uc[i] = i;
+    check_diff += (unsigned char) (ub[i] - uc[i]);
+    if (y) /* Avoid vectorization.  */
+      abort ();
+  }
+  for (; i < 2*N; i++) {
+    ub[i] = 0;
+    if (y) /* Avoid vectorization.  */
+      abort ();
+  }
+
   for (i = 0; i < N; i++)
     {
       arr[i].a = i + 9;
index 7d9bd563739ab9170222de5a0b72cd71e3d4d45d..6c6a655b16ff8364a8904dc8d9c56aeea980d32a 100644 (file)
@@ -3,9 +3,10 @@
 #include <stdarg.h>
 #include "tree-vect.h"
 
-#define N 12
+#define N 96
 
-unsigned short in[N*8] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31};
+unsigned short in[N*8];
+volatile int y = 0;
 
 int
 main1 ()
@@ -13,6 +14,13 @@ main1 ()
   int i;
   unsigned short out[N*8];
 
+  for (i = 0; i < N*8; i++)
+    {
+      in[i] = i&63;
+      if (y) /* Avoid vectorization.  */
+       abort ();
+    }
+
   for (i = 0; i < N; i++)
     {
       out[i*8] = in[i*8];
@@ -141,7 +149,7 @@ int main (void)
   return 0;
 }
 
-/* { dg-final { scan-tree-dump-times "vectorized 3 loops" 1 "vect" } } */
-/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 3 "vect" } } */
+/* { dg-final { scan-tree-dump-times "vectorized 4 loops" 1 "vect" } } */
+/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 4 "vect" } } */
 /* { dg-final { cleanup-tree-dump "vect" } } */
   
index 63dbab051527e868867485e0e68d0fc61fb3218d..39b28e5464db30342a17213de044a784400cb2d0 100644 (file)
@@ -3,10 +3,11 @@
 #include <stdarg.h>
 #include "tree-vect.h"
 
-#define N 
+#define N 64
 
-unsigned short in[N*8] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63};
-unsigned short in2[N*8] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63};
+unsigned short in[N*8];
+unsigned short in2[N*8];
+volatile int y = 0;
 
 int
 main1 ()
@@ -15,6 +16,13 @@ main1 ()
   unsigned short out[N*8];
   unsigned short out2[N*8];
 
+  for (i = 0; i < N*8; i++)
+    {
+      in[i] = in2[i] = i;
+      if (y) /* Avoid vectorization.  */
+       abort ();
+    }
+
   /* SLP with unrolling by 8.  */
   for (i = 0; i < N; i++)
     {
index 50ad2bd53a47eb08e62b8b5b0d4b21a3ef1061ca..3622f9d249a4c55f5c6ec090f9c1d4a137691171 100644 (file)
@@ -3,16 +3,24 @@
 #include <stdarg.h>
 #include "tree-vect.h"
 
-#define N 16 
+#define N 128
+volatile int y = 0;
 
 int
 main1 ()
 {
   int i;
   unsigned short out[N*8];
-  unsigned short in[N*8] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63};
+  unsigned short in[N*8];
   unsigned int ia[N*2];
 
+  for (i = 0; i < N*8; i++)
+    {
+      in[i] = i;
+      if (y) /* Avoid vectorization.  */
+       abort ();
+    }
+
   for (i = 0; i < N; i++)
     {
       out[i*8] = in[i*8];
index c73933fce0fe94cbeb5c98fbc633cd97680e7ba2..8217b764af0f11f753ffd8313ecd28e3c8da9841 100644 (file)
@@ -1,7 +1,7 @@
 /* { dg-require-effective-target vect_cond_mixed } */
 #include "tree-vect.h"
 
-#define N 32
+#define N 128
 int d[N], e[N], f[N];
 unsigned char k[N];
 float a[N], b[N];
index 602517bfcd129d86970605e185279edc907549eb..8ead45ee194647f7af6eddd253179affa4a760bd 100644 (file)
@@ -3,7 +3,7 @@
 #include <stdarg.h>
 #include "tree-vect.h"
 
-#define N 1
+#define N 144
 
 struct s 
 {
@@ -12,7 +12,8 @@ struct s
   int c;
 };
 
-char in[N*3] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53};
+char in[N*3];
+volatile int y = 0;
 
 __attribute__ ((noinline)) int
 main1 ()
@@ -20,6 +21,13 @@ main1 ()
   int i;
   struct s out[N];
 
+  for (i = 0; i < N; i++)
+    {
+      in[i] = i&127;
+      if (y) /* Avoid vectorization.  */
+       abort ();
+    }
+
   for (i = 0; i < N; i++)
     {
       out[i].a = (int) in[i*3] + 1;
index 04392ea78dab22007fa617ee4a6728e889a2e43b..3fe51228531835d8e8a7b6a441b421f4d83d6670 100644 (file)
@@ -2,7 +2,7 @@
 /* { dg-require-effective-target vect_int } */
 /* { dg-require-effective-target vect_float } */
 
-#define N 16
+#define N 128
 
 void fbar (float *);
 void ibar (int *);
index faa500d2a18b2ede615a92d765cf9e839e815228..393416eb38a3feee9a52c8d964135bb34fef38d6 100644 (file)
@@ -1,16 +1,28 @@
 /* { dg-do compile } */
 /* { dg-require-effective-target vect_int } */
+#include <stdlib.h>
 
-#define N 16
+#define N 128
 
 short a[N];
 short d[N];
 
+volatile int y = 0;
+
 int foo ()
 {
   int i;
-  short b[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
-  short c[N] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
+  short b[N];
+  short c[N];
+  for (i = 0; i < N/2; i++)
+    {
+      b[i] = i*3;
+      c[i] = i;
+
+      /* Avoid vectorization.  */
+      if (y)
+       abort ();
+    }
 
   /* Strided access pattern.  */
   for (i = 0; i < N/2; i++)
index bbf42af897ffa24319972f39e2b94c76d8ae06c3..f2e68aeac41ad1d6c72980d6b7905e6c88d5532b 100644 (file)
@@ -4,7 +4,7 @@
 #include <stdarg.h>
 #include "tree-vect.h"
 
-#define N 4
+#define N 16
 
 struct extraction
 {
@@ -12,17 +12,51 @@ struct extraction
   int b[N][N];
 };
 
-static int a[N][N] = {{1,2,3,11},{4,5,6,12},{7,8,9,13},{34,45,67,83}};
-static int b[N][N] = {{17,28,15,23},{0,2,3,24},{4,31,82,25},{29,31,432,256}};
-static int c[N][N] = {{1,2,3,11},{4,9,13,34},{45,67,83,13},{34,45,67,83}};
+static int a[N][N];
+static int b[N][N];
+static int c[N][N];
 
 volatile int y;
 
 __attribute__ ((noinline))
 int main1 (int x) {
-  int i,j;
+  int i,j, off;
   struct extraction *p;
   p = (struct extraction *) malloc (sizeof (struct extraction));
+  for (i = 0; i < N; i++)
+   {
+    for (j = 0; j < N; j++)
+     {
+       a[i][j] = (i*7 + j*17)%53;
+       b[i][j] = (i*11+ j*13)%41;
+       if (y)
+        abort (); /* to avoid vectorization.  */
+     }
+   }
+  for (i = 0; i < N; i++)
+   {
+    for (j = 0; j < N; j++)
+     {
+       c[i][j] = a[i][j];
+       if (y)
+        abort (); /* to avoid vectorization.  */
+     }
+   }
+  for (i = 1; i < N; i++)
+  {
+    for (j = 0; j < N; j++)
+    {
+      off = x + i + j + N+1;
+      if (x + i + j > N*N-1)
+       break;
+      if (off > N*N-1)
+       *(&c[0][0]+x+i+j) = *(&b[0][0] + off - N*N);
+      else
+       *(&c[0][0]+x+i+j) = *(&a[0][0] + off);
+       if (y)
+        abort (); /* to avoid vectorization.  */
+    }
+  }
 
   for (i = 0; i < N; i++)
    {
@@ -33,7 +67,7 @@ int main1 (int x) {
        /* Because Y is volatile, the compiler cannot move this check out
          of the loop.  */
        if (y)
-        abort (); /* to avoid vectorization  */
+        abort (); /* to avoid vectorization.  */
      }
    }
 
@@ -42,7 +76,7 @@ int main1 (int x) {
   {
     for (j = 0; j < N; j++)
     {
-       *((int *)p + x + i + j) = *((int *)p + x + i + j + 5);
+       *((int *)p + x + i + j) = *((int *)p + x + i + j + N+1);
     }
   }
 
@@ -52,7 +86,7 @@ int main1 (int x) {
     for (j = 0; j < N; j++)
      {
        if (p->a[i][j] != c[i][j])
-         abort();
+         abort ();
      }
   }
   return 0;
@@ -66,7 +100,7 @@ int main (void)
 }
 
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
-/*  { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 2 "vect" { target vect_no_align } } } */
+/* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 2 "vect" { target vect_no_align } } } */
 /* { dg-final { scan-tree-dump-times "possible dependence between data-refs" 0 "vect" } } */
 /* { dg-final { cleanup-tree-dump "vect" } } */
 
index 4d954d10829b5eadf88d523d36e57abfacce2971..a1302c1e93685fa133a729e24c4aefeff765dab8 100644 (file)
@@ -3,16 +3,27 @@
 #include <stdarg.h>
 #include "tree-vect.h"
 
-#define N 16
+#define N 128
 
-char cb[N] = {2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17};
-char cc[N] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
+char cb[N];
+char cc[N];
+
+volatile int y = 0;
 
 __attribute__ ((noinline)) int
 main1 (void)
 {
   int i;
   int diff = 0;
+  int check_diff = 0;
+  for (i = 0; i < N; i++) {
+    cb[i] = i + 2;
+    cc[i] = i + 1;
+    check_diff += (cb[i] - cc[i]);
+    /* Avoid vectorization.  */
+    if (y)
+      abort ();
+  }
 
   /* Cross-iteration cycle.  */
   diff = 0;
@@ -21,8 +32,8 @@ main1 (void)
   }
 
   /* Check results.  */
-  if (diff != 16)
-    abort();
+  if (diff != check_diff)
+    abort ();
 
   return 0;
 }
index ba7599162dba1a614f738d2a41a1a729280e20fc..cbc11c2074576db9634ef46a1e18102ea9b5150b 100644 (file)
@@ -3,14 +3,23 @@
 #include <stdarg.h>
 #include "tree-vect.h"
 
-#define N 16
+#define N 128
+
+volatile int y = 0;
 
 __attribute__ ((noinline))
 int main1 ()
 {
   int i;
   int a[N];
-  int b[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
+  int b[N];
+
+  for (i = 0; i <N; i++)
+    {
+      b[i] = i*3;
+      if (y)
+       abort ();
+    }
 
   /* Not vectorizable yet (reverse access and forward access).  */
   for (i = N; i > 0; i--)
index 5d4fc914a970dd6ee73d1581dd30153a5aac8b3d..e6399ff212f8e62edf8e4211bbc4bd559bfbce9d 100644 (file)
@@ -3,16 +3,26 @@
 #include <stdarg.h>
 #include "tree-vect.h"
 
-#define N 16
+#define N 128
 
-char cb[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
+char cb[N];
 char ca[N];
 
+volatile int y = 0;
+
 __attribute__ ((noinline)) 
 int main1 ()
 {  
   int i;
 
+  for (i = 0; i < N; i++)
+    {
+      cb[i] = i*3;
+      /* To avoid vectorization.  */
+      if (y)
+       abort ();
+    }
+
   for (i = 0; i < N; i++)
     {
       ca[i] = cb[i];
index 8719fc9d27ef9cae46d0ee70c64ef8ac40566b54..c6861fab78b6059166f2e71d2c1cff9aa3ba91cf 100644 (file)
@@ -3,7 +3,7 @@
 #include <stdarg.h>
 #include "tree-vect.h"
 
-#define N 32
+#define N 256
 
 struct t{
   int k[N];
index c869f5ec98974c913c902be9b05119d9fb807270..143ebf52247786e11ab301c7c2462ffed766f00b 100644 (file)
@@ -3,7 +3,7 @@
 #include <stdarg.h>
 #include "tree-vect.h"
 
-#define N 16
+#define N 128
  
 __attribute__ ((noinline))
 int main1 ()
index d35bce4d6f66807f3fe7d880889a141cc455dd0b..261d89af4f23d7699b4b17e24b0cd1df3518e5a0 100644 (file)
@@ -4,7 +4,7 @@
 #include <stdarg.h>
 #include "tree-vect.h"
 
-#define N 16
+#define N 128
 struct test {
   char ca[N];
 };
index df18f774e5dc163f17ca148309da4c2f5f453dd3..3f059c6b9d06867f083f5bec13ba4226b0e833ac 100644 (file)
@@ -3,18 +3,27 @@
 #include <stdarg.h>
 #include "tree-vect.h"
 
-#define N 16
+#define N 128
 
 struct {
   char ca[N];
 } s;
-char cb[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
+char cb[N];
+
+volatile int y = 0;
+
 __attribute__ ((noinline))
 int main1 ()
 {  
   int i;
 
+  for (i = 0; i < N; i++)
+    {
+      cb[i] = i*3;
+      /* To avoid vectorization.  */
+      if (y)
+       abort ();
+    }
   for (i = 0; i < N; i++)
     {
       s.ca[i] = cb[i];
index 0f4284a6257d564628b564713c35c8cea36afa32..130e37647bfc7a79bd61969538f2ce890727ed24 100644 (file)
@@ -3,7 +3,7 @@
 #include <stdarg.h>
 #include "tree-vect.h"
 
-#define N 16
+#define N 128
  
 __attribute__ ((noinline))
 int main1 ()
index 20df3940a48131a3857e29f5c0c5af3f2b731868..34f0d5ab8eae193877df072843692bafc2e65b3f 100644 (file)
@@ -3,7 +3,7 @@
 #include <stdarg.h>
 #include "tree-vect.h"
 
-#define N 16
+#define N 128
  
 __attribute__ ((noinline))
 int main1 ()
index 5f2e0ea59364cabb817d01dec61f1eacc5f3027b..4dcb1bea0f1ec9d350175c03fc6a4bac0b5e5ab4 100644 (file)
@@ -3,20 +3,41 @@
 #include <stdarg.h>
 #include "tree-vect.h"
 
-#define N 16
+#define N 128
 
-float results1[N] = {192.00,240.00,288.00,336.00,384.00,432.00,480.00,528.00,0.00};
-float results2[N] = {0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,54.00,120.00,198.00,288.00,390.00,504.00,630.00};
+float results1[N];
+float results2[N];
 float a[N] = {0};
 float e[N] = {0};
-float b[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
-float c[N] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
+float b[N];
+float c[N];
+
+volatile int y = 0;
 
 __attribute__ ((noinline))
 int main1 ()
 {
   int i;
 
+  for (i=0; i<N; i++)
+    {
+      b[i] = i*3;
+      c[i] = i;
+      results1[i] = 0;
+      results2[i] = 0;
+      /* Avoid vectorization.  */
+      if (y)
+       abort ();
+    }
+  for (i=0; i<N/2; i++)
+    {
+      results1[i] = b[i+N/2] * c[i+N/2] - b[i] * c[i];
+      results2[i+N/2] = b[i] * c[i+N/2] + b[i+N/2] * c[i];
+      /* Avoid vectorization.  */
+      if (y)
+       abort ();
+    }
+
   for (i = 0; i < N/2; i++)
     { 
       a[i] = b[i+N/2] * c[i+N/2] - b[i] * c[i];
index ee3c6e60e15be974b387d8c101f7ad19a38b209a..19d8d24e0ac24473aad35b3b0e9e9ddf5b650961 100644 (file)
@@ -3,18 +3,27 @@
 #include <stdarg.h>
 #include "tree-vect.h"
 
-#define N 16
+#define N 128
 
 int ic[N*2];
-int ib[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
+int ib[N];
 
 #define ia (ic+N)
 
+volatile int y = 0;
+
 __attribute__ ((noinline))
 int main1 ()
 {
   int i, j;
 
+  for (i = 0; i < N; i++)
+    {
+      ib[i] = i*3;
+      if (y)
+       abort ();
+    }
+
   for (i = 0; i < N; i++)
     {
        ia[i] = ib[i];
@@ -24,7 +33,7 @@ int main1 ()
   for (i = 0; i < N; i++)
     {
        if (ia[i] != ib[i])
-         abort();
+         abort ();
     }
 
   return 0;
index a680b9fb01b79d5b763f5cada1bb70e81fa3b0b6..f8e973ef358a450ca7c6770905faedd4a56b59c4 100644 (file)
@@ -3,7 +3,7 @@
 #include <stdarg.h>
 #include "tree-vect.h"
 
-#define N 16
+#define N 128
 
 /* Check handling of accesses for which the "initial condition" -
    the expression that represents the first location accessed - is
@@ -13,12 +13,28 @@ float a[N] __attribute__ ((__aligned__(__BIGGEST_ALIGNMENT__)));
 float b[N+4] __attribute__ ((__aligned__(__BIGGEST_ALIGNMENT__))) = {0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 7.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0}; 
 float c[N] __attribute__ ((__aligned__(__BIGGEST_ALIGNMENT__))) = {0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 7.5, 9.5, 10.5, 11.5, 12.5, 13.5, 14.5, 15.5};
 
+volatile int y = 0;
+
 __attribute__ ((noinline)) int
 main1 (float *__restrict__  pa, float * __restrict__ pb, float * __restrict__ pc)
 {
   int i;
   float *q = pb + 4;
 
+  for (i = 0; i < N; i++)
+    {
+      b[i] = i;
+      c[i] = 0.5 + i;
+      if (y)
+       abort ();
+    }
+  for (; i < N+4; i++)
+    {
+      b[i] = i;
+      if (y)
+       abort ();
+    }
+
   for (i = 0; i < N; i++)
     {
       pa[i] = q[i] * pc[i];
@@ -27,7 +43,7 @@ main1 (float *__restrict__  pa, float * __restrict__ pb, float * __restrict__ pc
   for (i = 0; i < N; i++)
     {
       if (pa[i] != q[i] * pc[i])
-       abort();
+       abort ();
     }
   
   return 0;
index 092a3013e07250296cec0dbd7b5886dedc226e2a..1c70cc2c5186006c48cf560e4be2e0a4513bdbbb 100644 (file)
@@ -3,14 +3,16 @@
 #include <stdarg.h>
 #include "tree-vect.h"
 
-#define N 8
+#define N 120
 #define OFF 8
 
 /* Check handling of accesses for which the "initial condition" -
    the expression that represents the first location accessed - is
    more involved than just an ssa_name.  */
 
-int ib[N+OFF] __attribute__ ((__aligned__(__BIGGEST_ALIGNMENT__))) = {0, 1, 3, 5, 7, 11, 13, 17, 0, 2, 6, 10, 14, 22, 26, 34};
+int ib[N+OFF] __attribute__ ((__aligned__(__BIGGEST_ALIGNMENT__))) = {0, 1, 3, 5, 7, 11, 13, 17};
+
+volatile int y = 0;
 
 __attribute__ ((noinline))
 int main1 (int *ib)
@@ -18,6 +20,12 @@ int main1 (int *ib)
   int i;
   int ia[N];
 
+  for (i = OFF; i < N+OFF; i++)
+    {
+      ib[i] = ib[i%OFF]*(i/OFF);
+      if (y)
+       abort ();
+    }
   for (i = 0; i < N; i++)
     {
       ia[i] = ib[i+OFF];
index d771302422426cac39d9a7e57ccc8613432548f1..edb0790e5a4bb996d14ff6133128283b8562a403 100644 (file)
@@ -3,21 +3,30 @@
 #include <stdarg.h>
 #include "tree-vect.h"
 
-#define N 24
+#define N 124
 #define OFF 4
 
 /* Check handling of accesses for which the "initial condition" -
    the expression that represents the first location accessed - is
    more involved than just an ssa_name.  */
 
-int ib[N+OFF] __attribute__ ((__aligned__(__BIGGEST_ALIGNMENT__))) = {0, 1, 3, 5, 7, 11, 13, 17, 0, 2, 6, 10};
-int ic[N+OFF] = {0, 1, 3, 5, 7, 11, 13, 17, 0, 2, 6, 10};
+int ib[N+OFF] __attribute__ ((__aligned__(__BIGGEST_ALIGNMENT__))) = {0, 1, 3, 5, 7, 11, 13, 17};
+int ic[N+OFF] = {0, 1, 3, 5, 7, 11, 13, 17};
+
+volatile int y = 0;
 
 __attribute__ ((noinline))
 int main1 (int *pib)
 {
   int i;
   int ia[N+OFF];
+  for (i = OFF; i < N+OFF; i++)
+    {
+      ib[i] = ib[i%8]*(i/8);
+      ic[i] = ic[i%8]*(i/8);
+      if (y)
+       abort ();
+    }
 
   for (i = OFF; i < N; i++)
     {
index fc0ed1b3938d60f94fb091ccf33991de9e9e3221..f5cdbb2fd3014e5619c1779a36d20410cedc5443 100644 (file)
@@ -3,21 +3,36 @@
 #include <stdarg.h>
 #include "tree-vect.h"
 
-#define N 16
+#define N 128
 
 float fa[N] __attribute__ ((__aligned__(__BIGGEST_ALIGNMENT__)));
-float fb[N+4] __attribute__ ((__aligned__(__BIGGEST_ALIGNMENT__))) = {0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 7.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0};
-float fc[N] __attribute__ ((__aligned__(__BIGGEST_ALIGNMENT__))) = {0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 7.5, 9.5, 10.5, 11.5, 12.5, 13.5, 14.5, 15.5};
+float fb[N+4] __attribute__ ((__aligned__(__BIGGEST_ALIGNMENT__)));
+float fc[N] __attribute__ ((__aligned__(__BIGGEST_ALIGNMENT__)));
 
 /* Check handling of accesses for which the "initial condition" -
    the expression that represents the first location accessed - is
    more involved than just an ssa_name.  */
 
+volatile int y = 0;
+
 __attribute__ ((noinline)) int
 main1 (float * __restrict__ pa, float * __restrict__ pb, float *__restrict__ pc)
 {
   int i;
   float *q = pb + 4;
+  for (i = 0; i < N; i++)
+    {
+      fb[i] = i;
+      fc[i] = 0.5+i;
+      if (y)
+       abort ();
+    }
+  for (; i < N+4; i++)
+    {
+      fb[i] = i;
+      if (y)
+       abort ();
+    }
 
   for (i = 0; i < N; i++)
     {
index a5bf5db078a3998bd2a8fa4dd69724fa2aa36f42..136ff4a800ac79faf4ceb6fc0c97e3f02f639f2c 100644 (file)
@@ -3,7 +3,7 @@
 #include <stdarg.h>
 #include "tree-vect.h"
 
-#define N 16
+#define N 128
 
 __attribute__ ((noinline))
 int main1 (int *a)
index 131efeab53a32f87838ceaedb17a96e15de4a66f..d621785e38ad93be1fd8d625de23077f65481483 100644 (file)
@@ -3,7 +3,7 @@
 #include <stdarg.h>
 #include "tree-vect.h"
 
-#define N 16
+#define N 128
 
 struct tmp_struct
 {
index 6ea2614909512f1e53a00c5c9dd02a98586b50a5..f8bf4c321428c97133336b270c75ab6b6dfaa55e 100644 (file)
@@ -3,10 +3,12 @@
 #include <stdarg.h>
 #include "tree-vect.h"
 
-#define N 16
+#define N 128
  
 char x[N] __attribute__ ((__aligned__(__BIGGEST_ALIGNMENT__)));
-char cb[N] __attribute__ ((__aligned__(__BIGGEST_ALIGNMENT__))) = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
+char cb[N] __attribute__ ((__aligned__(__BIGGEST_ALIGNMENT__)));
+
+volatile int y = 0;
 
 __attribute__ ((noinline))
 int main1 ()
@@ -16,6 +18,12 @@ int main1 ()
     char *q;
   } s;
   int i;
+  for (i = 0; i < N; i++)
+    {
+      cb[i] = i*3;
+      if (y)
+       abort ();
+    }
 
   /* Check that datarefs analysis can determine that the access via pointer
      s.p is based off array x, which enables us to antialias this access from
index 01c9153878f7a2edc7bdd346f9b8b9517547eae5..987c93bf17855d0845c13900ba47524b8f46c6b0 100644 (file)
@@ -3,8 +3,13 @@
 #include <stdarg.h>
 #include "tree-vect.h"
 
-#define N 4
-#define DOT4( a, b )  ( a[0]*b[0] + a[1]*b[1] + a[2]*b[2] + a[3]*b[3] )
+#define N 16
+#define DOT16( a, b)   ( a[0]*b[0]   + a[1]*b[1]   + a[2]*b[2]   + a[3]*b[3] + \
+                        a[4]*b[4]   + a[5]*b[5]   + a[6]*b[6]   + a[7]*b[7] + \
+                        a[8]*b[8]   + a[9]*b[9]   + a[10]*b[10] + a[11]*b[11] + \
+                        a[12]*b[12] + a[13]*b[13] + a[14]*b[14] + a[15]*b[15])
+
+volatile int y = 0;
 
 __attribute__ ((noinline))
 int main1 (int ia[][N])
@@ -15,14 +20,14 @@ int main1 (int ia[][N])
 
   for (i = 0; i < N; i++)
     {
-       ic[0][i] = DOT4 (ia[i], ib);
+       ic[0][i] = DOT16 (ia[i], ib);
     }
 
   /* check results: */  
   for (i = 0; i < N; i++)
     {
-       if (ic[0][i] != DOT4 (ia[i], ib))
-           abort();
+       if (ic[0][i] != DOT16 (ia[i], ib))
+           abort ();
     }
 
   return 0;
@@ -30,7 +35,16 @@ int main1 (int ia[][N])
 
 int main (void)
 { 
-  int ia[N][N] = {{1,2,3,4},{2,3,5,7},{2,4,6,8},{22,43,55,77}};
+  int ia[N][N];
+  int i,j;
+  for (i = 0; i < N; i++)
+    for (j = 0; j < N; j++)
+      {
+        ia[i][j] = i + j + 1;
+       /* Avoid vectorization.  */
+       if (y)
+         abort ();
+      }
 
   check_vect ();
 
index 6adb7bf88bd09ea50cc6141259502e89f55975f5..79ad5997b196f954dc05a6a2a374fde13ecb8dcc 100644 (file)
@@ -4,13 +4,13 @@
 #include <stdarg.h>
 #include "tree-vect.h"
 
-#define N 16
+#define N 128
 
-int iadd_results[N] = {0,6,12,18,24,30,36,42,48,54,60,66,72,78,84,90};
-float fadd_results[N] = {0.0,6.0,12.0,18.0,24.0,30.0,36.0,42.0,48.0,54.0,60.0,66.0,72.0,78.0,84.0,90.0};
-float fmul_results[N] = {0.0,3.0,12.0,27.0,48.0,75.0,108.0,147.0,192.0,243.0,300.0,363.0,432.0,507.0,588.0,675.0};
-float fresults1[N] = {192.00,240.00,288.00,336.00,384.00,432.00,480.00,528.00,48.00,54.00,60.00,66.00,72.00,78.00,84.00,90.00};
-float fresults2[N] = {0.00,6.00,12.00,18.00,24.00,30.00,36.00,42.00,0.00,54.00,120.00,198.00,288.00,390.00,504.00,630.00};
+int iadd_results[N];
+float fadd_results[N];
+float fmul_results[N];
+float fresults1[N];
+float fresults2[N];
 
 /****************************************************/
 __attribute__ ((noinline))
@@ -77,12 +77,32 @@ char cb[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
 char ca[N];
 short sa[N];
 
-/* All of the loops below are currently vectorizable.  */
+volatile int y = 0;
+
+/* All of the loops below are currently vectorizable, except
+   initialization ones.  */
 
 __attribute__ ((noinline)) int
 main1 ()
 {
   int i,j;
+  /* Initialization.  */
+  for (i = 0; i < N; i++)
+    {
+      b[i] = i*3;
+      c[i] = i;
+      d[i] = i*2;
+      ic[i] = i*3;
+      ib[i] = i*3;
+      cb[i] = i*3;
+      fadd_results[i] = b[i] + c[i] + d[i];
+      iadd_results[i] = ib[i] + ic[i];
+      fmul_results[i] = b[i] * c[i];
+      fresults1[i] = 0;
+      fresults2[i] = 0;
+      if (y)
+       abort ();
+    }
 
   /* Test 1: copy chars.  */
   for (i = 0; i < N; i++)
@@ -116,7 +136,21 @@ main1 ()
   fbar_add (a);
   fbar_add (e);
 
-
+  /* Initialization.  */
+  for (i = 0; i < N; i++)
+    {
+      fresults1[i] = a[i];
+      fresults2[i] = e[i];
+      if (y)
+       abort ();
+    }
+  for (i = 0; i < N/2; i++)
+    {
+      fresults1[i] = b[i+N/2] * c[i+N/2] - b[i] * c[i];
+      fresults2[i+N/2] = b[i] * c[i+N/2] + b[i+N/2] * c[i];
+      if (y)
+       abort ();
+    }
   /* Test 4: access with offset.  */
   for (i = 0; i < N/2; i++)
     {
index 6b14e3bf5901911716281379df9f9ed324cc6756..0b49ab77298757634d701da28e587df54e922826 100644 (file)
@@ -3,13 +3,15 @@
 #include <stdarg.h>
 #include "tree-vect.h"
 
-#define K 
+#define K 16
 
 int in[2*K][K] __attribute__ ((__aligned__(__BIGGEST_ALIGNMENT__)));
 int out[K];
-int check_result[K] = {0,16,256,4096};
+int check_result[K];
 
-__attribute__ ((noinline)) void 
+volatile int y = 0;
+
+__attribute__ ((noinline)) void
 foo ()
 {
   int sum;
@@ -18,7 +20,21 @@ foo ()
   for (k = 0; k < K; k++)
     {
       sum = 1;
-      for (j = 0; j < K; j++) 
+      for (j = 0; j < K; j++)
+        for (i = 0; i < K; i++)
+       {
+          sum *= in[i+k][j];
+         /* Avoid vectorization.  */
+         if (y)
+           abort ();
+       }
+      check_result[k] = sum;
+    }
+
+  for (k = 0; k < K; k++)
+    {
+      sum = 1;
+      for (j = 0; j < K; j++)
         for (i = 0; i < K; i++)
           sum *= in[i+k][j];
       out[k] = sum;
@@ -43,7 +59,7 @@ int main ()
 
   return 0;
 }
-        
+
 /* { dg-final { scan-tree-dump-times "OUTER LOOP VECTORIZED" 1 "vect" } } */
 /* { dg-final { cleanup-tree-dump "vect" } } */
-      
+
index 6544988b2472ef5028882cf9a84faace86c0e08c..4150ee2821688c75399b33144e81d45c41fd6ebf 100644 (file)
@@ -3,7 +3,7 @@
 #include <stdarg.h>
 #include "tree-vect.h"
 
-#define N 26
+#define N 128
  
 __attribute__ ((noinline)) int main1 (short X)
 {  
index dc742eb84fb11b56ecfd89205cdd34f54b5d9c52..3492030d2276959754dba18756073de709f0ae3e 100644 (file)
@@ -3,7 +3,7 @@
 #include <stdarg.h>
 #include "tree-vect.h"
 
-#define N 26
+#define N 128
  
 __attribute__ ((noinline)) int main1 (short X)
 {  
index 2ce8f8ebac85e323ed8a4674b631ff96f21df5e0..e8094db411290e28d615d5d14a1091a3560b45f7 100644 (file)
@@ -1,6 +1,6 @@
 /* { dg-do compile } */
 
-#define N 64
+#define N 256
 signed short image[N][N] __attribute__ ((__aligned__(__BIGGEST_ALIGNMENT__)));
 signed short block[N][N] __attribute__ ((__aligned__(__BIGGEST_ALIGNMENT__)));
 signed short out[N] __attribute__ ((__aligned__(__BIGGEST_ALIGNMENT__)));
index a9b786e235c218681fc3f62475160df011f97c6a..9b418fabaa9795772f4396dc4cef8d40ab3c6e49 100644 (file)
@@ -1,6 +1,6 @@
 /* { dg-do compile } */
 
-#define N 64
+#define N 256
 signed short image[N][N] __attribute__ ((__aligned__(__BIGGEST_ALIGNMENT__)));
 signed short block[N][N] __attribute__ ((__aligned__(__BIGGEST_ALIGNMENT__)));
 
index 815758c766f703b3c760587439f7ed15a9db12f4..48b7180784e1544c17f5219aeda197d409434e5a 100644 (file)
@@ -1,6 +1,6 @@
 /* { dg-do compile } */
 
-#define N 40
+#define N 160
 signed short image[N][N];
 signed short block[N][N];
 signed short out[N];
index 38701977bc6c28c5fd35d9f26ccb92af4b6507ac..ba3fa87b151afdd2b16092fdebc05602e1fdc8d9 100644 (file)
@@ -3,7 +3,7 @@
 #include <stdarg.h>
 #include "tree-vect.h"
 
-#define N 40
+#define N 160
 float image[N][N] __attribute__ ((__aligned__(__BIGGEST_ALIGNMENT__)));
 float out[N];
 
index b8d0e51fee55db7562cf20163b8bcf8a9e7fa0cb..062e1fdd45103732a09be06eee21f62a36fae969 100644 (file)
@@ -3,7 +3,7 @@
 #include <stdarg.h>
 #include "tree-vect.h"
 
-#define N 40
+#define N 160
 float image[N][N][N] __attribute__ ((__aligned__(__BIGGEST_ALIGNMENT__)));
 
 __attribute__ ((noinline)) void
index 0ca868637adc962e50d0730f5553bf391e099b6a..cdea72aabe2cd1230299d71e61c26fecfbc381ad 100644 (file)
@@ -3,7 +3,7 @@
 #include <stdarg.h>
 #include "tree-vect.h"
 
-#define N 40
+#define N 160
 float image[2*N][2*N][N] __attribute__ ((__aligned__(__BIGGEST_ALIGNMENT__)));
 
 __attribute__ ((noinline)) void
index 924700c58409cc69f459f4025ce9c9bf6bbb88c2..83b6f994cd7fe46d2ba950d4caf6fd6a577f667c 100644 (file)
@@ -2,7 +2,7 @@
 #include <stdarg.h>
 #include "tree-vect.h"
 
-#define N 40
+#define N 320
 float image[N][N] __attribute__ ((__aligned__(__BIGGEST_ALIGNMENT__)));
 float out[N];
 
index 1759ee38db784d20d11e9f15ea6e30f519d35a93..9768a1ed57771ae0ecd016c61e0f72675f996303 100644 (file)
@@ -2,7 +2,7 @@
 #include <stdarg.h>
 #include "tree-vect.h"
 
-#define N 40
+#define N 320
 float image[N][N+1] __attribute__ ((__aligned__(__BIGGEST_ALIGNMENT__)));
 float out[N];
 
index d7bcc9a2e8c49a826499a4ce2e72365e35c3c3d1..3981b94e6569d752dc938f32cf6aac13d9122b95 100644 (file)
@@ -1,7 +1,7 @@
 /* { dg-do compile } */
 
-#define N 40
-#define M 128
+#define N 512
+#define M 1024
 signed short in[N+M];
 signed short coeff[M];
 signed short out[N];
index 407315a8dc305e4c262dc9bcd0fea0caa0b49462..a9035454729385019ab730352a9c3da89d93f18e 100644 (file)
@@ -1,7 +1,7 @@
 /* { dg-do compile } */
 
-#define N 40
-#define M 128
+#define N 320
+#define M 1024
 signed short in[N+M];
 signed short coeff[M];
 int out[N];
index 3342b79b215b1b230a1cf67bedaa7b394367dc62..4b6ffbf10ecc184236c4b0261fd89b08bfc2c661 100644 (file)
@@ -1,7 +1,7 @@
 /* { dg-do compile } */
 
-#define N 40
-#define M 128
+#define N 320
+#define M 1024
 unsigned short in[N+M];
 unsigned short coeff[M];
 unsigned int out[N];
index c344fb1d67b39533cc79e4f47e129be3825bbdb3..e70be3248c055e8107368f9f256f0bbcf98b294a 100644 (file)
@@ -3,8 +3,8 @@
 #include <stdarg.h>
 #include "tree-vect.h"
 
-#define N 40
-#define M 128
+#define N 320
+#define M 1024
 float in[N+M];
 float out[N];
 
index 6e032f13c4f2655356900a743d2d2c944bccb1b8..1087df0d4cf32ca0c509b538001fa892f69a254a 100644 (file)
@@ -2,8 +2,8 @@
 #include <stdarg.h>
 #include "tree-vect.h"
 
-#define N 40
-#define M 128
+#define N 320
+#define M 1024
 unsigned short in[N+M];
 unsigned int out[N];
 
index 3c1a362c003e741eeb686c1f84ca8d80797c860c..5ac62ac3a2f7f0f3aaa35e7b9df770e646e2c8c9 100644 (file)
@@ -3,8 +3,8 @@
 #include <stdarg.h>
 #include "tree-vect.h"
 
-#define N 40
-#define M 64
+#define N 80
+#define M 128
 float in[N+M];
 float coeff[M];
 float out[N];
index af787b96a33691d15e3cc570925f6ede80f84a28..c81180c8313e3ff29282df167c976709bb7b26d5 100644 (file)
@@ -3,8 +3,8 @@
 #include <stdarg.h>
 #include "tree-vect.h"
 
-#define N 40
-#define M 128
+#define N 80
+#define M 256
 float in[N+M];
 float coeff[M];
 float out[N];
index 36f4684ad582e921faf8611892a7954c54849198..2061594acc05360754b5c854ab72254fa3b7c976 100644 (file)
@@ -5,7 +5,7 @@
 #include <stdarg.h>
 #include "tree-vect.h"
 
-#define N 64
+#define N 512
 
 /* Modified rgb to rgb conversion from FFmpeg.  */
 __attribute__ ((noinline)) void
index fecc5ef3038106330df8350808dcdf61a62b6f24..bc738cef26c4604cd004c687e09583aa41beb3b6 100644 (file)
@@ -5,7 +5,7 @@
 #include <stdarg.h>
 #include "tree-vect.h"
 
-#define N 64
+#define N 512
 
 /* Modified rgb to rgb conversion from FFmpeg.  */
 __attribute__ ((noinline)) void
index ed36688f6c6b94709c8937b3405a289a80a4b755..d828c833f5558a39ca190e1ee1db59e95d23c421 100644 (file)
@@ -5,7 +5,7 @@
 #include <stdarg.h>
 #include "tree-vect.h"
 
-#define N 64
+#define N 128
 
 /* Modified rgb to rgb conversion from FFmpeg.  */
 __attribute__ ((noinline)) void
index c1291e38f6d9842e46feda07c7ea945ade0c12c6..d296dc944869015d5e2dc5c27fe3a1818dcf9393 100644 (file)
@@ -5,7 +5,7 @@
 #include <stdarg.h>
 #include "tree-vect.h"
 
-#define N 64
+#define N 512
 
 /* Modified rgb to rgb conversion from FFmpeg.  */
 __attribute__ ((noinline)) int
index 5a1c03d113fbb3b6453a62c7c1d0602d0f66188e..7462cb34cc56e7e20652ba1dd67ab66475c1110d 100644 (file)
@@ -3,11 +3,13 @@
 #include <stdarg.h>
 #include "tree-vect.h"
 
-#define N 16
-#define DIFF 242
+#define N 256
 
-unsigned char ub[N] = {1,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45};
-unsigned char uc[N] = {1,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
+unsigned char ub[N];
+unsigned char uc[N];
+unsigned char diff;
+
+volatile int y = 0;
 
 __attribute__ ((noinline)) void
 main1 (unsigned char x, unsigned char max_result, unsigned char min_result)
@@ -17,8 +19,26 @@ main1 (unsigned char x, unsigned char max_result, unsigned char min_result)
   unsigned char umax = x;
   unsigned char umin = x;
 
+  diff = 2;
+  for (i = 0; i < N; i++) {
+    ub[i] = i;
+    uc[i] = i;
+    if (i%16 == 0)
+      {
+       ub[i] = i+2;
+       diff += 2;
+      }
+    if (uc[i] > max_result)
+      max_result = uc[i];
+    if (uc[i] < min_result)
+      min_result = uc[i];
+
+    /* Avoid vectorization.  */
+    if (y)
+      abort ();
+  }
   for (i = 0; i < N; i++) {
-    udiff += (unsigned char)(ub[i] - uc[i]);
+    udiff += (unsigned char) (ub[i] - uc[i]);
   }
 
   for (i = 0; i < N; i++) {
@@ -30,7 +50,7 @@ main1 (unsigned char x, unsigned char max_result, unsigned char min_result)
   }
 
   /* check results:  */
-  if (udiff != DIFF)
+  if (udiff != diff)
     abort ();
   if (umax != max_result)
     abort ();
@@ -39,9 +59,9 @@ main1 (unsigned char x, unsigned char max_result, unsigned char min_result)
 }
 
 int main (void)
-{ 
+{
   check_vect ();
-  
+
   main1 (100, 100, 1);
   main1 (0, 15, 0);
   return 0;
index 6d01f03174abf42f2f82f5ac7fa11172626e63c5..7004e9e4e4403e8fb11d7adf29acb3ac032073c8 100644 (file)
@@ -3,21 +3,40 @@
 #include <stdarg.h>
 #include "tree-vect.h"
 
-#define N 16
-#define DIFF 121
+#define N 256
+volatile int y = 0;
 
 __attribute__ ((noinline))
 void main1 (signed char x, signed char max_result, signed char min_result)
 {
   int i;
-  signed char b[N] = {1,2,3,6,8,10,12,14,16,18,20,22,24,26,28,30};
-  signed char c[N] = {1,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
+  signed char b[N];
+  signed char c[N];
+  signed char check_diff = 2;
   signed char diff = 2;
   signed char max = x;
   signed char min = x;
 
+  check_diff = 2;
   for (i = 0; i < N; i++) {
-    diff += (signed char)(b[i] - c[i]);
+    b[i] = i;
+    c[i] = i;
+    if (i%16 == 0)
+      {
+       c[i] = i + 1;
+       check_diff += 1;
+      }
+    if (c[i] > max_result)
+      max_result = c[i];
+    if (c[i] < min_result)
+      min_result = c[i];
+    /* Avoid vectorization.  */
+    if (y)
+      abort ();
+  }
+
+  for (i = 0; i < N; i++) {
+    diff += (signed char) (c[i] - b[i]);
   }
 
   for (i = 0; i < N; i++) {
@@ -29,7 +48,7 @@ void main1 (signed char x, signed char max_result, signed char min_result)
   }
 
   /* check results:  */
-  if (diff != DIFF)
+  if (diff != check_diff)
     abort ();
   if (max != max_result)
     abort ();
@@ -38,9 +57,9 @@ void main1 (signed char x, signed char max_result, signed char min_result)
 }
 
 int main (void)
-{ 
+{
   check_vect ();
-  
+
   main1 (100, 100, 1);
   main1 (0, 15, 0);
   return 0;
index 6effa87ebb5be054b58b5bd1352f1c958295e520..1967e3da6b237d2a7e7821f734dca17e74c7ed74 100644 (file)
@@ -3,10 +3,11 @@
 #include <stdarg.h>
 #include "tree-vect.h"
 
-#define N 16
-unsigned char udata_ch[N] =
-  { 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28 };
-#define SUM 210
+#define N 128
+unsigned char udata_ch[N];
+#define SUM N*(N-1)
+
+volatile int y = 0;
 
 __attribute__ ((noinline)) int
 foo ()
@@ -14,6 +15,14 @@ foo ()
   int i;
   unsigned int intsum = 0;
 
+  for (i = 0; i < N; i++)
+    {
+      udata_ch[i] = i*2;
+      /* Avoid vectorization.  */
+      if (y)
+       abort ();
+    }
+
   /* widenning sum: sum chars into int.  */
   for (i = 0; i < N; i++)
     {
index 872e6e82e5b70c1f1b5f2b1f1e9e5488e12415ce..5394adee00ec1676284e5ae3b42b650ecb2125dc 100644 (file)
@@ -3,10 +3,11 @@
 #include <stdarg.h>
 #include "tree-vect.h"
 
-#define N 16
-unsigned char udata_ch[N] =
-  { 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28 };
-#define SUM 210
+#define N 128
+unsigned char udata_ch[N];
+#define SUM N*(N-1)
+
+volatile int y = 0;
 
 __attribute__ ((noinline)) int
 foo ()
@@ -14,6 +15,14 @@ foo ()
   int i;
   unsigned short shortsum = 0;
 
+  for (i = 0; i < N; i++)
+    {
+      udata_ch[i] = i*2;
+      /* Avoid vectorization.  */
+      if (y)
+       abort ();
+    }
+
   /* widenning sum: sum chars into short.  */
   for (i = 0; i < N; i++)
     {
index 53d5f0d5cceaf41cf5a14ffd67000739dbc6f7ab..fa0100b9a9d94c7088c3dca91f08c5763040dc5b 100644 (file)
@@ -3,16 +3,26 @@
 #include <stdarg.h>
 #include "tree-vect.h"
 
-#define N 16
-signed char data_ch[N] =
-  { 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28 };
-#define SUM 210
+#define N 128
+signed char data_ch[N];
+
+volatile int y = 0;
 
 __attribute__ ((noinline)) int
 foo ()
 {
   int i;
   signed int intsum = 0;
+  signed int check_intsum = 0;
+
+  for (i = 0; i < N; i++)
+    {
+      data_ch[i] = i*2;
+      check_intsum += data_ch[i];
+      /* Avoid vectorization.  */
+      if (y)
+       abort ();
+    }
 
   /* widenning sum: sum chars into int.  */
   for (i = 0; i < N; i++)
@@ -21,7 +31,7 @@ foo ()
     }
 
   /* check results:  */
-  if (intsum != SUM)
+  if (intsum != check_intsum)
     abort ();
 
   return 0;
index 83211eba49f326da7516ae43b4f9550506513a72..0e1acfb7bebea3f73347dc0fd32325e8d3dc45dd 100644 (file)
@@ -157,15 +157,15 @@ NAME (PREFIX, tests) (void)                                               \
   NAME (PREFIX, check) ();                                             \
 }
 
-VECT_TESTS(uc_, unsigned char,  16)
-VECT_TESTS(us_, unsigned short, 32)
-VECT_TESTS(ui_, unsigned int,   32)
-VECT_TESTS(ul_, unsigned long,  32)
-
-VECT_TESTS(sc_, signed char,    16)
-VECT_TESTS(ss_, short,          32)
-VECT_TESTS(si_, int,            32)
-VECT_TESTS(sl_, long,           32)
+VECT_TESTS (uc_, unsigned char,  128)
+VECT_TESTS (us_, unsigned short, 256)
+VECT_TESTS (ui_, unsigned int,   256)
+VECT_TESTS (ul_, unsigned long,  256)
+
+VECT_TESTS (sc_, signed char,    128)
+VECT_TESTS (ss_, short,          256)
+VECT_TESTS (si_, int,            256)
+VECT_TESTS (sl_, long,           256)
 
 int main ()
 {
index 4fb5494a4d35e773621cd035a5bfbaf741d7b4fd..f20d158db70eb58a2daec3e4b9e76d43913df729 100644 (file)
@@ -3,7 +3,7 @@
 #include <stdarg.h>
 #include "tree-vect.h"
 
-#define N 1
+#define N 128
 
 typedef struct {
    unsigned char a;
@@ -22,6 +22,7 @@ main1 ()
   int i;
   s arr[N];
   s *ptr = arr;
+  s check_res[N];
   s res[N];
 
   for (i = 0; i < N; i++)
@@ -34,6 +35,16 @@ main1 ()
       arr[i].f = i * 2 + 2;
       arr[i].g = i - 3;
       arr[i].h = 56;
+
+      check_res[i].c = arr[i].a;
+      check_res[i].a = arr[i].f + arr[i].a;
+      check_res[i].d = arr[i].f - arr[i].a;
+      check_res[i].b = arr[i].f;
+      check_res[i].f = arr[i].a;
+      check_res[i].e = arr[i].f - arr[i].a;
+      check_res[i].h = arr[i].f;
+      check_res[i].g = arr[i].f - arr[i].a;
+
       if (arr[i].a == 178)
          abort();
     }
@@ -45,23 +56,23 @@ main1 ()
       res[i].d = ptr->f - ptr->a;
       res[i].b = ptr->f;
       res[i].f = ptr->a;
-      res[i].e = ptr->f - ptr->a; 
-      res[i].h = ptr->f;   
+      res[i].e = ptr->f - ptr->a;
+      res[i].h = ptr->f;
       res[i].g = ptr->f - ptr->a;
-      ptr++; 
-    } 
-   
+      ptr++;
+    }
+
   /* check results:  */
   for (i = 0; i < N; i++)
-    { 
-      if (res[i].c != arr[i].a
-          || res[i].a != arr[i].f + arr[i].a
-          || res[i].d != arr[i].f - arr[i].a
-          || res[i].b != arr[i].f
-          || res[i].f != arr[i].a
-          || res[i].e != arr[i].f - arr[i].a
-          || res[i].h != arr[i].f
-          || res[i].g != arr[i].f - arr[i].a)
+    {
+      if (res[i].a != check_res[i].a
+         || res[i].b != check_res[i].b
+         || res[i].c != check_res[i].c
+         || res[i].d != check_res[i].d
+         || res[i].e != check_res[i].e
+         || res[i].f != check_res[i].f
+         || res[i].g != check_res[i].g
+         || res[i].h != check_res[i].h)
           abort();
    }
 }
@@ -78,4 +89,4 @@ int main (void)
 
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_strided8 } } } */
 /* { dg-final { cleanup-tree-dump "vect" } } */
-  
+
index cc09fa608dcb67388bcf176fbcf9b076708a1c3c..28a9c58cd6567c186f66be55fa261252722a3ea0 100644 (file)
@@ -3,7 +3,7 @@
 #include <stdarg.h>
 #include "tree-vect.h"
 
-#define N 1
+#define N 128
 
 typedef struct {
    unsigned char a;
@@ -22,6 +22,7 @@ main1 ()
   int i;
   s arr[N];
   s *ptr = arr;
+  s check_res[N];
   s res[N];
   unsigned char u, t, s, x, y, z, w;
 
@@ -35,6 +36,20 @@ main1 ()
       arr[i].f = i * 5;
       arr[i].g = i - 3;
       arr[i].h = 67;
+
+      u = arr[i].b - arr[i].a;
+      t = arr[i].d - arr[i].c;
+      check_res[i].c = u + t;
+      x = arr[i].b + arr[i].d;
+      check_res[i].a = arr[i].a + x;
+      check_res[i].d = u + t;
+      s = arr[i].h - arr[i].a;
+      check_res[i].b = s + t;
+      check_res[i].f = arr[i].f + arr[i].h;
+      check_res[i].e = arr[i].b + arr[i].e;
+      check_res[i].h = arr[i].d;
+      check_res[i].g = u + t;
+
       if (arr[i].a == 178)
          abort();
     }
@@ -59,14 +74,14 @@ main1 ()
   /* check results:  */
   for (i = 0; i < N; i++)
     { 
-      if (res[i].c != arr[i].b - arr[i].a + arr[i].d - arr[i].c
-          || res[i].a != arr[i].a + arr[i].b + arr[i].d
-          || res[i].d != arr[i].b - arr[i].a + arr[i].d - arr[i].c
-          || res[i].b != arr[i].h - arr[i].a + arr[i].d - arr[i].c
-          || res[i].f != arr[i].f + arr[i].h
-          || res[i].e != arr[i].b + arr[i].e
-          || res[i].h != arr[i].d
-          || res[i].g != arr[i].b - arr[i].a + arr[i].d - arr[i].c)
+      if (res[i].a != check_res[i].a
+         || res[i].b != check_res[i].b
+         || res[i].c != check_res[i].c
+         || res[i].d != check_res[i].d
+         || res[i].e != check_res[i].e
+         || res[i].f != check_res[i].f
+         || res[i].g != check_res[i].g
+         || res[i].h != check_res[i].h)
          abort();
    }
 }
index 349e869392609be6894ac0634d06ac6f2644a29f..cc1b94989149c847ae63c45063a22d20fe1ae196 100644 (file)
@@ -3,7 +3,7 @@
 #include <stdarg.h>
 #include "tree-vect.h"
 
-#define N 1
+#define N 128
 
 typedef struct {
    unsigned char a;
@@ -16,6 +16,8 @@ typedef struct {
    unsigned char h;
 } s;
 
+s check_res[N];
+
 __attribute__ ((noinline)) int
 main1 (s *arr)
 {
@@ -30,24 +32,24 @@ main1 (s *arr)
       res[i].d = ptr->f - ptr->b;
       res[i].b = ptr->f;
       res[i].f = ptr->b;
-      res[i].e = ptr->f - ptr->b; 
-      res[i].h = ptr->f;   
+      res[i].e = ptr->f - ptr->b;
+      res[i].h = ptr->f;
       res[i].g = ptr->f - ptr->b;
-      ptr++; 
-    } 
-   
+      ptr++;
+    }
+
   /* check results:  */
   for (i = 0; i < N; i++)
-    { 
-      if (res[i].c != arr[i].b
-          || res[i].a != arr[i].f + arr[i].b
-          || res[i].d != arr[i].f - arr[i].b
-          || res[i].b != arr[i].f
-          || res[i].f != arr[i].b
-          || res[i].e != arr[i].f - arr[i].b
-          || res[i].h != arr[i].f
-          || res[i].g != arr[i].f - arr[i].b)
-          abort();
+    {
+      if (res[i].a != check_res[i].a
+         || res[i].b != check_res[i].b
+         || res[i].c != check_res[i].c
+         || res[i].d != check_res[i].d
+         || res[i].e != check_res[i].e
+         || res[i].f != check_res[i].f
+         || res[i].g != check_res[i].g
+         || res[i].h != check_res[i].h)
+          abort ();
    }
 }
 
@@ -56,11 +58,11 @@ int main (void)
 {
   int i;
   s arr[N];
-  
+
   check_vect ();
 
   for (i = 0; i < N; i++)
-    { 
+    {
       arr[i].a = i;
       arr[i].b = i * 2;
       arr[i].c = 17;
@@ -69,9 +71,18 @@ int main (void)
       arr[i].f = i * 2 + 2;
       arr[i].g = i - 3;
       arr[i].h = 56;
+
+      check_res[i].c = arr[i].b;
+      check_res[i].a = arr[i].f + arr[i].b;
+      check_res[i].d = arr[i].f - arr[i].b;
+      check_res[i].b = arr[i].f;
+      check_res[i].f = arr[i].b;
+      check_res[i].e = arr[i].f - arr[i].b;
+      check_res[i].h = arr[i].f;
+      check_res[i].g = arr[i].f - arr[i].b;
       if (arr[i].a == 178)
-         abort(); 
-    } 
+         abort ();
+    }
 
   main1 (arr);
 
@@ -80,4 +91,4 @@ int main (void)
 
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_strided8 } } } */
 /* { dg-final { cleanup-tree-dump "vect" } } */
-  
+
index 537bcc87dfb573731e4e662adf4251a04dd0afce..92255d42707e6d6faf9b54dbb5612509de2e7a9c 100644 (file)
@@ -3,7 +3,7 @@
 #include <stdarg.h>
 #include "tree-vect.h"
 
-#define N 1
+#define N 128
 
 typedef struct {
    unsigned char a;
@@ -16,6 +16,8 @@ typedef struct {
    unsigned char h;
 } s;
 
+s check_res[N];
+
 __attribute__ ((noinline)) int
 main1 (s *arr)
 {
@@ -32,39 +34,39 @@ main1 (s *arr)
       res[i].d = ptr->b + ptr->c;
       res[i].b = ptr->c;
       res[i].f = ptr->f + ptr->e;
-      res[i].e = ptr->b + ptr->e; 
-      res[i].h = ptr->c;   
+      res[i].e = ptr->b + ptr->e;
+      res[i].h = ptr->c;
       res[i].g = ptr->b + ptr->c;
-      ptr++; 
-    } 
-   
+      ptr++;
+    }
+
   /* check results:  */
   for (i = 0; i < N; i++)
-    { 
-      if (res[i].c != arr[i].b + arr[i].c
-          || res[i].a != arr[i].c + arr[i].f + arr[i].b
-          || res[i].d != arr[i].b + arr[i].c
-          || res[i].b != arr[i].c
-          || res[i].f != arr[i].f + arr[i].e
-          || res[i].e != arr[i].b + arr[i].e
-          || res[i].h != arr[i].c
-          || res[i].g != arr[i].b + arr[i].c)
+    {
+      if (res[i].a != check_res[i].a
+         || res[i].b != check_res[i].b
+         || res[i].c != check_res[i].c
+         || res[i].d != check_res[i].d
+         || res[i].e != check_res[i].e
+         || res[i].f != check_res[i].f
+         || res[i].g != check_res[i].g
+         || res[i].h != check_res[i].h)
           abort ();
    }
 
   ptr = arr;
   /* Not vectorizable: gap in store. */
   for (i = 0; i < N; i++)
-    { 
+    {
       res[i].a = ptr->b;
       res[i].b = ptr->c;
-      ptr++; 
+      ptr++;
     }
-  
+
   /* Check results.  */
   for (i = 0; i < N; i++)
     {
-      if (res[i].a != arr[i].b 
+      if (res[i].a != arr[i].b
          || res[i].b != arr[i].c)
           abort ();
     }
@@ -76,11 +78,12 @@ int main (void)
 {
   int i;
   s arr[N];
-  
+  unsigned char x;
+
   check_vect ();
 
   for (i = 0; i < N; i++)
-    { 
+    {
       arr[i].a = i;
       arr[i].b = i * 2;
       arr[i].c = 17;
@@ -89,10 +92,20 @@ int main (void)
       arr[i].f = i * 5;
       arr[i].g = i - 3;
       arr[i].h = 56;
-      if (arr[i].a == 178)
-         abort(); 
-    } 
 
+      check_res[i].c = arr[i].b + arr[i].c;
+      x = arr[i].c + arr[i].f;
+      check_res[i].a = x + arr[i].b;
+      check_res[i].d = arr[i].b + arr[i].c;
+      check_res[i].b = arr[i].c;
+      check_res[i].f = arr[i].f + arr[i].e;
+      check_res[i].e = arr[i].b + arr[i].e;
+      check_res[i].h = arr[i].c;
+      check_res[i].g = arr[i].b + arr[i].c;
+
+      if (arr[i].a == 178)
+         abort ();
+    }
   main1 (arr);
 
   return 0;
@@ -100,4 +113,4 @@ int main (void)
 
 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_strided8 } } } */
 /* { dg-final { cleanup-tree-dump "vect" } } */
-  
+
index 76cb66d0861c09c16752462742cc614f8d15e143..0e3c0528dc9fc8f60462d5e41f649dee75f6241d 100644 (file)
@@ -3,7 +3,7 @@
 #include <stdarg.h>
 #include "tree-vect.h"
 
-#define N 1
+#define N 128
 
 typedef struct {
    unsigned char a;
@@ -16,6 +16,8 @@ typedef struct {
    unsigned char h;
 } s;
 
+s check_res[N];
+
 __attribute__ ((noinline)) int
 main1 (s *arr)
 {
@@ -44,14 +46,14 @@ main1 (s *arr)
   /* check results:  */
   for (i = 0; i < N; i++)
     { 
-      if (res[i].c != arr[i].b - arr[i].a + arr[i].d - arr[i].c
-          || res[i].a != arr[i].a + arr[i].b + arr[i].d
-          || res[i].d != arr[i].b - arr[i].a + arr[i].d - arr[i].c
-          || res[i].b != arr[i].h - arr[i].a + arr[i].d - arr[i].c
-          || res[i].f != arr[i].f + arr[i].h
-          || res[i].e != arr[i].b + arr[i].e
-          || res[i].h != arr[i].d
-          || res[i].g != arr[i].b - arr[i].a + arr[i].d - arr[i].c)
+      if (res[i].a != check_res[i].a
+         || res[i].b != check_res[i].b
+         || res[i].c != check_res[i].c
+         || res[i].d != check_res[i].d
+         || res[i].e != check_res[i].e
+         || res[i].f != check_res[i].f
+         || res[i].g != check_res[i].g
+         || res[i].h != check_res[i].h)
          abort();
    }
 }
@@ -61,6 +63,7 @@ int main (void)
 {
   int i;
   s arr[N];
+  unsigned char u, t, s, x, y, z, w;
   
   check_vect ();
 
@@ -74,6 +77,20 @@ int main (void)
       arr[i].f = i * 5;
       arr[i].g = i - 3;
       arr[i].h = 67;
+
+      u = arr[i].b - arr[i].a;
+      t = arr[i].d - arr[i].c;
+      check_res[i].c = u + t;
+      x = arr[i].b + arr[i].d;
+      check_res[i].a = arr[i].a + x;
+      check_res[i].d = u + t;
+      s = arr[i].h - arr[i].a;
+      check_res[i].b = s + t;
+      check_res[i].f = arr[i].f + arr[i].h;
+      check_res[i].e = arr[i].b + arr[i].e;
+      check_res[i].h = arr[i].d;
+      check_res[i].g = u + t;
+
       if (arr[i].a == 178)
          abort(); 
     }