From 6f08cebf36b84d6dfb2a270e74bfd2594eaf24d7 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 llvm-svn: 270825 --- clang/lib/Headers/avx512fintrin.h | 24 +++++++++++++++++++++ clang/test/CodeGen/avx512f-builtins.c | 30 +++++++++++++++++++++++++++ 2 files changed, 54 insertions(+) diff --git a/clang/lib/Headers/avx512fintrin.h b/clang/lib/Headers/avx512fintrin.h index 297c9b873dca..a9d2af378df5 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))); @@ -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/clang/test/CodeGen/avx512f-builtins.c b/clang/test/CodeGen/avx512f-builtins.c index 1c16ec81fe76..553dc147da1f 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