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