----- Original Message ----- > From: "Adam Nemet" <ane...@apple.com> > To: cfe-comm...@cs.uiuc.edu > Sent: Friday, January 16, 2015 12:51:50 PM > Subject: r226298 - [AVX512] Add intrinsics for masked aligned FP loads and > stores > > Author: anemet > Date: Fri Jan 16 12:51:50 2015 > New Revision: 226298 > > URL: http://llvm.org/viewvc/llvm-project?rev=226298&view=rev > Log: > [AVX512] Add intrinsics for masked aligned FP loads and stores > > Part of <rdar://problem/17688758> > > Modified: > cfe/trunk/include/clang/Basic/BuiltinsX86.def > cfe/trunk/lib/Headers/avx512fintrin.h > cfe/trunk/test/CodeGen/avx512f-builtins.c > > Modified: cfe/trunk/include/clang/Basic/BuiltinsX86.def > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/BuiltinsX86.def?rev=226298&r1=226297&r2=226298&view=diff > ============================================================================== > --- cfe/trunk/include/clang/Basic/BuiltinsX86.def (original) > +++ cfe/trunk/include/clang/Basic/BuiltinsX86.def Fri Jan 16 12:51:50 > 2015 > @@ -897,11 +897,15 @@ BUILTIN(__builtin_ia32_pbroadcastq512_me > BUILTIN(__builtin_ia32_loaddqusi512_mask, "V16ivC*V16iUs", "") > BUILTIN(__builtin_ia32_loaddqudi512_mask, "V8LLivC*V8LLiUc", "") > BUILTIN(__builtin_ia32_loadups512_mask, "V16fvC*V16fUs", "") > +BUILTIN(__builtin_ia32_loadaps512_mask, "V16fvC*V16fUs", "") > BUILTIN(__builtin_ia32_loadupd512_mask, "V8dvC*V8dUc", "") > +BUILTIN(__builtin_ia32_loadapd512_mask, "V8dvC*V8dUc", "") > BUILTIN(__builtin_ia32_storedqudi512_mask, "vv*V8LLiUc", "") > BUILTIN(__builtin_ia32_storedqusi512_mask, "vv*V16iUs", "") > BUILTIN(__builtin_ia32_storeupd512_mask, "vv*V8dUc", "") > +BUILTIN(__builtin_ia32_storeapd512_mask, "vv*V8dUc", "") > BUILTIN(__builtin_ia32_storeups512_mask, "vv*V16fUs", "") > +BUILTIN(__builtin_ia32_storeaps512_mask, "vv*V16fUs", "") > BUILTIN(__builtin_ia32_vpermt2vard512_mask, "V16iV16iV16iV16iUs", > "") > BUILTIN(__builtin_ia32_vpermt2varq512_mask, > "V8LLiV8LLiV8LLiV8LLiUc", "") > BUILTIN(__builtin_ia32_vpermt2varps512_mask, "V16fV16iV16fV16fUs", > "") > > Modified: cfe/trunk/lib/Headers/avx512fintrin.h > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Headers/avx512fintrin.h?rev=226298&r1=226297&r2=226298&view=diff > ============================================================================== > --- cfe/trunk/lib/Headers/avx512fintrin.h (original) > +++ cfe/trunk/lib/Headers/avx512fintrin.h Fri Jan 16 12:51:50 2015 > @@ -928,6 +928,24 @@ _mm512_maskz_loadu_pd(__mmask8 __U, void > (__mmask8) __U); > } > > +static __inline __m512 __attribute__ ((__always_inline__, > __nodebug__)) > +_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 __attribute__ ((__always_inline__, > __nodebug__)) > +_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 __m512d __attribute__((__always_inline__, > __nodebug__)) > _mm512_loadu_pd(double const *__p) > { > @@ -946,6 +964,24 @@ _mm512_loadu_ps(float const *__p) > return ((struct __loadu_ps*)__p)->__v; > } > > +static __inline __m512 __attribute__((__always_inline__, > __nodebug__)) > +_mm512_load_ps(double const *__p) > +{ > + return (__m512) __builtin_ia32_loadaps512_mask ((const __v16sf > *)__p, > + (__v16sf) > + _mm512_setzero_ps > (), > + (__mmask16) -1); > +} > + > +static __inline __m512d __attribute__((__always_inline__, > __nodebug__)) > +_mm512_load_pd(float const *__p)
Shouldn't this one take a 'double const *' and the one above take a 'float const *'? -Hal > +{ > + return (__m512d) __builtin_ia32_loadapd512_mask ((const __v8df > *)__p, > + (__v8df) > + _mm512_setzero_pd > (), > + (__mmask8) -1); > +} > + > /* SIMD store ops */ > > static __inline void __attribute__ ((__always_inline__, > __nodebug__)) > @@ -988,9 +1024,9 @@ _mm512_storeu_ps(void *__P, __m512 __A) > } > > static __inline void __attribute__ ((__always_inline__, > __nodebug__)) > -_mm512_store_ps(void *__P, __m512 __A) > +_mm512_mask_store_pd(void *__P, __mmask8 __U, __m512d __A) > { > - *(__m512*)__P = __A; > + __builtin_ia32_storeapd512_mask ((__v8df *)__P, (__v8df) __A, > (__mmask8) __U); > } > > static __inline void __attribute__ ((__always_inline__, > __nodebug__)) > @@ -999,6 +1035,19 @@ _mm512_store_pd(void *__P, __m512d __A) > *(__m512d*)__P = __A; > } > > +static __inline void __attribute__ ((__always_inline__, > __nodebug__)) > +_mm512_mask_store_ps(void *__P, __mmask16 __U, __m512 __A) > +{ > + __builtin_ia32_storeaps512_mask ((__v16sf *)__P, (__v16sf) __A, > + (__mmask16) __U); > +} > + > +static __inline void __attribute__ ((__always_inline__, > __nodebug__)) > +_mm512_store_ps(void *__P, __m512 __A) > +{ > + *(__m512*)__P = __A; > +} > + > /* Mask ops */ > > static __inline __mmask16 __attribute__ ((__always_inline__, > __nodebug__)) > > Modified: cfe/trunk/test/CodeGen/avx512f-builtins.c > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/avx512f-builtins.c?rev=226298&r1=226297&r2=226298&view=diff > ============================================================================== > --- cfe/trunk/test/CodeGen/avx512f-builtins.c (original) > +++ cfe/trunk/test/CodeGen/avx512f-builtins.c Fri Jan 16 12:51:50 > 2015 > @@ -75,6 +75,13 @@ void test_mm512_storeu_pd(void *p, __m51 > _mm512_storeu_pd(p, a); > } > > +void test_mm512_mask_store_ps(void *p, __m512 a, __mmask16 m) > +{ > + // CHECK-LABEL: @test_mm512_mask_store_ps > + // CHECK: @llvm.x86.avx512.mask.store.ps.512 > + _mm512_mask_store_ps(p, m, a); > +} > + > void test_mm512_store_ps(void *p, __m512 a) > { > // CHECK-LABEL: @test_mm512_store_ps > @@ -82,6 +89,13 @@ void test_mm512_store_ps(void *p, __m512 > _mm512_store_ps(p, a); > } > > +void test_mm512_mask_store_pd(void *p, __m512d a, __mmask8 m) > +{ > + // CHECK-LABEL: @test_mm512_mask_store_pd > + // CHECK: @llvm.x86.avx512.mask.store.pd.512 > + _mm512_mask_store_pd(p, m, a); > +} > + > void test_mm512_store_pd(void *p, __m512d a) > { > // CHECK-LABEL: @test_mm512_store_pd > @@ -103,6 +117,34 @@ __m512d test_mm512_loadu_pd(void *p) > return _mm512_loadu_pd(p); > } > > +__m512 test_mm512_maskz_load_ps(void *p, __mmask16 m) > +{ > + // CHECK-LABEL: @test_mm512_maskz_load_ps > + // CHECK: @llvm.x86.avx512.mask.load.ps.512 > + return _mm512_maskz_load_ps(m, p); > +} > + > +__m512 test_mm512_load_ps(void *p) > +{ > + // CHECK-LABEL: @test_mm512_load_ps > + // CHECK: @llvm.x86.avx512.mask.load.ps.512 > + return _mm512_load_ps(p); > +} > + > +__m512d test_mm512_maskz_load_pd(void *p, __mmask8 m) > +{ > + // CHECK-LABEL: @test_mm512_maskz_load_pd > + // CHECK: @llvm.x86.avx512.mask.load.pd.512 > + return _mm512_maskz_load_pd(m, p); > +} > + > +__m512d test_mm512_load_pd(void *p) > +{ > + // CHECK-LABEL: @test_mm512_load_pd > + // CHECK: @llvm.x86.avx512.mask.load.pd.512 > + return _mm512_load_pd(p); > +} > + > __m512d test_mm512_set1_pd(double d) > { > // CHECK-LABEL: @test_mm512_set1_pd > > > _______________________________________________ > cfe-commits mailing list > cfe-comm...@cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits > -- Hal Finkel Assistant Computational Scientist Leadership Computing Facility Argonne National Laboratory _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits