blob: cb5041b6af34d7558ce1e8e98d8f69bf88c088da [file] [log] [blame]
/* { dg-do compile } */
/* { dg-options "-mavx -mno-avx512f -O2" } */
/* { dg-final { scan-assembler-times {(?n)vmov[a-z0-9]*[ \t]*%xmm[0-9]} 12 } } */
/* { dg-final { scan-assembler-not "pxor" } } */
typedef float v8sf __attribute__((vector_size(32)));
typedef double v4df __attribute__ ((vector_size (32)));
typedef long long v4di __attribute__((vector_size(32)));
typedef int v8si __attribute__((vector_size(32)));
typedef short v16hi __attribute__ ((vector_size (32)));
typedef char v32qi __attribute__ ((vector_size (32)));
v4df
foo_v4df (v4df x)
{
return __builtin_shuffle (x, (v4df) { 0, 0, 0, 0 }, (v4di) { 0, 1, 4, 5 });
}
v4df
foo_v4df_l (v4df x)
{
return __builtin_shuffle ((v4df) { 0, 0, 0, 0 }, x, (v4di) { 4, 5, 1, 2 });
}
v4di
foo_v4di (v4di x)
{
return __builtin_shuffle (x, (v4di) { 0, 0, 0, 0 }, (v4di) { 0, 1, 4, 7 });
}
v4di
foo_v4di_l (v4di x)
{
return __builtin_shuffle ((v4di) { 0, 0, 0, 0 }, x, (v4di) { 4, 5, 3, 1 });
}
v8sf
foo_v8sf (v8sf x)
{
return __builtin_shuffle ((v8sf) { 0, 0, 0, 0, 0, 0, 0, 0 }, x,
(v8si) { 8, 9, 10, 11, 0, 1, 2, 3 });
}
v8sf
foo_v8sf_l (v8sf x)
{
return __builtin_shuffle (x, (v8sf) { 0, 0, 0, 0, 0, 0, 0, 0 },
(v8si) { 0, 1, 2, 3, 8, 9, 10, 11 });
}
v8si
foo_v8si (v8si x)
{
return __builtin_shuffle (x, (v8si) { 0, 0, 0, 0, 0, 0, 0, 0 },
(v8si) { 0, 1, 2, 3, 13, 12, 11, 15 });
}
v8si
foo_v8si_l (v8si x)
{
return __builtin_shuffle ((v8si) { 0, 0, 0, 0, 0, 0, 0, 0 }, x,
(v8si) { 8, 9, 10, 11, 7, 6, 5, 4 });
}
v16hi
foo_v16hi (v16hi x)
{
return __builtin_shuffle (x, (v16hi) { 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0 },
(v16hi) { 0, 1, 2, 3, 4, 5, 6, 7,
24, 17, 26, 19, 28, 21, 30, 23 });
}
v16hi
foo_v16hi_l (v16hi x)
{
return __builtin_shuffle ((v16hi) { 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0 }, x,
(v16hi) { 16, 17, 18, 19, 20, 21, 22, 23,
15, 0, 13, 2, 11, 4, 9, 6 });
}
v32qi
foo_v32qi (v32qi x)
{
return __builtin_shuffle (x, (v32qi) { 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0 },
(v32qi) { 0, 1, 2, 3, 4, 5, 6, 7,
8, 9, 10, 11, 12, 13, 14, 15,
32, 49, 34, 58, 36, 53, 38, 39,
40, 60, 42, 43, 63, 45, 46, 47 });
}
v32qi
foo_v32qi_l (v32qi x)
{
return __builtin_shuffle ((v32qi) { 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0 }, x,
(v32qi) { 32, 33, 34, 35, 36, 37, 38, 39,
40, 41, 42, 43, 44, 45, 46, 47,
31, 0, 29, 2, 27, 4, 25, 6,
23, 8, 21, 10, 19, 12, 17, 14 });
}