/* { dg-do compile } */ /* { dg-options "-mavx512f -O2" } */ /* { dg-final { scan-assembler-times {(?n)vcvtdq2ps[ \t]+32\(%.*%ymm} 1 } } */ /* { dg-final { scan-assembler-times {(?n)vcvtdq2ps[ \t]+16\(%.*%xmm} 1 } } */ /* { dg-final { scan-assembler-times {(?n)vmovq[ \t]+16\(%.*%xmm} 1 { target { ! ia32 } } } } */ /* { dg-final { scan-assembler-not {(?n)vpermd[ \t]+.*%zmm} } } */ typedef int v16si __attribute__((vector_size(64))); typedef float v8sf __attribute__((vector_size(32))); typedef float v4sf __attribute__((vector_size(16))); typedef float v2sf __attribute__((vector_size(8))); v8sf part (v16si *srcp) { v16si src = *srcp; return (v8sf) { (float)src[8], (float) src[9], (float)src[10], (float)src[11], (float)src[12], (float)src[13], (float)src[14], (float)src[15] }; } v4sf part1 (v16si *srcp) { v16si src = *srcp; return (v4sf) { (float)src[4], (float)src[5], (float)src[6], (float)src[7] }; } v2sf part2 (v16si *srcp) { v16si src = *srcp; return (v2sf) { (float)src[4], (float)src[5] }; }