summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCraig Topper <craig.topper@gmail.com>2015-02-01 22:27:40 +0000
committerCraig Topper <craig.topper@gmail.com>2015-02-01 22:27:40 +0000
commit53565c60e7dfe6cb7b7ba347298a0de87ed956af (patch)
tree7a4fddca71b74aadcdc3c8e4e1da216cf37c129b
parent7c6ab93fba16f893acebc9ea9542b56ee7297bdb (diff)
downloadbcm5719-llvm-53565c60e7dfe6cb7b7ba347298a0de87ed956af.tar.gz
bcm5719-llvm-53565c60e7dfe6cb7b7ba347298a0de87ed956af.zip
[X86] Add other flavors of AVX512 cmpps/cmppd intrinsics.
llvm-svn: 227773
-rw-r--r--clang/lib/Headers/avx512fintrin.h44
-rw-r--r--clang/test/CodeGen/avx512f-builtins.c48
2 files changed, 73 insertions, 19 deletions
diff --git a/clang/lib/Headers/avx512fintrin.h b/clang/lib/Headers/avx512fintrin.h
index 09b29fa0496..e8c449d71a9 100644
--- a/clang/lib/Headers/avx512fintrin.h
+++ b/clang/lib/Headers/avx512fintrin.h
@@ -672,19 +672,37 @@ _mm512_mask_blend_epi32(__mmask16 __U, __m512i __A, __m512i __W)
/* Compare */
-#define _mm512_cmp_ps_mask(a, b, p) __extension__ ({ \
- __m512 __a = (a); \
- __m512 __b = (b); \
- (__mmask16)__builtin_ia32_cmpps512_mask((__v16sf)__a, (__v16sf)__b, (p), \
- (__mmask16)-1, \
- _MM_FROUND_CUR_DIRECTION); })
-
-#define _mm512_cmp_pd_mask(a, b, p) __extension__ ({ \
- __m512 __a = (a); \
- __m512 __b = (b); \
- (__mmask8)__builtin_ia32_cmppd512_mask((__v8df)__a, (__v8df)__b, (p), \
- (__mmask8)-1, \
- _MM_FROUND_CUR_DIRECTION); })
+#define _mm512_cmp_round_ps_mask(A, B, P, R) __extension__ ({ \
+ (__mmask16)__builtin_ia32_cmpps512_mask((__v16sf)(__m512)(A), \
+ (__v16sf)(__m512)(B), \
+ (P), (__mmask16)-1, (R)); })
+
+#define _mm512_mask_cmp_round_ps_mask(U, A, B, P, R) __extension__ ({ \
+ (__mmask16)__builtin_ia32_cmpps512_mask((__v16sf)(__m512)(A), \
+ (__v16sf)(__m512)(B), \
+ (P), (__mmask16)(U), (R)); })
+
+#define _mm512_cmp_ps_mask(A, B, P) \
+ _mm512_cmp_round_ps_mask((A), (B), (P), _MM_FROUND_CUR_DIRECTION)
+
+#define _mm512_mask_cmp_ps_mask(U, A, B, P) \
+ _mm512_mask_cmp_round_ps_mask((U), (A), (B), (P), _MM_FROUND_CUR_DIRECTION)
+
+#define _mm512_cmp_round_pd_mask(A, B, P, R) __extension__ ({ \
+ (__mmask8)__builtin_ia32_cmppd512_mask((__v8df)(__m512d)(A), \
+ (__v8df)(__m512d)(B), \
+ (P), (__mmask8)-1, (R)); })
+
+#define _mm512_mask_cmp_round_pd_mask(U, A, B, P, R) __extension__ ({ \
+ (__mmask8)__builtin_ia32_cmppd512_mask((__v8df)(__m512d)(A), \
+ (__v8df)(__m512d)(B), \
+ (P), (__mmask8)(U), (R)); })
+
+#define _mm512_cmp_pd_mask(A, B, P) \
+ _mm512_cmp_round_pd_mask((A), (B), (P), _MM_FROUND_CUR_DIRECTION)
+
+#define _mm512_mask_cmp_pd_mask(U, A, B, P) \
+ _mm512_mask_cmp_round_pd_mask((U), (A), (B), (P), _MM_FROUND_CUR_DIRECTION)
/* Conversion */
diff --git a/clang/test/CodeGen/avx512f-builtins.c b/clang/test/CodeGen/avx512f-builtins.c
index 1e22da8ba5f..f7f7df54174 100644
--- a/clang/test/CodeGen/avx512f-builtins.c
+++ b/clang/test/CodeGen/avx512f-builtins.c
@@ -284,16 +284,52 @@ __m512 test_mm512_unpacklo_ps(__m512 a, __m512 b)
return _mm512_unpacklo_ps(a, b);
}
-__mmask16 test_mm512_cmp_ps_mask(__m512 __a, __m512 __b) {
- // CHECK-LABEL: @test_mm512_cmp_ps_mask
+__mmask16 test_mm512_cmp_round_ps_mask(__m512 a, __m512 b) {
+ // CHECK-LABEL: @test_mm512_cmp_round_ps_mask
// CHECK: @llvm.x86.avx512.mask.cmp.ps.512
- return _mm512_cmp_ps_mask(__a, __b, 0);
+ return _mm512_cmp_round_ps_mask(a, b, 0, _MM_FROUND_TO_NEAREST_INT);
}
-__mmask8 test_mm512_cmp_pd_mask(__m512 __a, __m512 __b) {
- // CHECK-LABEL: @test_mm512_cmp_pd_mask
+__mmask16 test_mm512_mask_cmp_round_ps_mask(__mmask16 m, __m512 a, __m512 b) {
+ // CHECK-LABEL: @test_mm512_mask_cmp_round_ps_mask
+ // CHECK: @llvm.x86.avx512.mask.cmp.ps.512
+ return _mm512_mask_cmp_round_ps_mask(m, a, b, 0, _MM_FROUND_TO_NEAREST_INT);
+}
+
+__mmask16 test_mm512_cmp_ps_mask(__m512 a, __m512 b) {
+ // check-label: @test_mm512_cmp_ps_mask
+ // check: @llvm.x86.avx512.mask.cmp.ps.512
+ return _mm512_cmp_ps_mask(a, b, 0);
+}
+
+__mmask16 test_mm512_mask_cmp_ps_mask(__mmask16 m, __m512 a, __m512 b) {
+ // CHECK-LABEL: @test_mm512_mask_cmp_ps_mask
+ // CHECK: @llvm.x86.avx512.mask.cmp.ps.512
+ return _mm512_mask_cmp_ps_mask(m, a, b, 0);
+}
+
+__mmask8 test_mm512_cmp_round_pd_mask(__m512d a, __m512d b) {
+ // CHECK-LABEL: @test_mm512_cmp_round_pd_mask
+ // CHECK: @llvm.x86.avx512.mask.cmp.pd.512
+ return _mm512_cmp_round_pd_mask(a, b, 0, _MM_FROUND_TO_NEAREST_INT);
+}
+
+__mmask8 test_mm512_mask_cmp_round_pd_mask(__mmask8 m, __m512d a, __m512d b) {
+ // CHECK-LABEL: @test_mm512_mask_cmp_round_pd_mask
+ // CHECK: @llvm.x86.avx512.mask.cmp.pd.512
+ return _mm512_mask_cmp_round_pd_mask(m, a, b, 0, _MM_FROUND_TO_NEAREST_INT);
+}
+
+__mmask8 test_mm512_cmp_pd_mask(__m512d a, __m512d b) {
+ // check-label: @test_mm512_cmp_pd_mask
+ // check: @llvm.x86.avx512.mask.cmp.pd.512
+ return _mm512_cmp_pd_mask(a, b, 0);
+}
+
+__mmask8 test_mm512_mask_cmp_pd_mask(__mmask8 m, __m512d a, __m512d b) {
+ // CHECK-LABEL: @test_mm512_mask_cmp_pd_mask
// CHECK: @llvm.x86.avx512.mask.cmp.pd.512
- return _mm512_cmp_pd_mask(__a, __b, 0);
+ return _mm512_mask_cmp_pd_mask(m, a, b, 0);
}
__m256d test_mm512_extractf64x4_pd(__m512d a)
OpenPOWER on IntegriCloud