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