(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
vect/
pr66253.c
       1  /* { dg-require-effective-target vect_double } */
       2  /* { dg-require-effective-target vect_hw_misalign } */
       3  
       4  #include "tree-vect.h"
       5  
       6  void __attribute__((noinline,noclone))
       7  test1(_Complex double * __restrict__ a, _Complex double * __restrict__ b,
       8        double * __restrict__ c, int stride, int n)
       9  {
      10    int i;
      11    for (i = 0; i < n; i++)
      12      {
      13        a[i*stride] = 0.5 * b[i*stride] * c[i*stride];
      14      }
      15  }
      16  
      17  double ca[256];
      18  _Complex double ia[256];
      19  _Complex double da[256];
      20  
      21  extern void abort (void);
      22  
      23  int main ()
      24  {
      25    int i;
      26    int stride;
      27  
      28    check_vect ();
      29  
      30    for (stride = 1; stride < 15; stride++)
      31      {
      32        for (i = 0; i < 256; i++)
      33  	{
      34  	  __real__ ia[i] = (i + stride) % 19;
      35  	  __imag__ ia[i] = (i + stride) % 23;
      36  	  ca[i] = (i + stride) % 29;
      37  	  __asm__ volatile ("");
      38  	}
      39  
      40        test1(da, ia, ca, stride, 256/stride);
      41  
      42        for (i = 0; i < 256/stride; i++)
      43  	{
      44  	  if (da[i*stride] != 0.5 * ia[i*stride] * ca[i*stride])
      45  	    abort ();
      46  	}
      47      }
      48    return 0;
      49  }
      50  
      51  /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */