(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
vect/
vect-recurr-4.c
       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, int * __restrict__ b, int * __restrict__ c)
       9  {
      10    int t1 = *c;
      11    int t2 = *c;
      12    for (int i = 0; i < 64; i+=2)
      13      {
      14        b[i] = a[i] - t1;
      15        t1 = a[i];
      16        b[i+1] = a[i+1] - t2;
      17        t2 = a[i+1];
      18      }
      19  }
      20  
      21  int a[64], b[64];
      22  
      23  int
      24  main ()
      25  {
      26    check_vect ();
      27    for (int i = 0; i < 64; ++i)
      28      {
      29        a[i] = i;
      30        __asm__ volatile ("" ::: "memory");
      31      }
      32    int c = 7;
      33    foo (a, b, &c);
      34    for (int i = 2; i < 64; i+=2)
      35      if (b[i] != a[i] - a[i-2]
      36  	|| b[i+1] != a[i+1] - a[i-1])
      37        abort ();
      38    if (b[0] != -7 || b[1] != -6)
      39      abort ();
      40    return 0;
      41  }
      42  
      43  /* { dg-final { scan-tree-dump "vectorized 1 loops in function" "vect" } } */