From: Michael Kuperstein Date: Tue, 19 May 2015 14:49:14 +0000 (+0000) Subject: [X86] Add _mm_broadcastsd_pd intrinsic X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=325dc3f387ad19fe2035c0c28085c74c5b73a1ae;p=clang [X86] Add _mm_broadcastsd_pd intrinsic _mm_broadcastsd_pd is basically an alias for _mm_movedup_pd, however the alias is only available from AVX2 forward. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@237698 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Headers/avx2intrin.h b/lib/Headers/avx2intrin.h index b0df91f205..e1e639de1b 100644 --- a/lib/Headers/avx2intrin.h +++ b/lib/Headers/avx2intrin.h @@ -760,6 +760,12 @@ _mm_broadcastss_ps(__m128 __X) return (__m128)__builtin_ia32_vbroadcastss_ps((__v4sf)__X); } +static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) +_mm_broadcastsd_pd(__m128d __a) +{ + return __builtin_shufflevector(__a, __a, 0, 0); +} + static __inline__ __m256 __attribute__((__always_inline__, __nodebug__)) _mm256_broadcastss_ps(__m128 __X) { diff --git a/test/CodeGen/avx2-builtins.c b/test/CodeGen/avx2-builtins.c index bdcaa9cc00..e3628717c5 100644 --- a/test/CodeGen/avx2-builtins.c +++ b/test/CodeGen/avx2-builtins.c @@ -611,6 +611,11 @@ __m128 test_mm_broadcastss_ps(__m128 a) { return _mm_broadcastss_ps(a); } +__m128d test_mm_broadcastsd_pd(__m128d a) { + // CHECK: shufflevector <2 x double> %{{.*}}, <2 x double> %{{.*}}, <2 x i32> zeroinitializer + return _mm_broadcastsd_pd(a); +} + __m256 test_mm256_broadcastss_ps(__m128 a) { // CHECK: @llvm.x86.avx2.vbroadcast.ss.ps.256 return _mm256_broadcastss_ps(a);