1 // RUN: %clang_cc1 -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512vpopcntdq -target-feature +avx512vl -emit-llvm -o - -Wall -Werror | FileCheck %s
4 #include "builtin_test_helpers.h"
6 __m128i
test_mm_popcnt_epi64(__m128i __A
) {
7 // CHECK-LABEL: @test_mm_popcnt_epi64
8 // CHECK: @llvm.ctpop.v2i64
9 return _mm_popcnt_epi64(__A
);
11 TEST_CONSTEXPR(match_v2di(_mm_popcnt_epi64((__m128i
)(__v2di
){+5, -3}), 2, 63));
13 __m128i
test_mm_mask_popcnt_epi64(__m128i __W
, __mmask8 __U
, __m128i __A
) {
14 // CHECK-LABEL: @test_mm_mask_popcnt_epi64
15 // CHECK: @llvm.ctpop.v2i64
16 // CHECK: select <2 x i1> %{{.+}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}}
17 return _mm_mask_popcnt_epi64(__W
, __U
, __A
);
20 __m128i
test_mm_maskz_popcnt_epi64(__mmask8 __U
, __m128i __A
) {
21 // CHECK-LABEL: @test_mm_maskz_popcnt_epi64
22 // CHECK: @llvm.ctpop.v2i64
23 // CHECK: select <2 x i1> %{{.+}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}}
24 return _mm_maskz_popcnt_epi64(__U
, __A
);
27 __m128i
test_mm_popcnt_epi32(__m128i __A
) {
28 // CHECK-LABEL: @test_mm_popcnt_epi32
29 // CHECK: @llvm.ctpop.v4i32
30 return _mm_popcnt_epi32(__A
);
32 TEST_CONSTEXPR(match_v4si(_mm_popcnt_epi32((__m128i
)(__v4si
){+5, -3, -10, +8}), 2, 31, 30, 1));
34 __m128i
test_mm_mask_popcnt_epi32(__m128i __W
, __mmask8 __U
, __m128i __A
) {
35 // CHECK-LABEL: @test_mm_mask_popcnt_epi32
36 // CHECK: @llvm.ctpop.v4i32
37 // CHECK: select <4 x i1> %{{.+}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}}
38 return _mm_mask_popcnt_epi32(__W
, __U
, __A
);
41 __m128i
test_mm_maskz_popcnt_epi32(__mmask8 __U
, __m128i __A
) {
42 // CHECK-LABEL: @test_mm_maskz_popcnt_epi32
43 // CHECK: @llvm.ctpop.v4i32
44 // CHECK: select <4 x i1> %{{.+}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}}
45 return _mm_maskz_popcnt_epi32(__U
, __A
);
48 __m256i
test_mm256_popcnt_epi64(__m256i __A
) {
49 // CHECK-LABEL: @test_mm256_popcnt_epi64
50 // CHECK: @llvm.ctpop.v4i64
51 return _mm256_popcnt_epi64(__A
);
53 TEST_CONSTEXPR(match_v4di(_mm256_popcnt_epi64((__m256i
)(__v4di
){+5, -3, -10, +8}), 2, 63, 62, 1));
55 __m256i
test_mm256_mask_popcnt_epi64(__m256i __W
, __mmask8 __U
, __m256i __A
) {
56 // CHECK-LABEL: @test_mm256_mask_popcnt_epi64
57 // CHECK: @llvm.ctpop.v4i64
58 // CHECK: select <4 x i1> %{{.+}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}}
59 return _mm256_mask_popcnt_epi64(__W
, __U
, __A
);
62 __m256i
test_mm256_maskz_popcnt_epi64(__mmask8 __U
, __m256i __A
) {
63 // CHECK-LABEL: @test_mm256_maskz_popcnt_epi64
64 // CHECK: @llvm.ctpop.v4i64
65 // CHECK: select <4 x i1> %{{.+}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}}
66 return _mm256_maskz_popcnt_epi64(__U
, __A
);
69 __m256i
test_mm256_popcnt_epi32(__m256i __A
) {
70 // CHECK-LABEL: @test_mm256_popcnt_epi32
71 // CHECK: @llvm.ctpop.v8i32
72 return _mm256_popcnt_epi32(__A
);
74 TEST_CONSTEXPR(match_v8si(_mm256_popcnt_epi32((__m256i
)(__v8si
){+5, -3, -10, +8, 0, -256, +256, -128}), 2, 31, 30, 1, 0, 24, 1, 25));
76 __m256i
test_mm256_mask_popcnt_epi32(__m256i __W
, __mmask8 __U
, __m256i __A
) {
77 // CHECK-LABEL: @test_mm256_mask_popcnt_epi32
78 // CHECK: @llvm.ctpop.v8i32
79 // CHECK: select <8 x i1> %{{.+}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}}
80 return _mm256_mask_popcnt_epi32(__W
, __U
, __A
);
83 __m256i
test_mm256_maskz_popcnt_epi32(__mmask8 __U
, __m256i __A
) {
84 // CHECK-LABEL: @test_mm256_maskz_popcnt_epi32
85 // CHECK: @llvm.ctpop.v8i32
86 // CHECK: select <8 x i1> %{{.+}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}}
87 return _mm256_maskz_popcnt_epi32(__U
, __A
);