diff options
-rw-r--r-- | clang/lib/Headers/avx512fintrin.h | 18 | ||||
-rw-r--r-- | clang/test/CodeGen/avx512f-builtins.c | 14 |
2 files changed, 32 insertions, 0 deletions
diff --git a/clang/lib/Headers/avx512fintrin.h b/clang/lib/Headers/avx512fintrin.h index ad92fe7b64b..1b558a0404a 100644 --- a/clang/lib/Headers/avx512fintrin.h +++ b/clang/lib/Headers/avx512fintrin.h @@ -117,6 +117,24 @@ _mm512_set1_epi64(long long __d) return (__m512i)(__v8di){ __d, __d, __d, __d, __d, __d, __d, __d }; } +static __inline__ __m512 __attribute__((__always_inline__, __nodebug__)) +_mm512_broadcastss_ps(__m128 __X) +{ + float __f = __X[0]; + return (__v16sf){ __f, __f, __f, __f, + __f, __f, __f, __f, + __f, __f, __f, __f, + __f, __f, __f, __f }; +} + +static __inline__ __m512d __attribute__((__always_inline__, __nodebug__)) +_mm512_broadcastsd_pd(__m128d __X) +{ + double __d = __X[0]; + return (__v8df){ __d, __d, __d, __d, + __d, __d, __d, __d }; +} + /* Cast between vector types */ static __inline __m512d __attribute__((__always_inline__, __nodebug__)) diff --git a/clang/test/CodeGen/avx512f-builtins.c b/clang/test/CodeGen/avx512f-builtins.c index 35d79a8bff1..b5b4ff23916 100644 --- a/clang/test/CodeGen/avx512f-builtins.c +++ b/clang/test/CodeGen/avx512f-builtins.c @@ -137,3 +137,17 @@ __m512i test_mm512_valign_epi64(__m512i a, __m512i b) // CHECK: @llvm.x86.avx512.mask.valign.q.512 return _mm512_valign_epi64(a, b, 2); } + +__m512d test_mm512_broadcastsd_pd(__m128d a) +{ + // CHECK-LABEL: @test_mm512_broadcastsd_pd + // CHECK: insertelement <8 x double> {{.*}}, i32 0 + // CHECK: insertelement <8 x double> {{.*}}, i32 1 + // CHECK: insertelement <8 x double> {{.*}}, i32 2 + // CHECK: insertelement <8 x double> {{.*}}, i32 3 + // CHECK: insertelement <8 x double> {{.*}}, i32 4 + // CHECK: insertelement <8 x double> {{.*}}, i32 5 + // CHECK: insertelement <8 x double> {{.*}}, i32 6 + // CHECK: insertelement <8 x double> {{.*}}, i32 7 + return _mm512_broadcastsd_pd(a); +} |