diff options
-rw-r--r-- | clang/lib/Headers/avx512fintrin.h | 24 | ||||
-rw-r--r-- | clang/test/CodeGen/avx512f-builtins.c | 30 |
2 files changed, 54 insertions, 0 deletions
diff --git a/clang/lib/Headers/avx512fintrin.h b/clang/lib/Headers/avx512fintrin.h index 297c9b873dc..a9d2af378df 100644 --- a/clang/lib/Headers/avx512fintrin.h +++ b/clang/lib/Headers/avx512fintrin.h @@ -27,6 +27,8 @@ #ifndef __AVX512FINTRIN_H #define __AVX512FINTRIN_H +typedef char __v64qi __attribute__((__vector_size__(64))); +typedef short __v32hi __attribute__((__vector_size__(64))); typedef double __v8df __attribute__((__vector_size__(64))); typedef float __v16sf __attribute__((__vector_size__(64))); typedef long long __v8di __attribute__((__vector_size__(64))); @@ -286,6 +288,28 @@ _mm512_set1_pd(double __w) } static __inline __m512i __DEFAULT_FN_ATTRS +_mm512_set1_epi8(char __w) +{ + return (__m512i)(__v64qi){ __w, __w, __w, __w, __w, __w, __w, __w, + __w, __w, __w, __w, __w, __w, __w, __w, + __w, __w, __w, __w, __w, __w, __w, __w, + __w, __w, __w, __w, __w, __w, __w, __w, + __w, __w, __w, __w, __w, __w, __w, __w, + __w, __w, __w, __w, __w, __w, __w, __w, + __w, __w, __w, __w, __w, __w, __w, __w, + __w, __w, __w, __w, __w, __w, __w, __w }; +} + +static __inline __m512i __DEFAULT_FN_ATTRS +_mm512_set1_epi16(short __w) +{ + return (__m512i)(__v32hi){ __w, __w, __w, __w, __w, __w, __w, __w, + __w, __w, __w, __w, __w, __w, __w, __w, + __w, __w, __w, __w, __w, __w, __w, __w, + __w, __w, __w, __w, __w, __w, __w, __w }; +} + +static __inline __m512i __DEFAULT_FN_ATTRS _mm512_set1_epi32(int __s) { return (__m512i)(__v16si){ __s, __s, __s, __s, __s, __s, __s, __s, diff --git a/clang/test/CodeGen/avx512f-builtins.c b/clang/test/CodeGen/avx512f-builtins.c index 1c16ec81fe7..553dc147da1 100644 --- a/clang/test/CodeGen/avx512f-builtins.c +++ b/clang/test/CodeGen/avx512f-builtins.c @@ -5951,6 +5951,36 @@ __m512d test_mm512_castpd128_pd512(__m128d __A) { return _mm512_castpd128_pd512(__A); } +__m512d test_mm512_set1_epi8(char d) +{ + // CHECK-LABEL: @test_mm512_set1_epi8 + // CHECK: insertelement <64 x i8> {{.*}}, i32 0 + // CHECK: insertelement <64 x i8> {{.*}}, i32 1 + // CHECK: insertelement <64 x i8> {{.*}}, i32 2 + // CHECK: insertelement <64 x i8> {{.*}}, i32 3 + // CHECK: insertelement <64 x i8> {{.*}}, i32 4 + // CHECK: insertelement <64 x i8> {{.*}}, i32 5 + // CHECK: insertelement <64 x i8> {{.*}}, i32 6 + // CHECK: insertelement <64 x i8> {{.*}}, i32 7 + // CHECK: insertelement <64 x i8> {{.*}}, i32 63 + return _mm512_set1_epi8(d); +} + +__m512d test_mm512_set1_epi16(short d) +{ + // CHECK-LABEL: @test_mm512_set1_epi16 + // CHECK: insertelement <32 x i16> {{.*}}, i32 0 + // CHECK: insertelement <32 x i16> {{.*}}, i32 1 + // CHECK: insertelement <32 x i16> {{.*}}, i32 2 + // CHECK: insertelement <32 x i16> {{.*}}, i32 3 + // CHECK: insertelement <32 x i16> {{.*}}, i32 4 + // CHECK: insertelement <32 x i16> {{.*}}, i32 5 + // CHECK: insertelement <32 x i16> {{.*}}, i32 6 + // CHECK: insertelement <32 x i16> {{.*}}, i32 7 + // CHECK: insertelement <32 x i16> {{.*}}, i32 31 + return _mm512_set1_epi16(d); +} + __m512d test_mm512_castpd256_pd512(__m256d a) { // CHECK-LABEL: @test_mm512_castpd256_pd512 |