(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
vect/
vect-reduc-11.c
       1  /* { dg-require-effective-target vect_int } */
       2  
       3  #include "tree-vect.h"
       4  
       5  int x[1024], y[1024], z[1024];
       6  
       7  int __attribute__((noinline,noclone))
       8  foo (int n)
       9  {
      10    int sum = 0;
      11    /* Can vectorize this.  */
      12    for (int i = 0; i < n; ++i)
      13      sum = (y[i] - (x[i] - sum));
      14    return sum;
      15  }
      16  
      17  int __attribute__((noinline,noclone))
      18  bar (int n)
      19  {
      20    int sum = 0;
      21    /* Cannot vectorize this, sum is negated.  */
      22    for (int i = 0; i < n; ++i)
      23      sum = z[i] - (y[i] - (x[i] - sum));
      24    return sum;
      25  }
      26  
      27  int
      28  main()
      29  {
      30    check_vect ();
      31    for (int i = 0; i < 1024; ++i)
      32      {
      33        x[i] = i;
      34        y[i] = i + 1;
      35        z[i] = 0;
      36        __asm__ volatile ("" : : : "memory");
      37      }
      38    if (foo (1024) != 1024)
      39      __builtin_abort ();
      40    if (bar (1023) != -1 || bar (1024) != 0)
      41      __builtin_abort ();
      42    return 0;
      43  }
      44  
      45  /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */