(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
vect/
vect-46.c
       1  /* { dg-require-effective-target vect_float } */
       2  /* { dg-add-options double_vectors } */
       3  
       4  #include <stdarg.h>
       5  #include "tree-vect.h"
       6  
       7  #define N 256
       8  
       9  __attribute__ ((noinline))
      10  void bar (float *pa, float *pb, float *pc)
      11  {
      12    int i;
      13  
      14    /* check results:  */
      15    for (i = 0; i < N; i++)
      16      {
      17        if (pa[i] != (pb[i] * pc[i]))
      18  	abort();
      19      }
      20  
      21    return;
      22  }
      23  
      24  /* Aligned pointer accesses.
      25     The loop bound is unknown.
      26     No aliasing problems.
      27     vect-40.c is similar to this one with one difference:
      28          the loop bound is known.  */
      29  
      30  float b[N] __attribute__ ((__aligned__(__BIGGEST_ALIGNMENT__)))
      31       = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57};
      32  float c[N] __attribute__ ((__aligned__(__BIGGEST_ALIGNMENT__)))
      33       = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19};
      34  
      35  __attribute__ ((noinline)) int
      36  main1 (int n)
      37  {
      38    int i;
      39    float a[N] __attribute__ ((__aligned__(__BIGGEST_ALIGNMENT__)));
      40    float *pa = a;
      41    float *pb = b;
      42    float *pc = c;
      43  
      44    for (i = 0; i < n; i++)
      45      {
      46        pa[i] = pb[i] * pc[i];
      47      }
      48  
      49    bar (pa,pb,pc);
      50  
      51    return 0;
      52  }
      53  
      54  int main (void)
      55  {
      56    int i;
      57    int n=N;
      58    check_vect ();
      59    main1 (n);
      60    return 0;
      61  }
      62  
      63  /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
      64  /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" { xfail { ! vect_align_stack_vars } } } } */