diff options
| author | Craig Topper <craig.topper@intel.com> | 2017-12-16 08:26:22 +0000 |
|---|---|---|
| committer | Craig Topper <craig.topper@intel.com> | 2017-12-16 08:26:22 +0000 |
| commit | 5028ace602a42c4b7facd646d5be73b8f23fa057 (patch) | |
| tree | 7cc1d11b4f75b5ea8c5a7e8c07036886cc5bb40b /clang/test | |
| parent | d2a2a39c93363bd4d2281d926b97d3770dfe2501 (diff) | |
| download | bcm5719-llvm-5028ace602a42c4b7facd646d5be73b8f23fa057.tar.gz bcm5719-llvm-5028ace602a42c4b7facd646d5be73b8f23fa057.zip | |
[X86] Implement kand/kandn/kor/kxor/kxnor/knot intrinsics using native IR.
llvm-svn: 320919
Diffstat (limited to 'clang/test')
| -rw-r--r-- | clang/test/CodeGen/avx512f-builtins.c | 61 |
1 files changed, 45 insertions, 16 deletions
diff --git a/clang/test/CodeGen/avx512f-builtins.c b/clang/test/CodeGen/avx512f-builtins.c index a4e9e3bc9df..9a3bf5a2448 100644 --- a/clang/test/CodeGen/avx512f-builtins.c +++ b/clang/test/CodeGen/avx512f-builtins.c @@ -385,7 +385,9 @@ __m512d test_mm512_set1_pd(double d) __mmask16 test_mm512_knot(__mmask16 a) { // CHECK-LABEL: @test_mm512_knot - // CHECK: @llvm.x86.avx512.knot.w + // CHECK: [[IN:%.*]] = bitcast i16 %1 to <16 x i1> + // CHECK: [[NOT:%.*]] = xor <16 x i1> [[IN]], <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true> + // CHECK: bitcast <16 x i1> [[NOT]] to i16 return _mm512_knot(a); } @@ -6211,22 +6213,38 @@ __m512i test_mm512_mask_permutexvar_epi32(__m512i __W, __mmask16 __M, __m512i __ return _mm512_mask_permutexvar_epi32(__W, __M, __X, __Y); } -__mmask16 test_mm512_kand(__mmask16 __A, __mmask16 __B) { +__mmask16 test_mm512_kand(__m512i __A, __m512i __B, __m512i __C, __m512i __D, __m512i __E, __m512i __F) { // CHECK-LABEL: @test_mm512_kand - // CHECK: @llvm.x86.avx512.kand.w - return _mm512_kand(__A, __B); + // CHECK: [[LHS:%.*]] = bitcast i16 %{{.*}} to <16 x i1> + // CHECK: [[RHS:%.*]] = bitcast i16 %{{.*}} to <16 x i1> + // CHECK: [[RES:%.*]] = and <16 x i1> [[LHS]], [[RHS]] + // CHECK: bitcast <16 x i1> [[RES]] to i16 + return _mm512_mask_cmpneq_epu32_mask(_mm512_kand(_mm512_cmpneq_epu32_mask(__A, __B), + _mm512_cmpneq_epu32_mask(__C, __D)), + __E, __F); } -__mmask16 test_mm512_kandn(__mmask16 __A, __mmask16 __B) { +__mmask16 test_mm512_kandn(__m512i __A, __m512i __B, __m512i __C, __m512i __D, __m512i __E, __m512i __F) { // CHECK-LABEL: @test_mm512_kandn - // CHECK: @llvm.x86.avx512.kandn.w - return _mm512_kandn(__A, __B); + // CHECK: [[LHS:%.*]] = bitcast i16 %{{.*}} to <16 x i1> + // CHECK: [[RHS:%.*]] = bitcast i16 %{{.*}} to <16 x i1> + // CHECK: [[NOT:%.*]] = xor <16 x i1> [[LHS]], <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true> + // CHECK: [[RES:%.*]] = and <16 x i1> [[NOT]], [[RHS]] + // CHECK: bitcast <16 x i1> [[RES]] to i16 + return _mm512_mask_cmpneq_epu32_mask(_mm512_kandn(_mm512_cmpneq_epu32_mask(__A, __B), + _mm512_cmpneq_epu32_mask(__C, __D)), + __E, __F); } -__mmask16 test_mm512_kor(__mmask16 __A, __mmask16 __B) { +__mmask16 test_mm512_kor(__m512i __A, __m512i __B, __m512i __C, __m512i __D, __m512i __E, __m512i __F) { // CHECK-LABEL: @test_mm512_kor - // CHECK: @llvm.x86.avx512.kor.w - return _mm512_kor(__A, __B); + // CHECK: [[LHS:%.*]] = bitcast i16 %{{.*}} to <16 x i1> + // CHECK: [[RHS:%.*]] = bitcast i16 %{{.*}} to <16 x i1> + // CHECK: [[RES:%.*]] = or <16 x i1> [[LHS]], [[RHS]] + // CHECK: bitcast <16 x i1> [[RES]] to i16 + return _mm512_mask_cmpneq_epu32_mask(_mm512_kor(_mm512_cmpneq_epu32_mask(__A, __B), + _mm512_cmpneq_epu32_mask(__C, __D)), + __E, __F); } int test_mm512_kortestc(__mmask16 __A, __mmask16 __B) { @@ -6254,16 +6272,27 @@ __mmask16 test_mm512_kunpackb(__m512i __A, __m512i __B, __m512i __C, __m512i __D __E, __F); } -__mmask16 test_mm512_kxnor(__mmask16 __A, __mmask16 __B) { +__mmask16 test_mm512_kxnor(__m512i __A, __m512i __B, __m512i __C, __m512i __D, __m512i __E, __m512i __F) { // CHECK-LABEL: @test_mm512_kxnor - // CHECK: @llvm.x86.avx512.kxnor.w - return _mm512_kxnor(__A, __B); + // CHECK: [[LHS:%.*]] = bitcast i16 %{{.*}} to <16 x i1> + // CHECK: [[RHS:%.*]] = bitcast i16 %{{.*}} to <16 x i1> + // CHECK: [[NOT:%.*]] = xor <16 x i1> [[LHS]], <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true> + // CHECK: [[RES:%.*]] = xor <16 x i1> [[NOT]], [[RHS]] + // CHECK: bitcast <16 x i1> [[RES]] to i16 + return _mm512_mask_cmpneq_epu32_mask(_mm512_kxnor(_mm512_cmpneq_epu32_mask(__A, __B), + _mm512_cmpneq_epu32_mask(__C, __D)), + __E, __F); } -__mmask16 test_mm512_kxor(__mmask16 __A, __mmask16 __B) { +__mmask16 test_mm512_kxor(__m512i __A, __m512i __B, __m512i __C, __m512i __D, __m512i __E, __m512i __F) { // CHECK-LABEL: @test_mm512_kxor - // CHECK: @llvm.x86.avx512.kxor.w - return _mm512_kxor(__A, __B); + // CHECK: [[LHS:%.*]] = bitcast i16 %{{.*}} to <16 x i1> + // CHECK: [[RHS:%.*]] = bitcast i16 %{{.*}} to <16 x i1> + // CHECK: [[RES:%.*]] = xor <16 x i1> [[LHS]], [[RHS]] + // CHECK: bitcast <16 x i1> [[RES]] to i16 + return _mm512_mask_cmpneq_epu32_mask(_mm512_kxor(_mm512_cmpneq_epu32_mask(__A, __B), + _mm512_cmpneq_epu32_mask(__C, __D)), + __E, __F); } void test_mm512_stream_si512(__m512i * __P, __m512i __A) { |

