1 /* { dg-do compile } */ 2 /* { dg-options "-mavx512vl -O2" } */ 3 /* { dg-final { scan-assembler-times "valign\[dq\]" 8 } } */ 4 /* { dg-final { scan-assembler-times "vextract" 12 } } */ 5 6 typedef float v8sf __attribute__((vector_size(32))); 7 typedef float v16sf __attribute__((vector_size(64))); 8 typedef int v8si __attribute__((vector_size(32))); 9 typedef int v16si __attribute__((vector_size(64))); 10 typedef double v4df __attribute__((vector_size(32))); 11 typedef double v8df __attribute__((vector_size(64))); 12 typedef long long v4di __attribute__((vector_size(32))); 13 typedef long long v8di __attribute__((vector_size(64))); 14 15 #define EXTRACT(V,S,IDX) \ 16 S \ 17 __attribute__((noipa)) \ 18 foo_##V##_##IDX (V v) \ 19 { \ 20 return v[IDX]; \ 21 } \ 22 23 EXTRACT (v8sf, float, 4); 24 EXTRACT (v8sf, float, 7); 25 EXTRACT (v8si, int, 4); 26 EXTRACT (v8si, int, 7); 27 EXTRACT (v16sf, float, 4); 28 EXTRACT (v16sf, float, 8); 29 EXTRACT (v16sf, float, 12); 30 EXTRACT (v16sf, float, 15); 31 EXTRACT (v16si, int, 4); 32 EXTRACT (v16si, int, 8); 33 EXTRACT (v16si, int, 12); 34 EXTRACT (v16si, int, 15); 35 EXTRACT (v4df, double, 2); 36 EXTRACT (v4df, double, 3); 37 EXTRACT (v4di, long long, 2); 38 EXTRACT (v4di, long long, 3); 39 EXTRACT (v8df, double, 4); 40 EXTRACT (v8df, double, 7); 41 EXTRACT (v8di, long long, 4); 42 EXTRACT (v8di, long long, 7); 43