1 /* { dg-do compile } */
2 /* { dg-options "-mavx512ifma -mavx512vl -O2" } */
3 /* { dg-final { scan-assembler-times "vpmadd52huq\[ \\t\]+\[^\n\]*%xmm\[0-9\]+\[^\n\]*%xmm\[0-9\]+\[^\n\]*%xmm\[0-9\]+" 3 } } */
4 /* { dg-final { scan-assembler-times "vpmadd52huq\[ \\t\]+\[^\n\]*%xmm\[0-9\]+\[^\n\]*%xmm\[0-9\]+\[^\n\]*%xmm\[0-9\]+\{%k\[1-7\]\}\[^\{\]" 1 } } */
5 /* { dg-final { scan-assembler-times "vpmadd52huq\[ \\t\]+\[^\n\]*%xmm\[0-9\]+\[^\n\]*%xmm\[0-9\]+\[^\n\]*%xmm\[0-9\]+\{%k\[1-7\]\}\{z\}" 1 } } */
6 /* { dg-final { scan-assembler-times "vpmadd52huq\[ \\t\]+\[^\n\]*%ymm\[0-9\]+\[^\n\]*%ymm\[0-9\]+\[^\n\]*%ymm\[0-9\]+" 3 } } */
7 /* { dg-final { scan-assembler-times "vpmadd52huq\[ \\t\]+\[^\n\]*%ymm\[0-9\]+\[^\n\]*%ymm\[0-9\]+\[^\n\]*%ymm\[0-9\]+\{%k\[1-7\]\}\[^\{\]" 1 } } */
8 /* { dg-final { scan-assembler-times "vpmadd52huq\[ \\t\]+\[^\n\]*%ymm\[0-9\]+\[^\n\]*%ymm\[0-9\]+\[^\n\]*%ymm\[0-9\]+\{%k\[1-7\]\}\{z\}" 1 } } */
9 /* { dg-final { scan-assembler-times "vpmadd52huq\[ \\t\]+\[^\n\]*%zmm\[0-9\]+\[^\n\]*%zmm\[0-9\]+\[^\n\]*%zmm\[0-9\]+" 3 } } */
10 /* { dg-final { scan-assembler-times "vpmadd52huq\[ \\t\]+\[^\n\]*%zmm\[0-9\]+\[^\n\]*%zmm\[0-9\]+\[^\n\]*%zmm\[0-9\]+\{%k\[1-7\]\}\[^\{\]" 1 } } */
11 /* { dg-final { scan-assembler-times "vpmadd52huq\[ \\t\]+\[^\n\]*%zmm\[0-9\]+\[^\n\]*%zmm\[0-9\]+\[^\n\]*%zmm\[0-9\]+\{%k\[1-7\]\}\{z\}" 1 } } */
13 #include <immintrin.h>
15 volatile __m512i _x1
, _y1
, _z1
;
16 volatile __m256i _x2
, _y2
, _z2
;
17 volatile __m128i _x3
, _y3
, _z3
;
20 avx512ifma_test (void)
22 _x3
= _mm_madd52hi_epu64 (_x3
, _y3
, _z3
);
23 _x3
= _mm_mask_madd52hi_epu64 (_x3
, 2, _y3
, _z3
);
24 _x3
= _mm_maskz_madd52hi_epu64 (2, _x3
, _y3
, _z3
);
25 _x2
= _mm256_madd52hi_epu64 (_x2
, _y2
, _z2
);
26 _x2
= _mm256_mask_madd52hi_epu64 (_x2
, 3, _y2
, _z2
);
27 _x2
= _mm256_maskz_madd52hi_epu64 (3, _x2
, _y2
, _z2
);
28 _x1
= _mm512_madd52hi_epu64 (_x1
, _y1
, _z1
);
29 _x1
= _mm512_mask_madd52hi_epu64 (_x1
, 3, _y1
, _z1
);
30 _x1
= _mm512_maskz_madd52hi_epu64 (3, _x1
, _y1
, _z1
);