/* { dg-require-effective-target vect_double } */ /* { dg-require-effective-target vect_hw_misalign } */ #include "tree-vect.h" void __attribute__((noinline,noclone)) test1(_Complex double * __restrict__ a, _Complex double * __restrict__ b, double * __restrict__ c, int stride, int n) { int i; for (i = 0; i < n; i++) { a[i*stride] = 0.5 * b[i*stride] * c[i*stride]; } } double ca[256]; _Complex double ia[256]; _Complex double da[256]; extern void abort (void); int main () { int i; int stride; check_vect (); for (stride = 1; stride < 15; stride++) { for (i = 0; i < 256; i++) { __real__ ia[i] = (i + stride) % 19; __imag__ ia[i] = (i + stride) % 23; ca[i] = (i + stride) % 29; __asm__ volatile (""); } test1(da, ia, ca, stride, 256/stride); for (i = 0; i < 256/stride; i++) { if (da[i*stride] != 0.5 * ia[i*stride] * ca[i*stride]) abort (); } } return 0; } /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */