(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
vect/
slp-16.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 out[N*8];
       9  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};
      10  unsigned int in2[N*16] = {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};
      11  unsigned int out2[N*16];
      12  
      13  int
      14  main1 ()
      15  {
      16    int i;
      17    unsigned int a0, a1, a2, a3, a4, a5, a6, a7, b1, b0, b2, b3, b4, b5, b6, b7;
      18  
      19    /* SLP group of size that is not a multiple of vector size. 
      20       Unrolling by 2.  */
      21    for (i = 0; i < N; i++)
      22      {
      23        a0 = in[i*2] + 5;
      24        a1 = in[i*2 + 1] + 6; 
      25      
      26        b0 = a0 * 3;
      27        b1 = a1 * 2; 
      28      
      29        out[i*2] = b0 - 2;
      30        out[i*2 + 1] = b1 - 3; 
      31      
      32        out2[i*6] = in2[i*6] * 2;
      33        out2[i*6 + 1] = in2[i*6 + 1] * 3;
      34        out2[i*6 + 2] = in2[i*6 + 2] * 4;
      35        out2[i*6 + 3] = in2[i*6 + 3] * 2;
      36        out2[i*6 + 4] = in2[i*6 + 4] * 4;
      37        out2[i*6 + 5] = in2[i*6 + 5] * 3;
      38      }
      39  
      40    /* check results:  */
      41    for (i = 0; i < N; i++)
      42      {
      43        if (out[i*2] !=  (in[i*2] + 5) * 3 - 2
      44           || out[i*2 + 1] != (in[i*2 + 1] + 6) * 2 - 3
      45           || out2[i*6] != in2[i*6] * 2
      46           || out2[i*6 + 1] != in2[i*6 + 1] * 3
      47           || out2[i*6 + 2] != in2[i*6 + 2] * 4
      48           || out2[i*6 + 3] != in2[i*6 + 3] * 2
      49           || out2[i*6 + 4] != in2[i*6 + 4] * 4
      50           || out2[i*6 + 5] != in2[i*6 + 5] * 3)
      51          abort ();
      52      }
      53  
      54  
      55  
      56    return 0;
      57  }
      58  
      59  int main (void)
      60  {
      61    check_vect ();
      62  
      63    main1 ();
      64  
      65    return 0;
      66  }
      67  
      68  /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect"  { target vect_int_mult } } } */
      69  /* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 2 "vect" { target vect_int_mult } } } */
      70