m_zuckerman updated this revision to Diff 70383.

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,20 @@
   _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 +385,46 @@
   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:cond.true.i
+  // CHECK: store <4 x float> {{.*}}, <4 x float>* {{.*}}
+  // CHECK:cond.false.i
+  // CHECK: store <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:cond.true.i
+  // CHECK: store <4 x float> {{.*}}, <4 x float>* {{.*}}
+  // CHECK:cond.false.i
+  // CHECK: store <4 x float> zeroinitializer, <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:cond.true.i
+  // CHECK: store <2 x double> {{.*}}, <2 x double>* {{.*}}
+  // CHECK:cond.false.i
+  // CHECK: store <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:cond.true.i
+  // CHECK: store <2 x double> {{.*}}, <2 x double>* {{.*}}
+  // CHECK:cond.false.i
+  // CHECK: store <2 x double> zeroinitializer, <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 +6253,54 @@
   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: cond.true.i
+  // CHECK: %6 = load <4 x float>, <4 x float>* %__B.addr.i, align 16
+  // CHECK: cond.false.i
+  // CHECK: %7 = load <4 x float>, <4 x float>* %__W.addr.i, align 16
+  // CHECK: %8 = load <4 x float>, <4 x float>* %res.i, align 16
+  // CHECK: %vecins.i = insertelement <4 x float> %8, float %cond.i, i32 0
+ 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: cond.true.i
+  // CHECK: %5 = load <4 x float>, <4 x float>* %__B.addr.i
+  // CHECK: cond.false.i
+  // CHECK: br label %_mm_maskz_move_ss.exit
+  // CHECK: %6 = load <4 x float>, <4 x float>* %res.i, align 16
+  // CHECK: %vecins.i = insertelement <4 x float> %6, float %cond.i, i32 0
+  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: cond.true.i
+  // CHECK: %7 = load <2 x double>, <2 x double>* %__B.addr.i, align 16
+  // CHECK: cond.false.i
+  // CHECK: %8 = load <2 x double>, <2 x double>* %__W.addr.i, align 16
+  // CHECK: %9 = load <2 x double>, <2 x double>* %res.i, align 16
+  // CHECK: %vecins.i = insertelement <2 x double> %9, double %cond.i, i32 0
+  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: cond.true.i
+  // CHECK: %5 = load <2 x double>, <2 x double>* %__B.addr.i, align 16
+  // CHECK: cond.false.i
+  // CHECK: br label %_mm_maskz_move_sd.exit
+  // CHECK: %6 = load <2 x double>, <2 x double>* %res.i, align 16
+  // CHECK: %vecins.i = insertelement <2 x double> %6, double %cond.i, i32 0
+  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)
+{
+  __m128 res=__A; 
+  res[0] = (__U&1)? __B[0]:__W[0];
+  return res; 
+}
+
+static __inline__ __m128 __DEFAULT_FN_ATTRS
+_mm_maskz_move_ss (__mmask8 __U, __m128 __A, __m128 __B)
+{
+  __m128 res=__A; 
+  res[0] = (__U&1)? __B[0]:0; 
+  return res; 
+}
+
+static __inline__ __m128d __DEFAULT_FN_ATTRS
+_mm_mask_move_sd (__m128d __W, __mmask8 __U, __m128d __A, __m128d __B)
+{
+  __m128d res=__A; 
+  res[0] = (__U&1)? __B[0]:__W[0];
+  return res; 
+}
+
+static __inline__ __m128d __DEFAULT_FN_ATTRS
+_mm_maskz_move_sd (__mmask8 __U, __m128d __A, __m128d __B)
+{
+  __m128d res=__A; 
+  res[0] = (__U&1)? __B[0]:0; 
+  return res; 
+}
+
+
 static __inline__ void __DEFAULT_FN_ATTRS
 _mm512_mask_compressstoreu_pd (void *__P, __mmask8 __U, __m512d __A)
 {
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to