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