1 // RUN: %clang_cc1 %s -triple=x86_64-apple-darwin -target-feature +avx512vl -target-feature +avx512cd -emit-llvm -o - -Werror | FileCheck %s 2 3 // Don't include mm_malloc.h, it's system specific. 4 #define __MM_MALLOC_H 5 6 #include <immintrin.h> 7 8 __m128i test_mm_broadcastmb_epi64(__mmask8 __A) { 9 // CHECK-LABEL: @test_mm_broadcastmb_epi64 10 // CHECK: @llvm.x86.avx512.broadcastmb.128 11 return _mm_broadcastmb_epi64(__A); 12 } 13 14 __m256i test_mm256_broadcastmb_epi64(__mmask8 __A) { 15 // CHECK-LABEL: @test_mm256_broadcastmb_epi64 16 // CHECK: @llvm.x86.avx512.broadcastmb.256 17 return _mm256_broadcastmb_epi64(__A); 18 } 19 20 __m128i test_mm_broadcastmw_epi32(__mmask16 __A) { 21 // CHECK-LABEL: @test_mm_broadcastmw_epi32 22 // CHECK: @llvm.x86.avx512.broadcastmw.128 23 return _mm_broadcastmw_epi32(__A); 24 } 25 26 __m256i test_mm256_broadcastmw_epi32(__mmask16 __A) { 27 // CHECK-LABEL: @test_mm256_broadcastmw_epi32 28 // CHECK: @llvm.x86.avx512.broadcastmw.256 29 return _mm256_broadcastmw_epi32(__A); 30 } 31 32 __m128i test_mm_conflict_epi64(__m128i __A) { 33 // CHECK-LABEL: @test_mm_conflict_epi64 34 // CHECK: @llvm.x86.avx512.mask.conflict.q.128 35 return _mm_conflict_epi64(__A); 36 } 37 38 __m128i test_mm_mask_conflict_epi64(__m128i __W, __mmask8 __U, __m128i __A) { 39 // CHECK-LABEL: @test_mm_mask_conflict_epi64 40 // CHECK: @llvm.x86.avx512.mask.conflict.q.128 41 return _mm_mask_conflict_epi64(__W, __U, __A); 42 } 43 44 __m128i test_mm_maskz_conflict_epi64(__mmask8 __U, __m128i __A) { 45 // CHECK-LABEL: @test_mm_maskz_conflict_epi64 46 // CHECK: @llvm.x86.avx512.mask.conflict.q.128 47 return _mm_maskz_conflict_epi64(__U, __A); 48 } 49 50 __m256i test_mm256_conflict_epi64(__m256i __A) { 51 // CHECK-LABEL: @test_mm256_conflict_epi64 52 // CHECK: @llvm.x86.avx512.mask.conflict.q.256 53 return _mm256_conflict_epi64(__A); 54 } 55 56 __m256i test_mm256_mask_conflict_epi64(__m256i __W, __mmask8 __U, __m256i __A) { 57 // CHECK-LABEL: @test_mm256_mask_conflict_epi64 58 // CHECK: @llvm.x86.avx512.mask.conflict.q.256 59 return _mm256_mask_conflict_epi64(__W, __U, __A); 60 } 61 62 __m256i test_mm256_maskz_conflict_epi64(__mmask8 __U, __m256i __A) { 63 // CHECK-LABEL: @test_mm256_maskz_conflict_epi64 64 // CHECK: @llvm.x86.avx512.mask.conflict.q.256 65 return _mm256_maskz_conflict_epi64(__U, __A); 66 } 67 68 __m128i test_mm_conflict_epi32(__m128i __A) { 69 // CHECK-LABEL: @test_mm_conflict_epi32 70 // CHECK: @llvm.x86.avx512.mask.conflict.d.128 71 return _mm_conflict_epi32(__A); 72 } 73 74 __m128i test_mm_mask_conflict_epi32(__m128i __W, __mmask8 __U, __m128i __A) { 75 // CHECK-LABEL: @test_mm_mask_conflict_epi32 76 // CHECK: @llvm.x86.avx512.mask.conflict.d.128 77 return _mm_mask_conflict_epi32(__W, __U, __A); 78 } 79 80 __m128i test_mm_maskz_conflict_epi32(__mmask8 __U, __m128i __A) { 81 // CHECK-LABEL: @test_mm_maskz_conflict_epi32 82 // CHECK: @llvm.x86.avx512.mask.conflict.d.128 83 return _mm_maskz_conflict_epi32(__U, __A); 84 } 85 86 __m256i test_mm256_conflict_epi32(__m256i __A) { 87 // CHECK-LABEL: @test_mm256_conflict_epi32 88 // CHECK: @llvm.x86.avx512.mask.conflict.d.256 89 return _mm256_conflict_epi32(__A); 90 } 91 92 __m256i test_mm256_mask_conflict_epi32(__m256i __W, __mmask8 __U, __m256i __A) { 93 // CHECK-LABEL: @test_mm256_mask_conflict_epi32 94 // CHECK: @llvm.x86.avx512.mask.conflict.d.256 95 return _mm256_mask_conflict_epi32(__W, __U, __A); 96 } 97 98 __m256i test_mm256_maskz_conflict_epi32(__mmask8 __U, __m256i __A) { 99 // CHECK-LABEL: @test_mm256_maskz_conflict_epi32 100 // CHECK: @llvm.x86.avx512.mask.conflict.d.256 101 return _mm256_maskz_conflict_epi32(__U, __A); 102 } 103 104 __m128i test_mm_lzcnt_epi32(__m128i __A) { 105 // CHECK-LABEL: @test_mm_lzcnt_epi32 106 // CHECK: call <4 x i32> @llvm.ctlz.v4i32(<4 x i32> %{{.*}}, i1 false) 107 return _mm_lzcnt_epi32(__A); 108 } 109 110 __m128i test_mm_mask_lzcnt_epi32(__m128i __W, __mmask8 __U, __m128i __A) { 111 // CHECK-LABEL: @test_mm_mask_lzcnt_epi32 112 // CHECK: call <4 x i32> @llvm.ctlz.v4i32(<4 x i32> %{{.*}}, i1 false) 113 // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} 114 return _mm_mask_lzcnt_epi32(__W, __U, __A); 115 } 116 117 __m128i test_mm_maskz_lzcnt_epi32(__mmask8 __U, __m128i __A) { 118 // CHECK-LABEL: @test_mm_maskz_lzcnt_epi32 119 // CHECK: call <4 x i32> @llvm.ctlz.v4i32(<4 x i32> %{{.*}}, i1 false) 120 // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}} 121 return _mm_maskz_lzcnt_epi32(__U, __A); 122 } 123 124 __m256i test_mm256_lzcnt_epi32(__m256i __A) { 125 // CHECK-LABEL: @test_mm256_lzcnt_epi32 126 // CHECK: call <8 x i32> @llvm.ctlz.v8i32(<8 x i32> %{{.*}}, i1 false) 127 return _mm256_lzcnt_epi32(__A); 128 } 129 130 __m256i test_mm256_mask_lzcnt_epi32(__m256i __W, __mmask8 __U, __m256i __A) { 131 // CHECK-LABEL: @test_mm256_mask_lzcnt_epi32 132 // CHECK: call <8 x i32> @llvm.ctlz.v8i32(<8 x i32> %{{.*}}, i1 false) 133 // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} 134 return _mm256_mask_lzcnt_epi32(__W, __U, __A); 135 } 136 137 __m256i test_mm256_maskz_lzcnt_epi32(__mmask8 __U, __m256i __A) { 138 // CHECK-LABEL: @test_mm256_maskz_lzcnt_epi32 139 // CHECK: call <8 x i32> @llvm.ctlz.v8i32(<8 x i32> %{{.*}}, i1 false) 140 // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}} 141 return _mm256_maskz_lzcnt_epi32(__U, __A); 142 } 143 144 __m128i test_mm_lzcnt_epi64(__m128i __A) { 145 // CHECK-LABEL: @test_mm_lzcnt_epi64 146 // CHECK: call <2 x i64> @llvm.ctlz.v2i64(<2 x i64> %{{.*}}, i1 false) 147 return _mm_lzcnt_epi64(__A); 148 } 149 150 __m128i test_mm_mask_lzcnt_epi64(__m128i __W, __mmask8 __U, __m128i __A) { 151 // CHECK-LABEL: @test_mm_mask_lzcnt_epi64 152 // CHECK: call <2 x i64> @llvm.ctlz.v2i64(<2 x i64> %{{.*}}, i1 false) 153 // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}} 154 return _mm_mask_lzcnt_epi64(__W, __U, __A); 155 } 156 157 __m128i test_mm_maskz_lzcnt_epi64(__mmask8 __U, __m128i __A) { 158 // CHECK-LABEL: @test_mm_maskz_lzcnt_epi64 159 // CHECK: call <2 x i64> @llvm.ctlz.v2i64(<2 x i64> %{{.*}}, i1 false) 160 // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}} 161 return _mm_maskz_lzcnt_epi64(__U, __A); 162 } 163 164 __m256i test_mm256_lzcnt_epi64(__m256i __A) { 165 // CHECK-LABEL: @test_mm256_lzcnt_epi64 166 // CHECK: call <4 x i64> @llvm.ctlz.v4i64(<4 x i64> %{{.*}}, i1 false) 167 return _mm256_lzcnt_epi64(__A); 168 } 169 170 __m256i test_mm256_mask_lzcnt_epi64(__m256i __W, __mmask8 __U, __m256i __A) { 171 // CHECK-LABEL: @test_mm256_mask_lzcnt_epi64 172 // CHECK: call <4 x i64> @llvm.ctlz.v4i64(<4 x i64> %{{.*}}, i1 false) 173 // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} 174 return _mm256_mask_lzcnt_epi64(__W, __U, __A); 175 } 176 177 __m256i test_mm256_maskz_lzcnt_epi64(__mmask8 __U, __m256i __A) { 178 // CHECK-LABEL: @test_mm256_maskz_lzcnt_epi64 179 // CHECK: call <4 x i64> @llvm.ctlz.v4i64(<4 x i64> %{{.*}}, i1 false) 180 // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}} 181 return _mm256_maskz_lzcnt_epi64(__U, __A); 182 } 183