/* { dg-do run } */ /* { dg-additional-options "-Ofast -fno-common" } */ /* { dg-additional-options "-Ofast -fno-common -mavx" { target avx_runtime } } */ #include #include "tree-vect.h" __attribute__((noinline, noclone)) void foo (double *x, double *y) { double *p = __builtin_assume_aligned (x, 16); double *q = __builtin_assume_aligned (y, 16); double z, h; int i; for (i = 0; i < 1024; i++) { if (p[i] < 0.0) z = q[i], h = q[i] * 7.0 + 3.0; else z = p[i] + 6.0, h = p[1024 + i]; p[i] = z + 2.0 * h; } } double a[2048] __attribute__((aligned (16))); double b[1024] __attribute__((aligned (16))); int main () { int i; check_vect (); for (i = 0; i < 1024; i++) { a[i] = (i & 1) ? -i : 2 * i; a[i + 1024] = i; b[i] = 7 * i; asm (""); } foo (a, b); for (i = 0; i < 1024; i++) if (a[i] != ((i & 1) ? 7 * i + 2.0 * (7 * i * 7.0 + 3.0) : 2 * i + 6.0 + 2.0 * i) || b[i] != 7 * i || a[i + 1024] != i) abort (); return 0; } /* { dg-final { scan-tree-dump-times "note: vectorized 1 loops" 1 "vect" { target avx_runtime } } } */ /* { dg-final { cleanup-tree-dump "vect" } } */