1  /* { dg-require-effective-target vect_int } */
       2  
       3  #include <stdarg.h>
       4  #include "tree-vect.h"
       5  
       6  #define N 128
       7  
       8  typedef struct {
       9     unsigned short a;
      10     unsigned short b;
      11  } s;
      12  
      13  __attribute__ ((noinline)) int
      14  main1 ()
      15  {
      16    s arr[N];
      17    s *ptr = arr;
      18    unsigned int iarr[N];
      19    unsigned int *iptr = iarr;
      20    s res[N];
      21    unsigned int ires[N];
      22    int i;
      23  
      24    for (i = 0; i < N; i++)
      25      {
      26        arr[i].a = i;
      27        arr[i].b = i * 2;
      28        iarr[i] = i * 3;
      29        asm volatile ("" ::: "memory");
      30      }
      31  
      32    for (i = 0; i < N; i++)
      33      {
      34        ires[i] = *iptr;
      35        res[i].b = ptr->b - ptr->a;
      36        res[i].a = ptr->b + ptr->a;
      37        iptr++;
      38        ptr++;
      39      }
      40  
      41    /* check results:  */
      42    for (i = 0; i < N; i++)
      43      {
      44        if (res[i].b != arr[i].b - arr[i].a
      45            || ires[i] != iarr[i]
      46            || res[i].a != arr[i].b + arr[i].a)
      47          abort ();
      48      }
      49  
      50    return 0;
      51  }
      52  
      53  int main (void)
      54  {
      55    int i;
      56  
      57    check_vect ();
      58  
      59    main1 ();
      60  
      61    return 0;
      62  }
      63  
      64  /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect"  { target vect_strided2 } } } */
      65