(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
vect/
slp-4.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 short out[N*8];
      13    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};
      14    unsigned int ia[N*2];
      15  
      16    for (i = 0; i < N; i++)
      17      {
      18        out[i*8] = in[i*8];
      19        out[i*8 + 1] = in[i*8 + 1];
      20        out[i*8 + 2] = in[i*8 + 2];
      21        out[i*8 + 3] = in[i*8 + 3];
      22        out[i*8 + 4] = in[i*8 + 4];
      23        out[i*8 + 5] = in[i*8 + 5];
      24        out[i*8 + 6] = in[i*8 + 6];
      25        out[i*8 + 7] = in[i*8 + 7];
      26      
      27        ia[i] = 7;
      28      }
      29  
      30    /* check results:  */
      31    for (i = 0; i < N; i++)
      32      {
      33        if (out[i*8] !=  in[i*8]
      34           || out[i*8 + 1] != in[i*8 + 1]
      35           || out[i*8 + 2] != in[i*8 + 2]
      36           || out[i*8 + 3] != in[i*8 + 3]
      37           || out[i*8 + 4] != in[i*8 + 4]
      38           || out[i*8 + 5] != in[i*8 + 5]
      39           || out[i*8 + 6] != in[i*8 + 6]
      40           || out[i*8 + 7] != in[i*8 + 7]
      41           || ia[i] != 7)
      42  	abort ();
      43      }
      44  
      45    for (i = 0; i < N*2; i++)
      46      {
      47        out[i*4] = in[i*4];
      48        out[i*4 + 1] = in[i*4 + 1];
      49        out[i*4 + 2] = in[i*4 + 2];
      50        out[i*4 + 3] = in[i*4 + 3];
      51  
      52        ia[i] = 12;
      53      }
      54  
      55    /* check results:  */
      56    for (i = 0; i < N*2; i++)
      57      {
      58        if (out[i*4] !=  in[i*4]
      59           || out[i*4 + 1] != in[i*4 + 1]
      60           || out[i*4 + 2] != in[i*4 + 2]
      61           || out[i*4 + 3] != in[i*4 + 3]
      62           || ia[i] != 12)
      63          abort ();
      64      }
      65  
      66    for (i = 0; i < N/2; i++)
      67      {
      68        out[i*16] = in[i*16];
      69        out[i*16 + 1] = in[i*16 + 1];
      70        out[i*16 + 2] = in[i*16 + 2];
      71        out[i*16 + 3] = in[i*16 + 3];
      72        out[i*16 + 4] = in[i*16 + 4];
      73        out[i*16 + 5] = in[i*16 + 5];
      74        out[i*16 + 6] = in[i*16 + 6];
      75        out[i*16 + 7] = in[i*16 + 7];
      76        out[i*16 + 8] = in[i*16 + 8];
      77        out[i*16 + 9] = in[i*16 + 9];
      78        out[i*16 + 10] = in[i*16 + 10];
      79        out[i*16 + 11] = in[i*16 + 11];
      80        out[i*16 + 12] = in[i*16 + 12];
      81        out[i*16 + 13] = in[i*16 + 13];
      82        out[i*16 + 14] = in[i*16 + 14];
      83        out[i*16 + 15] = in[i*16 + 15];
      84  
      85        ia[i] = 21;
      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           || ia[i] != 21)
     108          abort ();
     109      }
     110  
     111  
     112    return 0;
     113  }
     114  
     115  int main (void)
     116  {
     117    check_vect ();
     118  
     119    main1 ();
     120  
     121    return 0;
     122  }
     123  
     124  /* { dg-final { scan-tree-dump-times "vectorized 3 loops" 1 "vect"  } } */
     125  /* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 3 "vect"  } } */
     126