(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
vect/
no-vfa-vect-depend-2.c
       1  /* { dg-require-effective-target vect_int } */
       2  
       3  #include <stdarg.h>
       4  #include "tree-vect.h"
       5  
       6  #define N 17
       7  
       8  int ia[N] = {48,45,42,39,36,33,30,27,24,21,18,15,12,9,6,3,0};
       9  int ib[N] = {48,45,42,39,36,33,30,27,24,21,18,15,12,9,6,3,0};
      10  int res[N] = {48,192,180,168,156,144,132,120,108,96,84,72,60,48,36,24,12};
      11  
      12  __attribute__ ((noinline))
      13  int main1 ()
      14  {
      15    int i;
      16  
      17    /* Not vectorizable due to data dependence: dependence distance 1.  */ 
      18    for (i = N - 2; i >= 0; i--)
      19      {
      20        ia[i] = ia[i+1] * 4;
      21      }
      22  
      23    /* check results:  */
      24    for (i = 0; i < N; i++)
      25      {
      26        if (ia[i] != 0)
      27  	abort ();
      28      } 
      29  
      30    /* Vectorizable. Dependence distance -1.  */
      31    for (i = N - 2; i >= 0; i--)
      32      {
      33        ib[i+1] = ib[i] * 4;
      34      }
      35  
      36    /* check results:  */
      37    for (i = 0; i < N; i++)
      38      {
      39        if (ib[i] != res[i])
      40  	abort ();
      41      }
      42  
      43    return 0;
      44  }
      45  
      46  int main (void)
      47  {
      48    check_vect ();
      49  
      50    return main1 ();
      51  }
      52  
      53  /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" {xfail { vect_no_align && { ! vect_hw_misalign } } } } } */
      54  /* { dg-final { scan-tree-dump-times "dependence distance negative" 1 "vect" { target { ! vect_multiple_sizes } } } } */
      55  /* { dg-final { scan-tree-dump "dependence distance negative" "vect" { target vect_multiple_sizes } } } */