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