blob: e43539fbbd7202b3ae2e9f71bfd82a3fcdf8bde3 [file] [log] [blame]
/* { dg-additional-options "-mavx2" { target avx_runtime } } */
#include "tree-vect.h"
#define N 16
struct C { int r, i; };
struct C a[N], b[N], c[N], d[N], e[N];
__attribute__((noipa)) static void
foo (struct C *__restrict x, struct C *__restrict y, struct C *__restrict z, int w)
{
int i;
for (int i = 0; i < w; i++)
{
z[i].r = x[i].r * y[-1 - i].r - x[i].i * y[-1 - i].i;
z[i].i = x[i].i * y[-1 - i].r + x[i].r * y[-1 - i].i;
}
}
__attribute__((noipa)) static void
bar (struct C *__restrict x, struct C *__restrict y, struct C *__restrict z, int w)
{
int i;
for (int i = 0; i < w; i++)
{
z[i].r = x[i].r * y[i].r - x[i].i * y[i].i;
z[i].i = x[i].i * y[i].r + x[i].r * y[i].i;
}
}
int
main ()
{
check_vect ();
int i;
for (i = 0; i < N; ++i)
{
a[i].r = N - i; a[i].i = i - N;
b[i].r = i - N; b[i].i = i + N;
c[i].r = -1 - i; c[i].i = 2 * N - 1 - i;
}
foo (a, b + N, d, N);
bar (a, c, e, N);
for (i = 0; i < N; ++i)
if (d[i].r != e[i].r || d[i].i != e[i].i)
__builtin_abort ();
return 0;
}