(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
vect/
vect-54.c
       1  /* Disabling epilogues until we find a better way to deal with scans.  */
       2  /* { dg-additional-options "--param vect-epilogues-nomask=0" } */
       3  /* { dg-require-effective-target vect_float } */
       4  /* { dg-add-options double_vectors } */
       5  
       6  #include <stdarg.h>
       7  #include "tree-vect.h"
       8  
       9  #define N 256
      10  
      11  __attribute__ ((noinline)) 
      12  void bar (float *pa, float *pb, float *pc)
      13  {
      14    int i;
      15  
      16    /* check results:  */
      17    for (i = 0; i < N/2; i++)
      18      {
      19        if (pa[i+1] != (pb[i+1] * pc[i+1]))
      20  	abort ();
      21      }
      22  
      23    return;
      24  }
      25  
      26  /* Unaligned pointer accesses, with a known alignment.
      27     The loop bound is known and divisible by the vectorization factor.
      28     No aliasing problems.
      29     vect-58.c is similar to this one with one difference:
      30          the loop bound is unknown.  */
      31  
      32  float b[N] __attribute__ ((__aligned__(__BIGGEST_ALIGNMENT__))) = {0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57};
      33  float c[N] __attribute__ ((__aligned__(__BIGGEST_ALIGNMENT__))) = {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 ()
      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/2; i++)
      45      {
      46        pa[i+1] = pb[i+1] * pc[i+1];
      47      }
      48  
      49    bar (a,b,c);
      50  
      51    return 0;
      52  }
      53  
      54  int main (void)
      55  {
      56    int i;
      57  
      58    check_vect ();
      59    main1 ();
      60  
      61    return 0;
      62  }
      63  
      64  /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
      65  /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" { xfail { ! vect_align_stack_vars } } } } */
      66  /* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { xfail vect_element_align_preferred } } } */