From 09106fbc895edb88887e76791cd2560350f282f8 Mon Sep 17 00:00:00 2001 From: Michael Zuckerman Date: Thu, 26 May 2016 06:54:52 +0000 Subject: [PATCH] [Clang][AVX512][BUILTIN] Adding intrinsics for set1 Differential Revision: http://reviews.llvm.org/D20562 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@270825 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Headers/avx512fintrin.h | 24 ++++++++++++++++++++++++ test/CodeGen/avx512f-builtins.c | 30 ++++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+) diff --git a/lib/Headers/avx512fintrin.h b/lib/Headers/avx512fintrin.h index 297c9b873d..a9d2af378d 100644 --- a/lib/Headers/avx512fintrin.h +++ b/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))); @@ -285,6 +287,28 @@ _mm512_set1_pd(double __w) return (__m512d){ __w, __w, __w, __w, __w, __w, __w, __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) { diff --git a/test/CodeGen/avx512f-builtins.c b/test/CodeGen/avx512f-builtins.c index 1c16ec81fe..553dc147da 100644 --- a/test/CodeGen/avx512f-builtins.c +++ b/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 -- 2.40.0