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