(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
vect/
slp-7.c
       1  /* { dg-require-effective-target vect_int } */
       2  
       3  #include <stdarg.h>
       4  #include "tree-vect.h"
       5  
       6  #define N 8 
       7  
       8  unsigned int in[N*8]  __attribute__ ((__aligned__(__BIGGEST_ALIGNMENT__))) = {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};
       9  unsigned short in2[N*16]  __attribute__ ((__aligned__(__BIGGEST_ALIGNMENT__))) = {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};
      10  
      11  int
      12  main1 ()
      13  {
      14    int i;
      15    unsigned int out[N*8], ia[N*2];
      16    unsigned short sa[N], out2[N*16];
      17  
      18    for (i = 0; i < N; i++)
      19      {
      20        out[i*8] = in[i*8] + 5;
      21        out[i*8 + 1] = in[i*8 + 1] + 6;
      22        out[i*8 + 2] = in[i*8 + 2] + 7;
      23        out[i*8 + 3] = in[i*8 + 3] + 8;
      24        out[i*8 + 4] = in[i*8 + 4] + 9;
      25        out[i*8 + 5] = in[i*8 + 5] + 10;
      26        out[i*8 + 6] = in[i*8 + 6] + 11;
      27        out[i*8 + 7] = in[i*8 + 7] + 12;
      28  
      29        ia[i] = in[i]; 
      30      }
      31  
      32    /* check results:  */
      33    for (i = 0; i < N; i++)
      34      {
      35        if (out[i*8] !=  in[i*8] + 5
      36           || out[i*8 + 1] != in[i*8 + 1] + 6
      37           || out[i*8 + 2] != in[i*8 + 2] + 7
      38           || out[i*8 + 3] != in[i*8 + 3] + 8
      39           || out[i*8 + 4] != in[i*8 + 4] + 9
      40           || out[i*8 + 5] != in[i*8 + 5] + 10
      41           || out[i*8 + 6] != in[i*8 + 6] + 11
      42           || out[i*8 + 7] != in[i*8 + 7] + 12
      43           || ia[i] != in[i])
      44  	abort ();
      45      }
      46  
      47    for (i = 0; i < N*2; i++)
      48      {
      49        out[i*4] = in[i*4] + 1; 
      50        out[i*4 + 1] = in[i*4 + 1] + 2;
      51        out[i*4 + 2] = in[i*4 + 2] + 3;
      52        out[i*4 + 3] = in[i*4 + 3] + 4;
      53  
      54        ia[i] = in[i];
      55      }
      56  
      57    /* check results:  */
      58    for (i = 0; i < N*2; i++)
      59      {
      60        if (out[i*4] !=  in[i*4] + 1
      61           || out[i*4 + 1] != in[i*4 + 1] + 2
      62           || out[i*4 + 2] != in[i*4 + 2] + 3 
      63           || out[i*4 + 3] != in[i*4 + 3] + 4
      64           || ia[i] != in[i])
      65          abort ();
      66      }
      67  
      68    for (i = 0; i < N; i++)
      69      {
      70        out2[i*16] = in2[i*16] * 2;
      71        out2[i*16 + 1] = in2[i*16 + 1] * 3;
      72        out2[i*16 + 2] = in2[i*16 + 2] * 4;
      73        out2[i*16 + 3] = in2[i*16 + 3] * 3;
      74        out2[i*16 + 4] = in2[i*16 + 4] * 2;
      75        out2[i*16 + 5] = in2[i*16 + 5] * 3;
      76        out2[i*16 + 6] = in2[i*16 + 6] * 2;
      77        out2[i*16 + 7] = in2[i*16 + 7] * 4;
      78        out2[i*16 + 8] = in2[i*16 + 8] * 2;
      79        out2[i*16 + 9] = in2[i*16 + 9] * 5;
      80        out2[i*16 + 10] = in2[i*16 + 10] * 2;
      81        out2[i*16 + 11] = in2[i*16 + 11] * 3;
      82        out2[i*16 + 12] = in2[i*16 + 12] * 4;
      83        out2[i*16 + 13] = in2[i*16 + 13] * 4;
      84        out2[i*16 + 14] = in2[i*16 + 14] * 3;
      85        out2[i*16 + 15] = in2[i*16 + 15] * 2;
      86      }
      87  
      88    /* check results:  */
      89    for (i = 0; i < N; i++)
      90      {
      91        if (out2[i*16] !=  in2[i*16] * 2
      92           || out2[i*16 + 1] != in2[i*16 + 1] * 3
      93           || out2[i*16 + 2] != in2[i*16 + 2] * 4
      94           || out2[i*16 + 3] != in2[i*16 + 3] * 3
      95           || out2[i*16 + 4] != in2[i*16 + 4] * 2
      96           || out2[i*16 + 5] != in2[i*16 + 5] * 3
      97           || out2[i*16 + 6] != in2[i*16 + 6] * 2
      98           || out2[i*16 + 7] != in2[i*16 + 7] * 4
      99           || out2[i*16 + 8] != in2[i*16 + 8] * 2
     100           || out2[i*16 + 9] != in2[i*16 + 9] * 5
     101           || out2[i*16 + 10] != in2[i*16 + 10] * 2
     102           || out2[i*16 + 11] != in2[i*16 + 11] * 3
     103           || out2[i*16 + 12] != in2[i*16 + 12] * 4
     104           || out2[i*16 + 13] != in2[i*16 + 13] * 4
     105           || out2[i*16 + 14] != in2[i*16 + 14] * 3
     106           || out2[i*16 + 15] != in2[i*16 + 15] * 2)
     107          abort ();
     108      }
     109  
     110  
     111    return 0;
     112  }
     113  
     114  int main (void)
     115  {
     116    check_vect ();
     117  
     118    main1 ();
     119  
     120    return 0;
     121  }
     122  
     123  /* { dg-final { scan-tree-dump-times "vectorized 3 loops" 1 "vect"  { target vect_short_mult } } }*/
     124  /* { dg-final { scan-tree-dump-times "vectorized 2 loops" 1 "vect"  { target { ! { vect_short_mult } } } } }*/
     125  /* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 3 "vect"  { target vect_short_mult } } } */
     126  /* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 2 "vect"  { target { ! { vect_short_mult } } } } } */
     127