Index: lib/Headers/avx512fintrin.h =================================================================== --- lib/Headers/avx512fintrin.h +++ lib/Headers/avx512fintrin.h @@ -3419,6 +3419,27 @@ /* Conversion */ +#define _mm512_cvtt_roundps_epu32( __A, __R) __extension__ ({ \ +__builtin_ia32_cvttps2udq512_mask ((__v16sf)( __A),\ + (__v16si)\ + _mm512_undefined_epi32 (),\ + (__mmask16) -1,( __R));\ +}) + +#define _mm512_mask_cvtt_roundps_epu32( __W, __U, __A, __R) __extension__ ({ \ +__builtin_ia32_cvttps2udq512_mask ((__v16sf)( __A),\ + (__v16si)( __W),\ + (__mmask16)( __U),( __R));\ +}) + +#define _mm512_maskz_cvtt_roundps_epu32( __U, __A, __R) __extension__ ({ \ +__builtin_ia32_cvttps2udq512_mask ((__v16sf)( __A),\ + (__v16si)\ + _mm512_setzero_si512 (),\ + (__mmask16)( __U),( __R));\ +}) + + static __inline __m512i __DEFAULT_FN_ATTRS _mm512_cvttps_epu32(__m512 __A) { @@ -3629,6 +3650,29 @@ _MM_FROUND_CUR_DIRECTION); } +#define _mm512_cvt_roundps_ph( __A, __I) __extension__ ({ \ +__builtin_ia32_vcvtps2ph512_mask ((__v16sf)( __A),\ + ( __I),\ + (__v16hi)\ + _mm256_undefined_si256 (),\ + -1);\ +}) + +#define _mm512_mask_cvt_roundps_ph( __U, __W, __A, __I) __extension__ ({ \ +__builtin_ia32_vcvtps2ph512_mask ((__v16sf)( __A),\ + ( __I),\ + (__v16hi)( __U),\ + (__mmask16)( __W));\ +}) + +#define _mm512_maskz_cvt_roundps_ph( __W, __A, __I) __extension__ ({ \ +__builtin_ia32_vcvtps2ph512_mask ((__v16sf)( __A),\ + ( __I),\ + (__v16hi)\ + _mm256_setzero_si256 (),\ + (__mmask16)( __W));\ +}) + #define _mm512_cvtps_ph(A, I) __extension__ ({ \ (__m256i)__builtin_ia32_vcvtps2ph512_mask((__v16sf)(__m512)(A), (int)(I), \ (__v16hi)_mm256_setzero_si256(), \ @@ -3644,7 +3688,27 @@ (__v16hi)_mm256_setzero_si256(), \ (__mmask16)(W)); }) +#define _mm512_cvt_roundph_ps( __A, __R) __extension__ ({ \ +__builtin_ia32_vcvtph2ps512_mask ((__v16hi)( __A),\ + (__v16sf)\ + _mm512_undefined_ps (),\ + (__mmask16) -1,( __R));\ +}) + +#define _mm512_mask_cvt_roundph_ps( __W, __U, __A, __R) __extension__ ({ \ +__builtin_ia32_vcvtph2ps512_mask ((__v16hi)( __A),\ + (__v16sf)( __W),\ + (__mmask16)( __U),( __R));\ +}) +#define _mm512_maskz_cvt_roundph_ps( __U, __A, __R) __extension__ ({ \ +__builtin_ia32_vcvtph2ps512_mask ((__v16hi)( __A),\ + (__v16sf)\ + _mm512_setzero_ps (),\ + (__mmask16)( __U),( __R));\ +}) + + static __inline __m512 __DEFAULT_FN_ATTRS _mm512_cvtph_ps(__m256i __A) { Index: test/CodeGen/avx512f-builtins.c =================================================================== --- test/CodeGen/avx512f-builtins.c +++ test/CodeGen/avx512f-builtins.c @@ -3107,6 +3107,71 @@ return _mm_cvttss_u64(__A); } +__m512i test_mm512_cvtt_roundps_epu32(__m512 __A) +{ + // CHECK-LABEL: @test_mm512_cvtt_roundps_epu32 + // CHECK: @llvm.x86.avx512.mask.cvttps2udq.512 + return _mm512_cvtt_roundps_epu32(__A, _MM_FROUND_CUR_DIRECTION); +} + +__m512i test_mm512_mask_cvtt_roundps_epu32(__m512i __W, __mmask16 __U, __m512 __A) +{ + // CHECK-LABEL: @test_mm512_mask_cvtt_roundps_epu32 + // CHECK: @llvm.x86.avx512.mask.cvttps2udq.512 + + return _mm512_mask_cvtt_roundps_epu32(__W, __U, __A, _MM_FROUND_CUR_DIRECTION); +} + +__m512i test_mm512_maskz_cvtt_roundps_epu32( __mmask16 __U, __m512 __A) +{ + // CHECK-LABEL: @test_mm512_maskz_cvtt_roundps_epu32 + // CHECK: @llvm.x86.avx512.mask.cvttps2udq.512 + + return _mm512_maskz_cvtt_roundps_epu32(__U, __A, _MM_FROUND_CUR_DIRECTION); +} + +__m256i test_mm512_cvt_roundps_ph(__m512 __A) +{ + // CHECK-LABEL: @test_mm512_cvt_roundps_ph + // CHECK: @llvm.x86.avx512.mask.vcvtps2ph.512 + return _mm512_cvt_roundps_ph(__A, _MM_FROUND_CUR_DIRECTION); +} + +__m256i test_mm512_mask_cvt_roundps_ph(__m256i __W , __mmask16 __U, __m512 __A) +{ + // CHECK-LABEL: @test_mm512_mask_cvt_roundps_ph + // CHECK: @llvm.x86.avx512.mask.vcvtps2ph.512 + return _mm512_mask_cvt_roundps_ph(__W, __U, __A, _MM_FROUND_CUR_DIRECTION); +} + +__m256i test_mm512_maskz_cvt_roundps_ph(__mmask16 __U, __m512 __A) +{ + // CHECK-LABEL: @test_mm512_maskz_cvt_roundps_ph + // CHECK: @llvm.x86.avx512.mask.vcvtps2ph.512 + return _mm512_maskz_cvt_roundps_ph(__U, __A, _MM_FROUND_CUR_DIRECTION); +} + +__m512 test_mm512_cvt_roundph_ps(__m256i __A) +{ + // CHECK-LABEL: @test_mm512_cvt_roundph_ps + // CHECK: @llvm.x86.avx512.mask.vcvtph2ps.512 + return _mm512_cvt_roundph_ps(__A, _MM_FROUND_CUR_DIRECTION); +} + +__m512 test_mm512_mask_cvt_roundph_ps(__m512 __W, __mmask16 __U, __m256i __A) +{ + // CHECK-LABEL: @test_mm512_mask_cvt_roundph_ps + // CHECK: @llvm.x86.avx512.mask.vcvtph2ps.512 + return _mm512_mask_cvt_roundph_ps(__W, __U, __A, _MM_FROUND_CUR_DIRECTION); +} + +__m512 test_mm512_maskz_cvt_roundph_ps(__mmask16 __U, __m256i __A) +{ + // CHECK-LABEL: @test_mm512_maskz_cvt_roundph_ps + // CHECK: @llvm.x86.avx512.mask.vcvtph2ps.512 + return _mm512_maskz_cvt_roundph_ps(__U, __A, _MM_FROUND_CUR_DIRECTION); +} + __m512 test_mm512_mask_cvt_roundepi32_ps(__m512 __W, __mmask16 __U, __m512i __A) { // CHECK-LABEL: @test_mm512_mask_cvt_roundepi32_ps