|
5 | 5 |
|
6 | 6 |
|
7 | 7 | #include <immintrin.h> |
| 8 | +#include "builtin_test_helpers.h" |
8 | 9 |
|
9 | 10 | __m512i test_mm512_conflict_epi64(__m512i __A) { |
10 | 11 | // CHECK-LABEL: test_mm512_conflict_epi64 |
@@ -42,39 +43,70 @@ __m512i test_mm512_maskz_conflict_epi32(__mmask16 __U, __m512i __A) { |
42 | 43 | } |
43 | 44 | __m512i test_mm512_lzcnt_epi32(__m512i __A) { |
44 | 45 | // CHECK-LABEL: test_mm512_lzcnt_epi32 |
45 | | - // CHECK: call <16 x i32> @llvm.ctlz.v16i32(<16 x i32> %{{.*}}, i1 false) |
| 46 | + // CHECK: call <16 x i32> @llvm.ctlz.v16i32(<16 x i32> %{{.*}}, i1 true) |
| 47 | + // CHECK: [[ISZERO:%.+]] = icmp eq <16 x i32> %{{.*}}, zeroinitializer |
| 48 | + // CHECK: select <16 x i1> [[ISZERO]], <16 x i32> %{{.*}}, <16 x i32> %{{.*}} |
46 | 49 | return _mm512_lzcnt_epi32(__A); |
47 | 50 | } |
| 51 | + |
| 52 | +TEST_CONSTEXPR(match_v16si(_mm512_lzcnt_epi32((__m512i)(__v16si){1, 2, 4, 8, 16, 32, 64, 128, 3, 5, 6, 7, 9, 10, 11, 12}), 31, 30, 29, 28, 27, 26, 25, 24, 30, 29, 29, 29, 28, 28, 28, 28)); |
| 53 | +TEST_CONSTEXPR(match_v16si(_mm512_lzcnt_epi32((__m512i)(__v16si){0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}), 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32)); |
| 54 | + |
48 | 55 | __m512i test_mm512_mask_lzcnt_epi32(__m512i __W, __mmask16 __U, __m512i __A) { |
49 | 56 | // CHECK-LABEL: test_mm512_mask_lzcnt_epi32 |
50 | | - // CHECK: call <16 x i32> @llvm.ctlz.v16i32(<16 x i32> %{{.*}}, i1 false) |
| 57 | + // CHECK: call <16 x i32> @llvm.ctlz.v16i32(<16 x i32> %{{.*}}, i1 true) |
| 58 | + // CHECK: [[ISZERO:%.+]] = icmp eq <16 x i32> %{{.*}}, zeroinitializer |
| 59 | + // CHECK: select <16 x i1> [[ISZERO]], <16 x i32> %{{.*}}, <16 x i32> %{{.*}} |
51 | 60 | // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}} |
52 | 61 | return _mm512_mask_lzcnt_epi32(__W,__U,__A); |
53 | 62 | } |
| 63 | + |
| 64 | +TEST_CONSTEXPR(match_v16si(_mm512_mask_lzcnt_epi32(_mm512_set1_epi32(32), /*1010 1100 1010 1101=*/0xacad, (__m512i)(__v16si){1, 2, 4, 8, 16, 32, 64, 128, 3, 5, 6, 7, 9, 10, 11, 12}), 31, 32, 29, 28, 32, 26, 32, 24, 32, 32, 29, 29, 32, 28, 32, 28)); |
| 65 | + |
54 | 66 | __m512i test_mm512_maskz_lzcnt_epi32(__mmask16 __U, __m512i __A) { |
55 | 67 | // CHECK-LABEL: test_mm512_maskz_lzcnt_epi32 |
56 | | - // CHECK: call <16 x i32> @llvm.ctlz.v16i32(<16 x i32> %{{.*}}, i1 false) |
| 68 | + // CHECK: call <16 x i32> @llvm.ctlz.v16i32(<16 x i32> %{{.*}}, i1 true) |
| 69 | + // CHECK: [[ISZERO:%.+]] = icmp eq <16 x i32> %{{.*}}, zeroinitializer |
| 70 | + // CHECK: select <16 x i1> [[ISZERO]], <16 x i32> %{{.*}}, <16 x i32> %{{.*}} |
57 | 71 | // CHECK: select <16 x i1> %{{.*}}, <16 x i32> %{{.*}}, <16 x i32> %{{.*}} |
58 | 72 | return _mm512_maskz_lzcnt_epi32(__U,__A); |
59 | 73 | } |
| 74 | + |
| 75 | +TEST_CONSTEXPR(match_v16si(_mm512_maskz_lzcnt_epi32(/*1010 1100 1010 1101=*/0xacad, (__m512i)(__v16si){1, 2, 4, 8, 16, 32, 64, 128, 3, 5, 6, 7, 9, 10, 11, 12}), 31, 0, 29, 28, 0, 26, 0, 24, 0, 0, 29, 29, 0, 28, 0, 28)); |
| 76 | + |
60 | 77 | __m512i test_mm512_lzcnt_epi64(__m512i __A) { |
61 | 78 | // CHECK-LABEL: test_mm512_lzcnt_epi64 |
62 | | - // CHECK: call {{.*}}<8 x i64> @llvm.ctlz.v8i64(<8 x i64> %{{.*}}, i1 false) |
| 79 | + // CHECK: call {{.*}}<8 x i64> @llvm.ctlz.v8i64(<8 x i64> %{{.*}}, i1 true) |
| 80 | + // CHECK: [[ISZERO:%.+]] = icmp eq <8 x i64> %{{.*}}, zeroinitializer |
| 81 | + // CHECK: select <8 x i1> [[ISZERO]], <8 x i64> %{{.*}}, <8 x i64> %{{.*}} |
63 | 82 | return _mm512_lzcnt_epi64(__A); |
64 | 83 | } |
| 84 | + |
| 85 | +TEST_CONSTEXPR(match_v8di(_mm512_lzcnt_epi64((__m512i)(__v8di){1, 2, 4, 8, 16, 32, 64, 128}), 63, 62, 61, 60, 59, 58, 57, 56)); |
| 86 | +TEST_CONSTEXPR(match_v8di(_mm512_lzcnt_epi64((__m512i)(__v8di){0, 0, 0, 0, 0, 0, 0, 0}), 64, 64, 64, 64, 64, 64, 64, 64)); |
| 87 | + |
65 | 88 | __m512i test_mm512_mask_lzcnt_epi64(__m512i __W, __mmask8 __U, __m512i __A) { |
66 | 89 | // CHECK-LABEL: test_mm512_mask_lzcnt_epi64 |
67 | | - // CHECK: call {{.*}}<8 x i64> @llvm.ctlz.v8i64(<8 x i64> %{{.*}}, i1 false) |
| 90 | + // CHECK: call {{.*}}<8 x i64> @llvm.ctlz.v8i64(<8 x i64> %{{.*}}, i1 true) |
| 91 | + // CHECK: [[ISZERO:%.+]] = icmp eq <8 x i64> %{{.*}}, zeroinitializer |
| 92 | + // CHECK: select <8 x i1> [[ISZERO]], <8 x i64> %{{.*}}, <8 x i64> %{{.*}} |
68 | 93 | // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}} |
69 | 94 | return _mm512_mask_lzcnt_epi64(__W,__U,__A); |
70 | 95 | } |
| 96 | + |
| 97 | +TEST_CONSTEXPR(match_v8di(_mm512_mask_lzcnt_epi64(_mm512_set1_epi64((long long) 64), /*0101 0111=*/0x57, (__m512i)(__v8di){1, 2, 4, 8, 16, 32, 64, 128}), 63, 62, 61, 64, 59, 64, 57, 64)); |
| 98 | + |
71 | 99 | __m512i test_mm512_maskz_lzcnt_epi64(__mmask8 __U, __m512i __A) { |
72 | 100 | // CHECK-LABEL: test_mm512_maskz_lzcnt_epi64 |
73 | | - // CHECK: call {{.*}}<8 x i64> @llvm.ctlz.v8i64(<8 x i64> %{{.*}}, i1 false) |
| 101 | + // CHECK: call {{.*}}<8 x i64> @llvm.ctlz.v8i64(<8 x i64> %{{.*}}, i1 true) |
| 102 | + // CHECK: [[ISZERO:%.+]] = icmp eq <8 x i64> %{{.*}}, zeroinitializer |
| 103 | + // CHECK: select <8 x i1> [[ISZERO]], <8 x i64> %{{.*}}, <8 x i64> %{{.*}} |
74 | 104 | // CHECK: select <8 x i1> %{{.*}}, <8 x i64> %{{.*}}, <8 x i64> %{{.*}} |
75 | 105 | return _mm512_maskz_lzcnt_epi64(__U,__A); |
76 | 106 | } |
77 | 107 |
|
| 108 | +TEST_CONSTEXPR(match_v8di(_mm512_maskz_lzcnt_epi64(/*0101 0111=*/0x57, (__m512i)(__v8di){1, 2, 4, 8, 16, 32, 64, 128}), 63, 62, 61, 0, 59, 0, 57, 0)); |
| 109 | + |
78 | 110 | __m512i test_mm512_broadcastmb_epi64(__m512i a, __m512i b) { |
79 | 111 | // CHECK-LABEL: test_mm512_broadcastmb_epi64 |
80 | 112 | // CHECK: icmp eq <8 x i64> %{{.*}}, %{{.*}} |
|
0 commit comments