1  /* { dg-do run } */
       2  /* { dg-require-effective-target vect_int } */
       3  /* { dg-require-effective-target vect_perm } */
       4  
       5  #include "tree-vect.h"
       6  
       7  void __attribute__((noipa))
       8  foo (int * __restrict__ a, signed char * __restrict__ b, int * __restrict__ c)
       9  {
      10    int t = *c;
      11    for (int i = 0; i < 64; ++i)
      12      {
      13        b[i] = a[i] - t;
      14        t = a[i];
      15      }
      16  }
      17  
      18  int a[64];
      19  signed char b[64];
      20  
      21  int
      22  main ()
      23  {
      24    check_vect ();
      25    for (int i = 0; i < 64; ++i)
      26      {
      27        a[i] = i;
      28        __asm__ volatile ("" ::: "memory");
      29      }
      30    int c = 7;
      31    foo (a, b, &c);
      32    for (int i = 1; i < 64; ++i)
      33      if (b[i] != a[i] - a[i-1])
      34        abort ();
      35    if (b[0] != -7)
      36      abort ();
      37    return 0;
      38  }
      39  
      40  /* { dg-final { scan-tree-dump "vectorized 1 loops in function" "vect" } } */