blob: 2054a949325eb504330a1d02b81db43c7b532b14 [file] [log] [blame]
/* { dg-do run } */
/* { dg-require-effective-target avx512f } */
/* { dg-options "-O3 -mavx512f -ffast-math -mtune=knl" } */
#include "avx512f-check.h"
#define N 1024
float f[N];
double d[N];
int k[N];
float *l[N];
double *n[N];
int **m[N];
long q[N];
long long **o[N];
long long t[N];
long long *r[N];
int *s[N];
__attribute__((noinline, noclone)) float
f1 (void)
{
int i;
float g = 0.0;
for (i = 0; i < N / 2; i++)
g += f[k[i]];
return g;
}
__attribute__((noinline, noclone)) float
f2 (float *p)
{
int i;
float g = 0.0;
for (i = 0; i < N / 2; i++)
g += p[k[i]];
return g;
}
__attribute__((noinline, noclone)) float
f3 (void)
{
int i;
float g = 0.0;
for (i = 0; i < N / 2; i++)
g += *l[i];
return g;
}
__attribute__((noinline, noclone)) int
f4 (void)
{
int i;
int g = 0;
for (i = 0; i < N / 2; i++)
g += **m[i];
return g;
}
__attribute__((noinline, noclone)) double
f5 (void)
{
int i;
double g = 0.0;
for (i = 0; i < N / 2; i++)
g += d[k[i]];
return g;
}
__attribute__((noinline, noclone)) double
f6 (double *p)
{
int i;
double g = 0.0;
for (i = 0; i < N / 2; i++)
g += p[k[i]];
return g;
}
__attribute__((noinline, noclone)) double
f7 (void)
{
int i;
double g = 0.0;
for (i = 0; i < N / 2; i++)
g += *n[i];
return g;
}
__attribute__((noinline, noclone)) int
f8 (void)
{
int i;
int g = 0;
for (i = 0; i < N / 2; i++)
g += **o[i];
return g;
}
__attribute__((noinline, noclone)) float
f9 (void)
{
int i;
float g = 0.0;
for (i = 0; i < N / 2; i++)
g += f[q[i]];
return g;
}
__attribute__((noinline, noclone)) float
f10 (float *p)
{
int i;
float g = 0.0;
for (i = 0; i < N / 2; i++)
g += p[q[i]];
return g;
}
__attribute__((noinline, noclone)) double
f11 (void)
{
int i;
double g = 0.0;
for (i = 0; i < N / 2; i++)
g += d[q[i]];
return g;
}
__attribute__((noinline, noclone)) double
f12 (double *p)
{
int i;
double g = 0.0;
for (i = 0; i < N / 2; i++)
g += p[q[i]];
return g;
}
static void
avx512f_test (void)
{
int i;
for (i = 0; i < N; i++)
{
asm ("");
f[i] = -256.0f + i;
d[i] = -258.0 + i;
k[i] = (i * 731) & (N - 1);
q[i] = (i * 657) & (N - 1);
t[i] = (i * 657) & (N - 1);
l[i] = &f[(i * 239) & (N - 1)];
n[i] = &d[(i * 271) & (N - 1)];
r[i] = &t[(i * 323) & (N - 1)];
s[i] = &k[(i * 565) & (N - 1)];
m[i] = &s[(i * 13) & (N - 1)];
o[i] = &r[(i * 19) & (N - 1)];
}
if (f1 () != 136448.0f || f2 (f) != 136448.0f || f3 () != 130304.0)
abort ();
if (f4 () != 261376 || f5 () != 135424.0 || f6 (d) != 135424.0)
abort ();
if (f7 () != 129280.0 || f8 () != 259840L || f9 () != 130816.0f)
abort ();
if (f10 (f) != 130816.0f || f11 () != 129792.0 || f12 (d) != 129792.0)
abort ();
}