From 13e0f277eccd466dcce84d2aaef377c9e3dd0da1 Mon Sep 17 00:00:00 2001 From: Pengfei Wang Date: Thu, 29 Aug 2019 06:18:34 +0000 Subject: [PATCH] [x86] Adding support for some missing intrinsics: _mm512_cvtsi512_si32 Summary: Adding support for some missing intrinsics: _mm512_cvtsi512_si32 Reviewers: craig.topper, pengfei, LuoYuanke, spatel, RKSimon Reviewed By: craig.topper Subscribers: llvm-commits Patch by Bing Yu (yubing) Differential Revision: https://reviews.llvm.org/D66785 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@370297 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Headers/avx512fintrin.h | 17 +++++++++++++++++ test/CodeGen/avx512f-builtins.c | 6 ++++++ 2 files changed, 23 insertions(+) diff --git a/lib/Headers/avx512fintrin.h b/lib/Headers/avx512fintrin.h index 132761f9ef..5748c1ea6e 100644 --- a/lib/Headers/avx512fintrin.h +++ b/lib/Headers/avx512fintrin.h @@ -9659,6 +9659,23 @@ _mm512_mask_reduce_min_ps(__mmask16 __M, __m512 __V) { } #undef _mm512_mask_reduce_operator +/// Moves the least significant 32 bits of a vector of [16 x i32] to a +/// 32-bit signed integer value. +/// +/// \headerfile +/// +/// This intrinsic corresponds to the VMOVD / MOVD instruction. +/// +/// \param __A +/// A vector of [16 x i32]. The least significant 32 bits are moved to the +/// destination. +/// \returns A 32-bit signed integer containing the moved value. +static __inline__ int __DEFAULT_FN_ATTRS512 +_mm512_cvtsi512_si32(__m512i __A) { + __v16si __b = (__v16si)__A; + return __b[0]; +} + #undef __DEFAULT_FN_ATTRS512 #undef __DEFAULT_FN_ATTRS128 #undef __DEFAULT_FN_ATTRS diff --git a/test/CodeGen/avx512f-builtins.c b/test/CodeGen/avx512f-builtins.c index c9fbb4f4cb..aaf3157c08 100644 --- a/test/CodeGen/avx512f-builtins.c +++ b/test/CodeGen/avx512f-builtins.c @@ -4762,6 +4762,12 @@ unsigned test_mm_cvtsd_u32(__m128d __A) { return _mm_cvtsd_u32(__A); } +int test_mm512_cvtsi512_si32(__m512i a) { + // CHECK-LABEL: test_mm512_cvtsi512_si32 + // CHECK: %{{.*}} = extractelement <16 x i32> %{{.*}}, i32 0 + return _mm512_cvtsi512_si32(a); +} + #ifdef __x86_64__ unsigned long long test_mm_cvt_roundsd_u64(__m128d __A) { // CHECK-LABEL: @test_mm_cvt_roundsd_u64 -- 2.40.0