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] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48};
       9  int ib[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48};
      10  int res[N] = {12,24,36,48,60,72,84,96,108,120,132,144,156,168,180,192,48};
      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 = 0; i < N - 1; i++)
      19      {
      20        ia[i+1] = ia[i] * 4;
      21      }
      22  
      23    /* check results:  */
      24    for (i = 0; i < N - 1; i++)
      25      {
      26        if (ia[i] != 0)
      27          abort ();
      28      } 
      29  
      30    /* Vectorizable. Dependence distance -1.  */
      31    for (i = 0; i < N - 1; i++)
      32      {
      33        ib[i] = ib[i+1] * 4;
      34      }
      35  
      36    /* check results:  */
      37    for (i = 0; i < N - 1; 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"  } } */
      55