m_zuckerman updated this revision to Diff 70318.
https://reviews.llvm.org/D21505
Files:
lib/Headers/avx512fintrin.h
test/CodeGen/avx512f-builtins.c
Index: test/CodeGen/avx512f-builtins.c
===================================================================
--- test/CodeGen/avx512f-builtins.c
+++ test/CodeGen/avx512f-builtins.c
@@ -241,6 +241,21 @@
_mm512_mask_store_pd(p, m, a);
}
+void test_mm_mask_store_ss (float * __W, __mmask8 __U, __m128 __A)
+{
+ // CHECK-LABEL: @test_mm_mask_store_ss
+ // CHECK: store float {{.*}}, float* {{.*}}
+ return _mm_mask_store_ss (__W, __U, __A);
+}
+
+void test_mm_mask_store_sd (double * __W, __mmask8 __U, __m128d __A)
+{
+ // CHECK-LABEL: @test_mm_mask_store_sd
+ // CHECK: store double {{.*}}, double* {{.*}}
+ return _mm_mask_store_sd ( __W, __U, __A);
+}
+
+
void test_mm512_mask_storeu_epi32(void *__P, __mmask16 __U, __m512i __A) {
// CHECK-LABEL: @test_mm512_mask_storeu_epi32
// CHECK: @llvm.masked.store.v16i32.p0v16i32(<16 x i32> %{{.*}}, <16 x i32>* %{{.*}}, i32 1, <16 x i1> %{{.*}})
@@ -371,6 +386,38 @@
return _mm512_maskz_load_pd(__U, __P);
}
+__m128 test_mm_mask_load_ss (__m128 __W, __mmask8 __U, float const* __A)
+{
+ // CHECK-LABEL: @test_mm_mask_load_ss
+ // CHECK: select <4 x i1> {{.*}}, <4 x float> {{.*}}, <4 x float> {{.*}}
+ // CHECK: load <4 x float>, <4 x float>* {{.*}}
+ return _mm_mask_load_ss ( __W, __U, __A);
+}
+
+__m128 test_mm_maskz_load_ss (__mmask8 __U, float const* __A)
+{
+ // CHECK-LABEL: @test_mm_maskz_load_ss
+ // CHECK: select <4 x i1> {{.*}}, <4 x float> {{.*}}, <4 x float> {{.*}}
+ // CHECK: load <4 x float>, <4 x float>* {{.*}}
+ return _mm_maskz_load_ss (__U, __A);
+}
+
+__m128d test_mm_mask_load_sd (__m128 __W, __mmask8 __U, double const* __A)
+{
+ // CHECK-LABEL: @test_mm_mask_load_sd
+ // CHECK: select <2 x i1>{{.*}}, <2 x double>{{.*}}, <2 x double>{{.*}}
+ // CHECK: load <2 x double>, <2 x double>* {{.*}}
+ return _mm_mask_load_sd ( __W, __U, __A);
+}
+
+__m128d test_mm_maskz_load_sd (__mmask8 __U, double const* __A)
+{
+ // CHECK-LABEL: @test_mm_maskz_load_sd
+ // CHECK: select <2 x i1> {{.*}}, <2 x double> {{.*}}, <2 x double> {{.*}}
+ // CHECK: load <2 x double>, <2 x double>* {{.*}}
+ return _mm_maskz_load_sd (__U, __A);
+}
+
__m512d test_mm512_set1_pd(double d)
{
// CHECK-LABEL: @test_mm512_set1_pd
@@ -6199,6 +6246,38 @@
return _mm512_maskz_mov_ps(__U, __A);
}
+__m128 test_mm_mask_move_ss (__m128 __W, __mmask8 __U, __m128 __A, __m128 __B)
+{
+ // CHECK-LABEL: @test_mm_mask_move_ss
+ // CHECK: select <4 x i1>{{.*}}, <4 x float> {{.*}}, <4 x float>{{.*}}
+ // CHECK: load <4 x float>, <4 x float>* {{.*}}
+ return _mm_mask_move_ss ( __W, __U, __A, __B);
+}
+
+__m128 test_mm_maskz_move_ss (__mmask8 __U, __m128 __A, __m128 __B)
+{
+ // CHECK-LABEL: @test_mm_maskz_move_ss
+ // CHECK: select <4 x i1>{{.*}}, <4 x float> {{.*}}, <4 x float>{{.*}}
+ // CHECK: load <4 x float>, <4 x float>* {{.*}}
+ return _mm_maskz_move_ss (__U, __A, __B);
+}
+
+__m128d test_mm_mask_move_sd (__m128 __W, __mmask8 __U, __m128d __A, __m128d __B)
+{
+ // CHECK-LABEL: @test_mm_mask_move_sd
+ // CHECK: select <2 x i1>{{.*}}, <2 x double>{{.*}}, <2 x double>{{.*}}
+ // CHECK: load <2 x double>, <2 x double>* {{.*}}
+ return _mm_mask_move_sd ( __W, __U, __A, __B);
+}
+
+__m128d test_mm_maskz_move_sd (__mmask8 __U, __m128d __A, __m128d __B)
+{
+ // CHECK-LABEL: @test_mm_maskz_move_sd
+ // CHECK: select <2 x i1> {{.*}}, <2 x double> {{.*}}, <2 x double> {{.*}}
+ // CHECK: load <2 x double>, <2 x double>* {{.*}}
+ return _mm_maskz_move_sd (__U, __A, __B);
+}
+
void test_mm512_mask_compressstoreu_pd(void *__P, __mmask8 __U, __m512d __A) {
// CHECK-LABEL: @test_mm512_mask_compressstoreu_pd
// CHECK: @llvm.x86.avx512.mask.compress.store.pd.512
Index: lib/Headers/avx512fintrin.h
===================================================================
--- lib/Headers/avx512fintrin.h
+++ lib/Headers/avx512fintrin.h
@@ -4558,6 +4558,30 @@
return *(__m512i *) __P;
}
+static __inline__ __m128 __DEFAULT_FN_ATTRS
+_mm_mask_load_ss (__m128 __W, __mmask8 __U, const float* __A)
+{
+ return (__U & 1) ? _mm_load_ss(__A) : (__m128) { __W[0], 0, 0, 0};
+}
+
+static __inline__ __m128 __DEFAULT_FN_ATTRS
+_mm_maskz_load_ss (__mmask8 __U, const float* __A)
+{
+ return (__U & 1) ? _mm_load_ss(__A) : (__m128) { 0, 0, 0, 0};
+}
+
+static __inline__ __m128d __DEFAULT_FN_ATTRS
+_mm_mask_load_sd (__m128d __W, __mmask8 __U, const double* __A)
+{
+ return (__U & 1) ? _mm_load_sd(__A) :(__m128d) { __W[0], 0};
+}
+
+static __inline__ __m128d __DEFAULT_FN_ATTRS
+_mm_maskz_load_sd (__mmask8 __U, const double* __A)
+{
+ return (__U & 1) ? _mm_load_sd(__A) :(__m128d) { 0, 0};
+}
+
/* SIMD store ops */
static __inline void __DEFAULT_FN_ATTRS
@@ -4649,6 +4673,20 @@
*(__m512i *) __P = __A;
}
+static __inline__ void __DEFAULT_FN_ATTRS
+_mm_mask_store_ss (float * __W, __mmask8 __U, __m128 __A)
+{
+ if(__U & 1)
+ _mm_store_ss(__W, __A);
+}
+
+static __inline__ void __DEFAULT_FN_ATTRS
+_mm_mask_store_sd (double * __W, __mmask8 __U, __m128d __A)
+{
+ if(__U & 1)
+ _mm_store_sd(__W, __A);
+}
+
/* Mask ops */
static __inline __mmask16 __DEFAULT_FN_ATTRS
@@ -9293,6 +9331,39 @@
(__v16sf) _mm512_setzero_ps ());
}
+static __inline__ __m128 __DEFAULT_FN_ATTRS
+_mm_mask_move_ss (__m128 __W, __mmask8 __U, __m128 __A, __m128 __B)
+{
+ return (__m128) _mm_move_ss( __A, __builtin_ia32_selectps_128 ((__mmask8) __U,
+ (__v4sf) __B,
+ (__v4sf) __W));
+}
+
+static __inline__ __m128 __DEFAULT_FN_ATTRS
+_mm_maskz_move_ss (__mmask8 __U, __m128 __A, __m128 __B)
+{
+ return (__m128) _mm_move_ss( __A, __builtin_ia32_selectps_128 ((__mmask8) __U,
+ (__v4sf) __B,
+ (__v4sf) _mm_setzero_si128()));
+}
+
+static __inline__ __m128d __DEFAULT_FN_ATTRS
+_mm_mask_move_sd (__m128d __W, __mmask8 __U, __m128d __A, __m128d __B)
+{
+ return (__m128d) _mm_move_sd( __A, __builtin_ia32_selectpd_128 ((__mmask8) __U,
+ (__v2df) __B,
+ (__v2df) __W));
+}
+
+static __inline__ __m128 __DEFAULT_FN_ATTRS
+_mm_maskz_move_sd (__mmask8 __U, __m128d __A, __m128d __B)
+{
+ return (__m128d) _mm_move_sd(__A, __builtin_ia32_selectpd_128 ((__mmask8) __U,
+ (__v2df) __B,
+ (__v2df) _mm_setzero_pd ()));
+}
+
+
static __inline__ void __DEFAULT_FN_ATTRS
_mm512_mask_compressstoreu_pd (void *__P, __mmask8 __U, __m512d __A)
{
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits