1 /* { dg-require-effective-target vect_int } */
2 /* { dg-require-effective-target vect_double } */
3 /* { dg-require-effective-target vect_doubleint_cvt } */
4 /* { dg-require-effective-target vect_intdouble_cvt } */
5 /* { dg-require-effective-target vect_pack_trunc } */
6 /* { dg-require-effective-target vect_unpack } */
7 /* { dg-require-effective-target vect_hw_misalign } */
11 void __attribute__((noinline
,noclone
))
12 test1(_Complex
double *a
, _Complex
int *b
, int stride
, int n
)
15 for (i
= 0; i
< n
; i
++)
17 a
[i
*stride
] = b
[i
*stride
];
21 void __attribute__((noinline
,noclone
))
22 test2(_Complex
int *a
, _Complex
double *b
, int stride
, int n
)
25 for (i
= 0; i
< n
; i
++)
27 a
[i
*stride
] = b
[i
*stride
];
32 _Complex
double da
[256];
34 extern void abort (void);
43 for (stride
= 1; stride
< 15; stride
++)
45 for (i
= 0; i
< 256; i
++)
47 __real__ ia
[i
] = (i
+ stride
) % 19;
48 __imag__ ia
[i
] = (i
+ stride
) % 23;
49 __asm__
volatile ("");
52 test1(da
, ia
, stride
, 256/stride
);
55 for (i
= 0; i
< 256/stride
; i
++)
57 if (da
[i
*stride
] != ia
[i
*stride
])
61 for (i
= 0; i
< 256; i
++)
63 __real__ da
[i
] = (i
+ stride
+ 1) % 29;
64 __imag__ da
[i
] = (i
+ stride
+ 1) % 31;
65 __asm__
volatile ("");
68 test2(ia
, da
, stride
, 256/stride
);
71 for (i
= 0; i
< 256/stride
; i
++)
73 if (da
[i
*stride
] != ia
[i
*stride
])
80 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 2 "vect" } } */