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
)
8 double f_re
= x
[0+xi
+0];
9 double f_im
= x
[4+xi
+0];
10 int clen2
= (clen
+xi
) * 2;
12 for (int c
= 0; c
< clen2
; c
+= 8) {
13 // y[c] = y[c] - x[c]*conj(f);
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
;
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 } } } } } */