blob: 47439261b616a732024bbcfe8638b1082fd72787 [file] [log] [blame]
/* { dg-do compile } */
/* { dg-options "-mavx512fp16 -mavx512vl -O2" } */
typedef _Float16 v8hf __attribute__((vector_size (16)));
typedef _Float16 v16hf __attribute__((vector_size (32)));
typedef _Float16 v32hf __attribute__((vector_size (64)));
#define VEC_EXTRACT(V,S,IDX) \
S \
__attribute__((noipa)) \
vec_extract_##V##_##IDX (V v) \
{ \
return v[IDX]; \
}
#define VEC_SET(V,S,IDX) \
V \
__attribute__((noipa)) \
vec_set_##V##_##IDX (V v, S s) \
{ \
v[IDX] = s; \
return v; \
}
v8hf
vec_init_v8hf (_Float16 a1, _Float16 a2, _Float16 a3, _Float16 a4, _Float16 a5,
_Float16 a6, _Float16 a7, _Float16 a8)
{
return __extension__ (v8hf) {a1, a2, a3, a4, a5, a6, a7, a8};
}
/* { dg-final { scan-assembler-times "vpunpcklwd" 4 } } */
/* { dg-final { scan-assembler-times "vpunpckldq" 2 } } */
/* { dg-final { scan-assembler-times "vpunpcklqdq" 1 } } */
VEC_EXTRACT (v8hf, _Float16, 4);
VEC_EXTRACT (v16hf, _Float16, 3);
VEC_EXTRACT (v16hf, _Float16, 8);
VEC_EXTRACT (v16hf, _Float16, 15);
VEC_EXTRACT (v32hf, _Float16, 5);
VEC_EXTRACT (v32hf, _Float16, 8);
VEC_EXTRACT (v32hf, _Float16, 14);
VEC_EXTRACT (v32hf, _Float16, 16);
VEC_EXTRACT (v32hf, _Float16, 24);
VEC_EXTRACT (v32hf, _Float16, 28);
/* { dg-final { scan-assembler-times "vpsrldq\[\t ]*\\\$8" 2 } } */
/* { dg-final { scan-assembler-times "vpsrldq\[\t ]*\\\$6" 1 } } */
/* { dg-final { scan-assembler-times "vpsrldq\[\t ]*\\\$14" 1 } } */
/* { dg-final { scan-assembler-times "vpsrldq\[\t ]*\\\$10" 1 } } */
/* { dg-final { scan-assembler-times "vpsrldq\[\t ]*\\\$12" 1 } } */
/* { dg-final { scan-assembler-times "vextract" 9 } } */
VEC_SET (v8hf, _Float16, 4);
VEC_SET (v16hf, _Float16, 3);
VEC_SET (v16hf, _Float16, 8);
VEC_SET (v16hf, _Float16, 15);
VEC_SET (v32hf, _Float16, 5);
VEC_SET (v32hf, _Float16, 8);
VEC_SET (v32hf, _Float16, 14);
VEC_SET (v32hf, _Float16, 16);
VEC_SET (v32hf, _Float16, 24);
VEC_SET (v32hf, _Float16, 28);
/* { dg-final { scan-assembler-times "vpbroadcastw" 10 } } */
/* { dg-final { scan-assembler-times "vpblendw" 4 } } */
/* { dg-final { scan-assembler-times "vpblendd" 3 } } */