| /* { 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" } } */ |