blob: fdf7b1584d774b981cf700164c9d3b0ef1d5fdca [file] [log] [blame]
/* PR target/85918 */
/* { dg-do run } */
/* { dg-require-effective-target avx512dq } */
/* { dg-require-effective-target avx512vl } */
/* { dg-options "-O3 -mavx512dq -mavx512vl -mprefer-vector-width=512 -fno-vect-cost-model" } */
#define AVX512DQ
#define AVX512VL
#define DO_TEST avx512dqvl_test
static void avx512dqvl_test (void);
#include "avx512-check.h"
#define N 16
long long ll[N] __attribute__((aligned (64)));
unsigned long long ull[N] __attribute__((aligned (64)));
float f[N] __attribute__((aligned (64)));
double d[N] __attribute__((aligned (64)));
__attribute__((noipa)) void
ll2d1 (void)
{
int i;
for (i = 0; i < 4; i++)
d[i] = ll[i];
}
__attribute__((noipa)) void
ull2d1 (void)
{
int i;
for (i = 0; i < 4; i++)
d[i] = ull[i];
}
__attribute__((noipa)) void
d2ll1 (void)
{
int i;
for (i = 0; i < 4; i++)
ll[i] = d[i];
}
__attribute__((noipa)) void
d2ull1 (void)
{
int i;
for (i = 0; i < 4; i++)
ull[i] = d[i];
}
__attribute__((noipa)) void
ll2f1 (void)
{
int i;
for (i = 0; i < 4; i++)
f[i] = ll[i];
}
__attribute__((noipa)) void
ull2f1 (void)
{
int i;
for (i = 0; i < 4; i++)
f[i] = ull[i];
}
__attribute__((noipa)) void
f2ll1 (void)
{
int i;
for (i = 0; i < 4; i++)
ll[i] = f[i];
}
__attribute__((noipa)) void
f2ull1 (void)
{
int i;
for (i = 0; i < 4; i++)
ull[i] = f[i];
}
__attribute__((noipa)) void
ll2d2 (void)
{
int i;
for (i = 0; i < 8; i++)
d[i] = ll[i];
}
__attribute__((noipa)) void
ull2d2 (void)
{
int i;
for (i = 0; i < 8; i++)
d[i] = ull[i];
}
__attribute__((noipa)) void
d2ll2 (void)
{
int i;
for (i = 0; i < 8; i++)
ll[i] = d[i];
}
__attribute__((noipa)) void
d2ull2 (void)
{
int i;
for (i = 0; i < 8; i++)
ull[i] = d[i];
}
__attribute__((noipa)) void
ll2f2 (void)
{
int i;
for (i = 0; i < 8; i++)
f[i] = ll[i];
}
__attribute__((noipa)) void
ull2f2 (void)
{
int i;
for (i = 0; i < 8; i++)
f[i] = ull[i];
}
__attribute__((noipa)) void
f2ll2 (void)
{
int i;
for (i = 0; i < 8; i++)
ll[i] = f[i];
}
__attribute__((noipa)) void
f2ull2 (void)
{
int i;
for (i = 0; i < 8; i++)
ull[i] = f[i];
}
__attribute__((noipa)) void
ll2d3 (void)
{
int i;
for (i = 0; i < 16; i++)
d[i] = ll[i];
}
__attribute__((noipa)) void
ull2d3 (void)
{
int i;
for (i = 0; i < 16; i++)
d[i] = ull[i];
}
__attribute__((noipa)) void
d2ll3 (void)
{
int i;
for (i = 0; i < 16; i++)
ll[i] = d[i];
}
__attribute__((noipa)) void
d2ull3 (void)
{
int i;
for (i = 0; i < 16; i++)
ull[i] = d[i];
}
__attribute__((noipa)) void
ll2f3 (void)
{
int i;
for (i = 0; i < 16; i++)
f[i] = ll[i];
}
__attribute__((noipa)) void
ull2f3 (void)
{
int i;
for (i = 0; i < 16; i++)
f[i] = ull[i];
}
__attribute__((noipa)) void
f2ll3 (void)
{
int i;
for (i = 0; i < 16; i++)
ll[i] = f[i];
}
__attribute__((noipa)) void
f2ull3 (void)
{
int i;
for (i = 0; i < 16; i++)
ull[i] = f[i];
}
unsigned long long ullt[] = {
13835058055282163712ULL, 9223653511831486464ULL, 9218868437227405312ULL,
1ULL, 9305281255077576704ULL, 1191936ULL, 18446462598732840960ULL, 0ULL,
9223372036854775808ULL, 4611686018427387904ULL, 2305843009213693952ULL,
9ULL, 9223653511831486464ULL, 0ULL, 65536ULL, 131071ULL
};
float uft[] = {
13835058055282163712.0f, 9223653511831486464.0f, 9218868437227405312.0f,
1.0f, 9305281255077576704.0f, 1191936.0f, 18446462598732840960.0f, 0.0f,
9223372036854775808.0f, 4611686018427387904.0f, 2305843009213693952.0f,
9.0f, 9223653511831486464.0f, 0.0f, 65536.0f, 131071.0f
};
long long llt[] = {
9223090561878065152LL, -9223372036854775807LL - 1, -9223090561878065152LL,
-4LL, -8074672656898588672LL, 8074672656898588672LL, 29LL, -15LL,
7574773098260463616LL, -7579276697887834112LL, -8615667562136469504LL,
148LL, -255LL, 9151595917793558528LL, -9218868437227405312LL, 9LL
};
float ft[] = {
9223090561878065152.0f, -9223372036854775808.0f, -9223090561878065152.0f,
-4.0f, -8074672656898588672.0f, 8074672656898588672.0f, 29.0f, -15.0f,
7574773098260463616.0f, -7579276697887834112.0f, -8615667562136469504.0f,
148.0f, -255.0f, 9151595917793558528.0f, -9218868437227405312.0f, 9.0f
};
static void
avx512dqvl_test (void)
{
int i;
for (i = 0; i < 4; i++)
{
ll[i] = llt[i];
ull[i] = ullt[i];
}
ll2d1 ();
for (i = 0; i < 4; i++)
if (d[i] != ft[i])
abort ();
ull2d1 ();
for (i = 0; i < 4; i++)
if (d[i] != uft[i])
abort ();
else
d[i] = ft[i + 4];
d2ll1 ();
for (i = 0; i < 4; i++)
if (ll[i] != llt[i + 4])
abort ();
else
d[i] = uft[i + 4];
d2ull1 ();
for (i = 0; i < 4; i++)
if (ull[i] != ullt[i + 4])
abort ();
else
{
ll[i] = llt[i + 8];
ull[i] = ullt[i + 8];
}
ll2f1 ();
for (i = 0; i < 4; i++)
if (f[i] != ft[i + 8])
abort ();
ull2f1 ();
for (i = 0; i < 4; i++)
if (f[i] != uft[i + 8])
abort ();
else
f[i] = ft[i + 12];
f2ll1 ();
for (i = 0; i < 4; i++)
if (ll[i] != llt[i + 12])
abort ();
else
f[i] = uft[i + 12];
f2ull1 ();
for (i = 0; i < 4; i++)
if (ull[i] != ullt[i + 12])
abort ();
for (i = 0; i < 8; i++)
{
ll[i] = llt[i];
ull[i] = ullt[i];
}
ll2d2 ();
for (i = 0; i < 8; i++)
if (d[i] != ft[i])
abort ();
ull2d2 ();
for (i = 0; i < 8; i++)
if (d[i] != uft[i])
abort ();
else
{
d[i] = ft[i];
ll[i] = 1234567LL;
ull[i] = 7654321ULL;
}
d2ll2 ();
for (i = 0; i < 8; i++)
if (ll[i] != llt[i])
abort ();
else
d[i] = uft[i];
d2ull2 ();
for (i = 0; i < 8; i++)
if (ull[i] != ullt[i])
abort ();
else
{
ll[i] = llt[i + 8];
ull[i] = ullt[i + 8];
}
ll2f2 ();
for (i = 0; i < 8; i++)
if (f[i] != ft[i + 8])
abort ();
ull2f2 ();
for (i = 0; i < 8; i++)
if (f[i] != uft[i + 8])
abort ();
else
{
f[i] = ft[i + 8];
ll[i] = 1234567LL;
ull[i] = 7654321ULL;
}
f2ll2 ();
for (i = 0; i < 8; i++)
if (ll[i] != llt[i + 8])
abort ();
else
f[i] = uft[i + 8];
f2ull2 ();
for (i = 0; i < 8; i++)
if (ull[i] != ullt[i + 8])
abort ();
for (i = 0; i < 16; i++)
{
ll[i] = llt[i];
ull[i] = ullt[i];
}
ll2d3 ();
for (i = 0; i < 16; i++)
if (d[i] != ft[i])
abort ();
ull2d3 ();
for (i = 0; i < 16; i++)
if (d[i] != uft[i])
abort ();
else
{
d[i] = ft[i];
ll[i] = 1234567LL;
ull[i] = 7654321ULL;
}
d2ll3 ();
for (i = 0; i < 16; i++)
if (ll[i] != llt[i])
abort ();
else
d[i] = uft[i];
d2ull3 ();
for (i = 0; i < 16; i++)
if (ull[i] != ullt[i])
abort ();
else
{
ll[i] = llt[i];
ull[i] = ullt[i];
f[i] = 3.0f;
d[i] = 4.0;
}
ll2f3 ();
for (i = 0; i < 16; i++)
if (f[i] != ft[i])
abort ();
ull2f3 ();
for (i = 0; i < 16; i++)
if (f[i] != uft[i])
abort ();
else
{
f[i] = ft[i];
ll[i] = 1234567LL;
ull[i] = 7654321ULL;
}
f2ll3 ();
for (i = 0; i < 16; i++)
if (ll[i] != llt[i])
abort ();
else
f[i] = uft[i];
f2ull3 ();
for (i = 0; i < 16; i++)
if (ull[i] != ullt[i])
abort ();
}