Re: [8/9] Testsuite: split tests for strided accesses

2011-04-15 Thread Richard Guenther
On Tue, Apr 12, 2011 at 4:19 PM, Richard Sandiford
richard.sandif...@linaro.org wrote:
 The next patch introduces separate vect_stridedN target selectors
 for each tested stride factor N.  At the moment, some tests contain
 several independent loops that have different stride factors.
 It's easier to make the next change if we put these loops into
 separate tests.

 Tested on x86_64-linux-gnu and arm-linux-gnueabi.  OK to install?

Ok.

Thanks,
Richard.

 Richard


 gcc/testsuite/
        * gcc.dg/vect/slp-11.c: Split into...
        * gcc.dg/vect/slp-11a.c, gcc.dg/vect/slp-11b.c,
        gcc.dg/vect/slp-11c.c: ...these tests.
        * gcc.dg/vect/slp-12a.c: Split 4-stride loop into...
        * gcc.dg/vect/slp-12c.c: ...this new test.
        * gcc.dg/vect/slp-19.c: Split into...
        * gcc.dg/vect/slp-19a.c, gcc.dg/vect/slp-19b.c,
        gcc.dg/vect/slp-19c.c: ...these new tests.

 Index: gcc/testsuite/gcc.dg/vect/slp-11.c
 ===
 --- gcc/testsuite/gcc.dg/vect/slp-11.c  2011-04-12 15:18:24.0 +0100
 +++ /dev/null   2011-03-23 08:42:11.268792848 +
 @@ -1,113 +0,0 @@
 -/* { dg-require-effective-target vect_int } */
 -
 -#include stdarg.h
 -#include tree-vect.h
 -
 -#define N 8
 -
 -int
 -main1 ()
 -{
 -  int i;
 -  unsigned int out[N*8], a0, a1, a2, a3, a4, a5, a6, a7, b1, b0, b2, b3, b4, 
 b5, b6, b7;
 -  unsigned int 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};
 -  float out2[N*8];
 -
 -  /* Different operations - not SLPable.  */
 -  for (i = 0; i  N; i++)
 -    {
 -      a0 = in[i*8] + 5;
 -      a1 = in[i*8 + 1] * 6;
 -      a2 = in[i*8 + 2] + 7;
 -      a3 = in[i*8 + 3] + 8;
 -      a4 = in[i*8 + 4] + 9;
 -      a5 = in[i*8 + 5] + 10;
 -      a6 = in[i*8 + 6] + 11;
 -      a7 = in[i*8 + 7] + 12;
 -
 -      b0 = a0 * 3;
 -      b1 = a1 * 2;
 -      b2 = a2 * 12;
 -      b3 = a3 * 5;
 -      b4 = a4 * 8;
 -      b5 = a5 * 4;
 -      b6 = a6 * 3;
 -      b7 = a7 * 2;
 -
 -      out[i*8] = b0 - 2;
 -      out[i*8 + 1] = b1 - 3;
 -      out[i*8 + 2] = b2 - 2;
 -      out[i*8 + 3] = b3 - 1;
 -      out[i*8 + 4] = b4 - 8;
 -      out[i*8 + 5] = b5 - 7;
 -      out[i*8 + 6] = b6 - 3;
 -      out[i*8 + 7] = b7 - 7;
 -    }
 -
 -  /* check results:  */
 -  for (i = 0; i  N; i++)
 -    {
 -      if (out[i*8] !=  (in[i*8] + 5) * 3 - 2
 -         || out[i*8 + 1] != (in[i*8 + 1] * 6) * 2 - 3
 -         || out[i*8 + 2] != (in[i*8 + 2] + 7) * 12 - 2
 -         || out[i*8 + 3] != (in[i*8 + 3] + 8) * 5 - 1
 -         || out[i*8 + 4] != (in[i*8 + 4] + 9) * 8 - 8
 -         || out[i*8 + 5] != (in[i*8 + 5] + 10) * 4 - 7
 -         || out[i*8 + 6] != (in[i*8 + 6] + 11) * 3 - 3
 -         || out[i*8 + 7] != (in[i*8 + 7] + 12) * 2 - 7)
 -       abort ();
 -    }
 -
 -  /* Requires permutation - not SLPable.  */
 -  for (i = 0; i  N*2; i++)
 -    {
 -      out[i*4] = (in[i*4] + 2) * 3;
 -      out[i*4 + 1] = (in[i*4 + 2] + 2) * 7;
 -      out[i*4 + 2] = (in[i*4 + 1] + 7) * 3;
 -      out[i*4 + 3] = (in[i*4 + 3] + 3) * 4;
 -    }
 -
 -  /* check results:  */
 -  for (i = 0; i  N*2; i++)
 -    {
 -      if (out[i*4] !=  (in[i*4] + 2) * 3
 -         || out[i*4 + 1] != (in[i*4 + 2] + 2) * 7
 -         || out[i*4 + 2] != (in[i*4 + 1] + 7) * 3
 -         || out[i*4 + 3] != (in[i*4 + 3] + 3) * 4)
 -        abort ();
 -    }
 -
 -  /* Different operations - not SLPable.  */
 -  for (i = 0; i  N*4; i++)
 -    {
 -      out2[i*2] = ((float) in[i*2] * 2 + 6) ;
 -      out2[i*2 + 1] = (float) (in[i*2 + 1] * 3 + 7);
 -    }
 -
 -  /* check results:  */
 -  for (i = 0; i  N*4; i++)
 -    {
 -      if (out2[i*2] !=  ((float) in[i*2] * 2 + 6)
 -         || out2[i*2 + 1] != (float) (in[i*2 + 1] * 3 + 7))
 -        abort ();
 -    }
 -
 -
 -  return 0;
 -}
 -
 -int main (void)
 -{
 -  check_vect ();
 -
 -  main1 ();
 -
 -  return 0;
 -}
 -
 -/* { dg-final { scan-tree-dump-times vectorized 3 loops 1 vect  { target 
 { { vect_uintfloat_cvt  vect_strided }   vect_int_mult } } } } */
 -/* { dg-final { scan-tree-dump-times vectorized 2 loops 1 vect  { target 
 { { { ! vect_uintfloat_cvt }  vect_strided }   vect_int_mult } } } } */
 -/* { dg-final { scan-tree-dump-times vectorized 0 loops 1 vect  {target  
 { ! { vect_int_mult  vect_strided } } } } }  */
 -/* { dg-final { scan-tree-dump-times vectorizing stmts using SLP 0  vect 
  } } */
 -/* { dg-final { cleanup-tree-dump vect } } */
 -
 Index: gcc/testsuite/gcc.dg/vect/slp-11a.c
 ===
 --- /dev/null   2011-03-23 08:42:11.268792848 +
 +++ gcc/testsuite/gcc.dg/vect/slp-11a.c 2011-04-12 15:18:25.0 +0100
 @@ -0,0 +1,75 @@
 +/* { dg-require-effective-target vect_int } */
 +
 +#include stdarg.h
 +#include tree-vect.h
 +
 +#define N 8
 +
 +int
 +main1 ()
 +{
 +  int i;
 +  unsigned int out[N*8], a0, a1, 

[8/9] Testsuite: split tests for strided accesses

2011-04-12 Thread Richard Sandiford
The next patch introduces separate vect_stridedN target selectors
for each tested stride factor N.  At the moment, some tests contain
several independent loops that have different stride factors.
It's easier to make the next change if we put these loops into
separate tests.

Tested on x86_64-linux-gnu and arm-linux-gnueabi.  OK to install?

Richard


gcc/testsuite/
* gcc.dg/vect/slp-11.c: Split into...
* gcc.dg/vect/slp-11a.c, gcc.dg/vect/slp-11b.c,
gcc.dg/vect/slp-11c.c: ...these tests.
* gcc.dg/vect/slp-12a.c: Split 4-stride loop into...
* gcc.dg/vect/slp-12c.c: ...this new test.
* gcc.dg/vect/slp-19.c: Split into...
* gcc.dg/vect/slp-19a.c, gcc.dg/vect/slp-19b.c,
gcc.dg/vect/slp-19c.c: ...these new tests.

Index: gcc/testsuite/gcc.dg/vect/slp-11.c
===
--- gcc/testsuite/gcc.dg/vect/slp-11.c  2011-04-12 15:18:24.0 +0100
+++ /dev/null   2011-03-23 08:42:11.268792848 +
@@ -1,113 +0,0 @@
-/* { dg-require-effective-target vect_int } */
-
-#include stdarg.h
-#include tree-vect.h
-
-#define N 8 
-
-int
-main1 ()
-{
-  int i;
-  unsigned int out[N*8], a0, a1, a2, a3, a4, a5, a6, a7, b1, b0, b2, b3, b4, 
b5, b6, b7;
-  unsigned int 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};
-  float out2[N*8];
-
-  /* Different operations - not SLPable.  */
-  for (i = 0; i  N; i++)
-{
-  a0 = in[i*8] + 5;
-  a1 = in[i*8 + 1] * 6;
-  a2 = in[i*8 + 2] + 7;
-  a3 = in[i*8 + 3] + 8;
-  a4 = in[i*8 + 4] + 9;
-  a5 = in[i*8 + 5] + 10;
-  a6 = in[i*8 + 6] + 11;
-  a7 = in[i*8 + 7] + 12;
-
-  b0 = a0 * 3;
-  b1 = a1 * 2;
-  b2 = a2 * 12;
-  b3 = a3 * 5;
-  b4 = a4 * 8;
-  b5 = a5 * 4;
-  b6 = a6 * 3;
-  b7 = a7 * 2;
-
-  out[i*8] = b0 - 2;
-  out[i*8 + 1] = b1 - 3; 
-  out[i*8 + 2] = b2 - 2;
-  out[i*8 + 3] = b3 - 1;
-  out[i*8 + 4] = b4 - 8;
-  out[i*8 + 5] = b5 - 7;
-  out[i*8 + 6] = b6 - 3;
-  out[i*8 + 7] = b7 - 7;
-}
-
-  /* check results:  */
-  for (i = 0; i  N; i++)
-{
-  if (out[i*8] !=  (in[i*8] + 5) * 3 - 2
- || out[i*8 + 1] != (in[i*8 + 1] * 6) * 2 - 3
- || out[i*8 + 2] != (in[i*8 + 2] + 7) * 12 - 2
- || out[i*8 + 3] != (in[i*8 + 3] + 8) * 5 - 1
- || out[i*8 + 4] != (in[i*8 + 4] + 9) * 8 - 8
- || out[i*8 + 5] != (in[i*8 + 5] + 10) * 4 - 7
- || out[i*8 + 6] != (in[i*8 + 6] + 11) * 3 - 3
- || out[i*8 + 7] != (in[i*8 + 7] + 12) * 2 - 7)
-   abort ();
-}
-
-  /* Requires permutation - not SLPable.  */
-  for (i = 0; i  N*2; i++)
-{
-  out[i*4] = (in[i*4] + 2) * 3;
-  out[i*4 + 1] = (in[i*4 + 2] + 2) * 7;
-  out[i*4 + 2] = (in[i*4 + 1] + 7) * 3;
-  out[i*4 + 3] = (in[i*4 + 3] + 3) * 4;
-}
-
-  /* check results:  */
-  for (i = 0; i  N*2; i++)
-{
-  if (out[i*4] !=  (in[i*4] + 2) * 3
- || out[i*4 + 1] != (in[i*4 + 2] + 2) * 7
- || out[i*4 + 2] != (in[i*4 + 1] + 7) * 3
- || out[i*4 + 3] != (in[i*4 + 3] + 3) * 4)
-abort ();
-}
-
-  /* Different operations - not SLPable.  */
-  for (i = 0; i  N*4; i++)
-{
-  out2[i*2] = ((float) in[i*2] * 2 + 6) ;
-  out2[i*2 + 1] = (float) (in[i*2 + 1] * 3 + 7);
-}
-
-  /* check results:  */
-  for (i = 0; i  N*4; i++)
-{
-  if (out2[i*2] !=  ((float) in[i*2] * 2 + 6)
- || out2[i*2 + 1] != (float) (in[i*2 + 1] * 3 + 7))
-abort ();
-}
-
-
-  return 0;
-}
-
-int main (void)
-{
-  check_vect ();
-
-  main1 ();
-
-  return 0;
-}
-
-/* { dg-final { scan-tree-dump-times vectorized 3 loops 1 vect  { target { 
{ vect_uintfloat_cvt  vect_strided }   vect_int_mult } } } } */
-/* { dg-final { scan-tree-dump-times vectorized 2 loops 1 vect  { target { 
{ { ! vect_uintfloat_cvt }  vect_strided }   vect_int_mult } } } } */
-/* { dg-final { scan-tree-dump-times vectorized 0 loops 1 vect  {target  { 
! { vect_int_mult  vect_strided } } } } }  */
-/* { dg-final { scan-tree-dump-times vectorizing stmts using SLP 0  vect  
} } */
-/* { dg-final { cleanup-tree-dump vect } } */
-  
Index: gcc/testsuite/gcc.dg/vect/slp-11a.c
===
--- /dev/null   2011-03-23 08:42:11.268792848 +
+++ gcc/testsuite/gcc.dg/vect/slp-11a.c 2011-04-12 15:18:25.0 +0100
@@ -0,0 +1,75 @@
+/* { dg-require-effective-target vect_int } */
+
+#include stdarg.h
+#include tree-vect.h
+
+#define N 8
+
+int
+main1 ()
+{
+  int i;
+  unsigned int out[N*8], a0, a1, a2, a3, a4, a5, a6, a7, b1, b0, b2, b3, b4, 
b5, b6, b7;
+  unsigned int in[N*8] =