Index: lib/Headers/avx512fintrin.h =================================================================== --- lib/Headers/avx512fintrin.h +++ lib/Headers/avx512fintrin.h @@ -2830,6 +2830,24 @@ /* SIMD load ops */ static __inline __m512i __DEFAULT_FN_ATTRS +_mm512_loadu_si512 (void const *__P) +{ + return (__m512i) __builtin_ia32_loaddqusi512_mask ((const __v16si *) __P, + (__v16si) + _mm512_setzero_si512 (), + (__mmask16) -1); +} + +static __inline __m512i __DEFAULT_FN_ATTRS +_mm512_mask_loadu_epi32 (__m512i __W, __mmask16 __U, void const *__P) +{ + return (__m512i) __builtin_ia32_loaddqusi512_mask ((const __v16si *) __P, + (__v16si) __W, + (__mmask16) __U); +} + + +static __inline __m512i __DEFAULT_FN_ATTRS _mm512_maskz_loadu_epi32(__mmask16 __U, void const *__P) { return (__m512i) __builtin_ia32_loaddqusi512_mask ((const __v16si *)__P, @@ -2839,6 +2857,14 @@ } static __inline __m512i __DEFAULT_FN_ATTRS +_mm512_mask_loadu_epi64 (__m512i __W, __mmask8 __U, void const *__P) +{ + return (__m512i) __builtin_ia32_loaddqudi512_mask ((const __v8di *) __P, + (__v8di) __W, + (__mmask8) __U); +} + +static __inline __m512i __DEFAULT_FN_ATTRS _mm512_maskz_loadu_epi64(__mmask8 __U, void const *__P) { return (__m512i) __builtin_ia32_loaddqudi512_mask ((const __v8di *)__P, @@ -2848,6 +2874,14 @@ } static __inline __m512 __DEFAULT_FN_ATTRS +_mm512_mask_loadu_ps (__m512 __W, __mmask16 __U, void const *__P) +{ + return (__m512) __builtin_ia32_loadups512_mask ((const __v16sf *) __P, + (__v16sf) __W, + (__mmask16) __U); +} + +static __inline __m512 __DEFAULT_FN_ATTRS _mm512_maskz_loadu_ps(__mmask16 __U, void const *__P) { return (__m512) __builtin_ia32_loadups512_mask ((const __v16sf *)__P, @@ -2857,27 +2891,17 @@ } static __inline __m512d __DEFAULT_FN_ATTRS -_mm512_maskz_loadu_pd(__mmask8 __U, void const *__P) +_mm512_mask_loadu_pd (__m512d __W, __mmask8 __U, void const *__P) { - return (__m512d) __builtin_ia32_loadupd512_mask ((const __v8df *)__P, - (__v8df) - _mm512_setzero_pd (), - (__mmask8) __U); -} - -static __inline __m512 __DEFAULT_FN_ATTRS -_mm512_maskz_load_ps(__mmask16 __U, void const *__P) -{ - return (__m512) __builtin_ia32_loadaps512_mask ((const __v16sf *)__P, - (__v16sf) - _mm512_setzero_ps (), - (__mmask16) __U); + return (__m512d) __builtin_ia32_loadupd512_mask ((const __v8df *) __P, + (__v8df) __W, + (__mmask8) __U); } static __inline __m512d __DEFAULT_FN_ATTRS -_mm512_maskz_load_pd(__mmask8 __U, void const *__P) +_mm512_maskz_loadu_pd(__mmask8 __U, void const *__P) { - return (__m512d) __builtin_ia32_loadapd512_mask ((const __v8df *)__P, + return (__m512d) __builtin_ia32_loadupd512_mask ((const __v8df *)__P, (__v8df) _mm512_setzero_pd (), (__mmask8) __U); @@ -2910,6 +2934,23 @@ (__mmask16) -1); } +static __inline __m512 __DEFAULT_FN_ATTRS +_mm512_mask_load_ps (__m512 __W, __mmask16 __U, void const *__P) +{ + return (__m512) __builtin_ia32_loadaps512_mask ((const __v16sf *) __P, + (__v16sf) __W, + (__mmask16) __U); +} + +static __inline __m512 __DEFAULT_FN_ATTRS +_mm512_maskz_load_ps(__mmask16 __U, void const *__P) +{ + return (__m512) __builtin_ia32_loadaps512_mask ((const __v16sf *)__P, + (__v16sf) + _mm512_setzero_ps (), + (__mmask16) __U); +} + static __inline __m512d __DEFAULT_FN_ATTRS _mm512_load_pd(double const *__p) { @@ -2919,6 +2960,41 @@ (__mmask8) -1); } +static __inline __m512d __DEFAULT_FN_ATTRS +_mm512_mask_load_pd (__m512d __W, __mmask8 __U, void const *__P) +{ + return (__m512d) __builtin_ia32_loadapd512_mask ((const __v8df *) __P, + (__v8df) __W, + (__mmask8) __U); +} + +static __inline __m512d __DEFAULT_FN_ATTRS +_mm512_maskz_load_pd(__mmask8 __U, void const *__P) +{ + return (__m512d) __builtin_ia32_loadapd512_mask ((const __v8df *)__P, + (__v8df) + _mm512_setzero_pd (), + (__mmask8) __U); +} + +static __inline __m512i __DEFAULT_FN_ATTRS +_mm512_load_si512 (void const *__P) +{ + return *(__m512i *) __P; +} + +static __inline __m512i __DEFAULT_FN_ATTRS +_mm512_load_epi32 (void const *__P) +{ + return *(__m512i *) __P; +} + +static __inline __m512i __DEFAULT_FN_ATTRS +_mm512_load_epi64 (void const *__P) +{ + return *(__m512i *) __P; +} + /* SIMD store ops */ static __inline void __DEFAULT_FN_ATTRS @@ -2929,6 +3005,13 @@ } static __inline void __DEFAULT_FN_ATTRS +_mm512_storeu_si512 (void *__P, __m512i __A) +{ + __builtin_ia32_storedqusi512_mask ((__v16si *) __P, (__v16si) __A, + (__mmask16) -1); +} + +static __inline void __DEFAULT_FN_ATTRS _mm512_mask_storeu_epi32(void *__P, __mmask16 __U, __m512i __A) { __builtin_ia32_storedqusi512_mask ((__v16si *)__P, (__v16si) __A, @@ -2985,6 +3068,24 @@ *(__m512*)__P = __A; } +static __inline void __DEFAULT_FN_ATTRS +_mm512_store_si512 (void *__P, __m512i __A) +{ + *(__m512i *) __P = __A; +} + +static __inline void __DEFAULT_FN_ATTRS +_mm512_store_epi32 (void *__P, __m512i __A) +{ + *(__m512i *) __P = __A; +} + +static __inline void __DEFAULT_FN_ATTRS +_mm512_store_epi64 (void *__P, __m512i __A) +{ + *(__m512i *) __P = __A; +} + /* Mask ops */ static __inline __mmask16 __DEFAULT_FN_ATTRS Index: test/CodeGen/avx512f-builtins.c =================================================================== --- test/CodeGen/avx512f-builtins.c +++ test/CodeGen/avx512f-builtins.c @@ -61,6 +61,13 @@ return _mm512_mul_pd(a, b); } +void test_mm512_storeu_si512 (void *__P, __m512i __A) +{ + // CHECK-LABEL: @test_mm512_storeu_si512 + // CHECK: @llvm.x86.avx512.mask.storeu.d.512 + return _mm512_storeu_si512 ( __P,__A); +} + void test_mm512_storeu_ps(void *p, __m512 a) { // CHECK-LABEL: @test_mm512_storeu_ps @@ -82,6 +89,33 @@ _mm512_mask_store_ps(p, m, a); } +void test_mm512_store_si512 (void *__P, __m512i __A) +{ + // CHECK-LABEL: @test_mm512_store_si512 + // CHECK: load <8 x i64>, <8 x i64>* %__A.addr.i, align 64 + // CHECK: load i8*, i8** %__P.addr.i, align 8 + // CHECK: bitcast i8* %3 to <8 x i64>* + return _mm512_store_si512 ( __P,__A); +} + +void test_mm512_store_epi32 (void *__P, __m512i __A) +{ + // CHECK-LABEL: @test_mm512_store_epi32 + // CHECK: load <8 x i64>, <8 x i64>* %__A.addr.i, align 64 + // CHECK: load i8*, i8** %__P.addr.i, align 8 + // CHECK: bitcast i8* %3 to <8 x i64>* + return _mm512_store_epi32 ( __P,__A); +} + +void test_mm512_store_epi64 (void *__P, __m512i __A) +{ + // CHECK-LABEL: @test_mm512_store_epi64 + // CHECK: load <8 x i64>, <8 x i64>* %__A.addr.i, align 64 + // CHECK: load i8*, i8** %__P.addr.i, align 8 + // CHECK: bitcast i8* %3 to <8 x i64>* + return _mm512_store_epi64 ( __P,__A); +} + void test_mm512_store_ps(void *p, __m512 a) { // CHECK-LABEL: @test_mm512_store_ps @@ -89,6 +123,13 @@ _mm512_store_ps(p, a); } +void test_mm512_store_pd(void *p, __m512d a) +{ + // CHECK-LABEL: @test_mm512_store_pd + // CHECK: store <8 x double> + _mm512_store_pd(p, a); +} + void test_mm512_mask_store_pd(void *p, __m512d a, __mmask8 m) { // CHECK-LABEL: @test_mm512_mask_store_pd @@ -96,11 +137,25 @@ _mm512_mask_store_pd(p, m, a); } -void test_mm512_store_pd(void *p, __m512d a) +__m512i test_mm512_loadu_si512 (void *__P) { - // CHECK-LABEL: @test_mm512_store_pd - // CHECK: store <8 x double> - _mm512_store_pd(p, a); + // CHECK-LABEL: @test_mm512_loadu_si512 + // CHECK: @llvm.x86.avx512.mask.loadu.d.512 + return _mm512_loadu_si512 ( __P); +} + +__m512i test_mm512_mask_loadu_epi32 (__m512i __W, __mmask16 __U, void *__P) +{ + // CHECK-LABEL: @test_mm512_mask_loadu_epi32 + // CHECK: @llvm.x86.avx512.mask.loadu.d.512 + return _mm512_mask_loadu_epi32 (__W,__U, __P); +} + +__m512i test_mm512_mask_loadu_epi64 (__m512i __W, __mmask8 __U, void *__P) +{ + // CHECK-LABEL: @test_mm512_mask_loadu_epi64 + // CHECK: @llvm.x86.avx512.mask.loadu.q.512( + return _mm512_mask_loadu_epi64 (__W,__U, __P); } __m512 test_mm512_loadu_ps(void *p) @@ -110,6 +165,13 @@ return _mm512_loadu_ps(p); } +__m512 test_mm512_mask_loadu_ps (__m512 __W, __mmask16 __U, void *__P) +{ + // CHECK-LABEL: @test_mm512_mask_loadu_ps + // CHECK: @llvm.x86.avx512.mask.loadu.ps.512 + return _mm512_mask_loadu_ps (__W,__U, __P); +} + __m512d test_mm512_loadu_pd(void *p) { // CHECK-LABEL: @test_mm512_loadu_pd @@ -117,6 +179,13 @@ return _mm512_loadu_pd(p); } +__m512d test_mm512_mask_loadu_pd (__m512d __W, __mmask8 __U, void *__P) +{ + // CHECK-LABEL: @test_mm512_mask_loadu_pd + // CHECK: @llvm.x86.avx512.mask.loadu.pd.512 + return _mm512_mask_loadu_pd (__W,__U, __P); +} + __m512 test_mm512_maskz_load_ps(void *p, __mmask16 m) { // CHECK-LABEL: @test_mm512_maskz_load_ps @@ -124,6 +193,33 @@ return _mm512_maskz_load_ps(m, p); } +__m512i test_mm512_load_si512 (void *__P) +{ + // CHECK-LABEL: @test_mm512_load_si512 + // CHECK: load i8*, i8** %__P.addr.i, align 8 + // CHECK: bitcast i8* %1 to <8 x i64>* + // CHECK: load <8 x i64>, <8 x i64>* %2, align 64 + return _mm512_load_si512 ( __P); +} + +__m512i test_mm512_load_epi32 (void *__P) +{ + // CHECK-LABEL: @test_mm512_load_epi32 + // CHECK: load i8*, i8** %__P.addr.i, align 8 + // CHECK: bitcast i8* %1 to <8 x i64>* + // CHECK: load <8 x i64>, <8 x i64>* %2, align 64 + return _mm512_load_epi32 ( __P); +} + +__m512i test_mm512_load_epi64 (void *__P) +{ + // CHECK-LABEL: @test_mm512_load_epi64 + // CHECK: load i8*, i8** %__P.addr.i, align 8 + // CHECK: bitcast i8* %1 to <8 x i64>* + // CHECK: load <8 x i64>, <8 x i64>* %2, align 64 + return _mm512_load_epi64 ( __P); +} + __m512 test_mm512_load_ps(void *p) { // CHECK-LABEL: @test_mm512_load_ps @@ -131,6 +227,20 @@ return _mm512_load_ps(p); } +__m512 test_mm512_mask_load_ps (__m512 __W, __mmask16 __U, void *__P) +{ + // CHECK-LABEL: @test_mm512_mask_load_ps + // CHECK: @llvm.x86.avx512.mask.load.ps.512 + return _mm512_mask_load_ps (__W,__U, __P); +} + +__m512 test_mm512_maskz_load_ps(__mmask16 __U, void *__P) +{ + // CHECK-LABEL: @test_mm512_maskz_load_ps + // CHECK: @llvm.x86.avx512.mask.load.ps.512 + return _mm512_maskz_load_ps(__U, __P); +} + __m512d test_mm512_maskz_load_pd(void *p, __mmask8 m) { // CHECK-LABEL: @test_mm512_maskz_load_pd @@ -145,6 +255,20 @@ return _mm512_load_pd(p); } +__m512d test_mm512_mask_load_pd (__m512d __W, __mmask8 __U, void *__P) +{ + // CHECK-LABEL: @test_mm512_mask_load_pd + // CHECK: @llvm.x86.avx512.mask.load.pd.512 + return _mm512_mask_load_pd (__W,__U, __P); +} + +__m512d test_mm512_maskz_load_pd(__mmask8 __U, void *__P) +{ + // CHECK-LABEL: @test_mm512_maskz_load_pd + // CHECK: @llvm.x86.avx512.mask.load.pd.512 + return _mm512_maskz_load_pd(__U, __P); +} + __m512d test_mm512_set1_pd(double d) { // CHECK-LABEL: @test_mm512_set1_pd