/* { dg-require-effective-target vect_int } */

#include <stdarg.h>
#include "tree-vect.h"

#define N 128 

typedef struct {
   int a;
   int b;
   void *c;
} s1;

int
foo1 (s1 *arr)
{
  int i;
  s1 *ptr = arr;

  /* Vectorized as a strided SLP pair of accesses to <a, b> and a single
     strided access to c.  */
  for (i = 0; i < N; i++)
    {
      ptr->a = 6;
      ptr->b = 7;
      ptr->c = 0;
      ptr++; 
    } 
   
  /* check results:  */
  for (i = 0; i < N; i++)
    { 
       if (arr[i].a != 6 
           || arr[i].b != 7
           || arr[i].c != 0)
         abort();
    }
}

int main (void)
{
  int i;
  s1 arr1[N];
  
  check_vect ();

  for (i = 0; i < N; i++)
    { 
      arr1[i].a = i;
      arr1[i].b = i * 2;
      arr1[i].c = (void *)arr1;
      asm volatile ("" ::: "memory");
    } 


  foo1 (arr1);

  return 0;
}

/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_hw_misalign } } } */
/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 1 "vect" { target vect_hw_misalign } } } */
