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