libcpp, c, middle-end: Optimize initializers using #embed in C
[official-gcc.git] / gcc / testsuite / gcc.dg / vect / pr97832-2.c
blob7d8d2691432717eaac8e08e877300d9880ee8646
1 /* { dg-do compile } */
2 /* { dg-additional-options "-Ofast" } */
3 /* { dg-require-effective-target vect_double } */
5 void foo1x1(double* restrict y, const double* restrict x, int clen)
7 int xi = clen & 2;
8 double f_re = x[0+xi+0];
9 double f_im = x[4+xi+0];
10 int clen2 = (clen+xi) * 2;
11 #pragma GCC unroll 0
12 for (int c = 0; c < clen2; c += 8) {
13 // y[c] = y[c] - x[c]*conj(f);
14 #pragma GCC unroll 4
15 for (int k = 0; k < 4; ++k) {
16 double x_re = x[c+0+k];
17 double x_im = x[c+4+k];
18 double y_re = y[c+0+k];
19 double y_im = y[c+4+k];
20 y_re = y_re - x_re * f_re - x_im * f_im;;
21 y_im = y_im + x_re * f_im - x_im * f_re;
22 y[c+0+k] = y_re;
23 y[c+4+k] = y_im;
28 /* { dg-final { scan-tree-dump "vectorizing stmts using SLP" "vect" { target { ! { vect_load_lanes && vect_strided8 } } } } } */
29 /* { dg-final { scan-tree-dump "Loop contains only SLP stmts" "vect" { target { ! { vect_load_lanes && vect_strided8 } } } } } */