1  /* { dg-require-effective-target vect_float } */
       2  
       3  #include <stdarg.h>
       4  #include "tree-vect.h"
       5  
       6  #define N 256
       7  
       8  void bar (float *pd, float *pa, float *pb, float *pc) 
       9  {
      10    int i;
      11  
      12    /* check results:  */
      13    for (i = 0; i < N; i++)
      14      {
      15        if (pa[i] != (pb[i] * pc[i]))
      16  	abort ();
      17        if (pd[i] != 5.0)
      18  	abort ();
      19      }
      20  
      21    return;
      22  }
      23  
      24  
      25  int
      26  main1 (int n, float * __restrict__ pd, float * __restrict__ pa, float * __restrict__ pb, float * __restrict__ pc)
      27  {
      28    int i;
      29  
      30    for (i = 0; i < n; i++)
      31      {
      32        pa[i] = pb[i] * pc[i];
      33        pd[i] = 5.0;
      34      }
      35  
      36    bar (pd,pa,pb,pc);
      37  
      38    return 0;
      39  }
      40  
      41  int main (void)
      42  {
      43    int i;
      44    float a[N] __attribute__ ((__aligned__(__BIGGEST_ALIGNMENT__)));
      45    float d[N+1] __attribute__ ((__aligned__(__BIGGEST_ALIGNMENT__)));
      46    float b[N] = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57};
      47    float c[N] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19};
      48  
      49    check_vect ();
      50  
      51    main1 (N,&d[1],a,b,c);
      52    main1 (N-2,&d[1],a,b,c);
      53  
      54    return 0;
      55  }
      56  
      57  /* { dg-final { scan-tree-dump-times "vectorized 0 loops" 2 "vect" } } */
      58  /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" } } */
      59  /* { dg-final { scan-tree-dump-times "Alignment of access forced using versioning" 0 "vect" } } */