287 lines · c
1// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512vbmi -target-feature +avx512vl -target-feature +avx512bw -emit-llvm -o - -Wall -Werror | FileCheck %s2// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +avx512vbmi -target-feature +avx512vl -target-feature +avx512bw -emit-llvm -o - -Wall -Werror | FileCheck %s3// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512vbmi -target-feature +avx512vl -target-feature +avx512bw -emit-llvm -o - -Wall -Werror | FileCheck %s4// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +avx512vbmi -target-feature +avx512vl -target-feature +avx512bw -emit-llvm -o - -Wall -Werror | FileCheck %s5 6// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512vbmi -target-feature +avx512vl -target-feature +avx512bw -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s7// RUN: %clang_cc1 -x c -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +avx512vbmi -target-feature +avx512vl -target-feature +avx512bw -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s8// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +avx512vbmi -target-feature +avx512vl -target-feature +avx512bw -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s9// RUN: %clang_cc1 -x c++ -flax-vector-conversions=none -ffreestanding %s -triple=i386-apple-darwin -target-feature +avx512vbmi -target-feature +avx512vl -target-feature +avx512bw -emit-llvm -o - -Wall -Werror -fexperimental-new-constant-interpreter | FileCheck %s10 11 12#include <immintrin.h>13#include "builtin_test_helpers.h"14 15__m128i test_mm_permutexvar_epi8(__m128i __A, __m128i __B) {16 // CHECK-LABEL: test_mm_permutexvar_epi817 // CHECK: call <16 x i8> @llvm.x86.avx512.permvar.qi.128(<16 x i8> %{{.*}}, <16 x i8> %{{.*}})18 return _mm_permutexvar_epi8(__A, __B); 19}20 21__m128i test_mm_maskz_permutexvar_epi8(__mmask16 __M, __m128i __A, __m128i __B) {22 // CHECK-LABEL: test_mm_maskz_permutexvar_epi823 // CHECK: call <16 x i8> @llvm.x86.avx512.permvar.qi.128(<16 x i8> %{{.*}}, <16 x i8> %{{.*}})24 // CHECK: select <16 x i1> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}}25 return _mm_maskz_permutexvar_epi8(__M, __A, __B); 26}27 28__m128i test_mm_mask_permutexvar_epi8(__m128i __W, __mmask16 __M, __m128i __A, __m128i __B) {29 // CHECK-LABEL: test_mm_mask_permutexvar_epi830 // CHECK: call <16 x i8> @llvm.x86.avx512.permvar.qi.128(<16 x i8> %{{.*}}, <16 x i8> %{{.*}})31 // CHECK: select <16 x i1> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}}32 return _mm_mask_permutexvar_epi8(__W, __M, __A, __B); 33}34 35__m256i test_mm256_permutexvar_epi8(__m256i __A, __m256i __B) {36 // CHECK-LABEL: test_mm256_permutexvar_epi837 // CHECK: call <32 x i8> @llvm.x86.avx512.permvar.qi.256(<32 x i8> %{{.*}}, <32 x i8> %{{.*}})38 return _mm256_permutexvar_epi8(__A, __B); 39}40 41__m256i test_mm256_maskz_permutexvar_epi8(__mmask32 __M, __m256i __A, __m256i __B) {42 // CHECK-LABEL: test_mm256_maskz_permutexvar_epi843 // CHECK: call <32 x i8> @llvm.x86.avx512.permvar.qi.256(<32 x i8> %{{.*}}, <32 x i8> %{{.*}})44 // CHECK: select <32 x i1> %{{.*}}, <32 x i8> %{{.*}}, <32 x i8> %{{.*}}45 return _mm256_maskz_permutexvar_epi8(__M, __A, __B); 46}47 48__m256i test_mm256_mask_permutexvar_epi8(__m256i __W, __mmask32 __M, __m256i __A, __m256i __B) {49 // CHECK-LABEL: test_mm256_mask_permutexvar_epi850 // CHECK: call <32 x i8> @llvm.x86.avx512.permvar.qi.256(<32 x i8> %{{.*}}, <32 x i8> %{{.*}})51 // CHECK: select <32 x i1> %{{.*}}, <32 x i8> %{{.*}}, <32 x i8> %{{.*}}52 return _mm256_mask_permutexvar_epi8(__W, __M, __A, __B); 53}54 55__m128i test_mm_mask2_permutex2var_epi8(__m128i __A, __m128i __I, __mmask16 __U, __m128i __B) {56 // CHECK-LABEL: test_mm_mask2_permutex2var_epi857 // CHECK: call <16 x i8> @llvm.x86.avx512.vpermi2var.qi.128(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}})58 // CHECK: select <16 x i1> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}}59 return _mm_mask2_permutex2var_epi8(__A, __I, __U, __B); 60}61 62__m256i test_mm256_mask2_permutex2var_epi8(__m256i __A, __m256i __I, __mmask32 __U, __m256i __B) {63 // CHECK-LABEL: test_mm256_mask2_permutex2var_epi864 // CHECK: call <32 x i8> @llvm.x86.avx512.vpermi2var.qi.256(<32 x i8> %{{.*}}, <32 x i8> %{{.*}}, <32 x i8> %{{.*}})65 // CHECK: select <32 x i1> %{{.*}}, <32 x i8> %{{.*}}, <32 x i8> %{{.*}}66 return _mm256_mask2_permutex2var_epi8(__A, __I, __U, __B); 67}68 69__m128i test_mm_permutex2var_epi8(__m128i __A, __m128i __I, __m128i __B) {70 // CHECK-LABEL: test_mm_permutex2var_epi871 // CHECK: call <16 x i8> @llvm.x86.avx512.vpermi2var.qi.128(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}})72 return _mm_permutex2var_epi8(__A, __I, __B); 73}74 75__m128i test_mm_mask_permutex2var_epi8(__m128i __A, __mmask16 __U, __m128i __I, __m128i __B) {76 // CHECK-LABEL: test_mm_mask_permutex2var_epi877 // CHECK: call <16 x i8> @llvm.x86.avx512.vpermi2var.qi.128(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}})78 // CHECK: select <16 x i1> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}}79 return _mm_mask_permutex2var_epi8(__A, __U, __I, __B); 80}81 82__m128i test_mm_maskz_permutex2var_epi8(__mmask16 __U, __m128i __A, __m128i __I, __m128i __B) {83 // CHECK-LABEL: test_mm_maskz_permutex2var_epi884 // CHECK: call <16 x i8> @llvm.x86.avx512.vpermi2var.qi.128(<16 x i8> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}})85 // CHECK: select <16 x i1> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}}86 return _mm_maskz_permutex2var_epi8(__U, __A, __I, __B);87}88 89TEST_CONSTEXPR(match_v16qu(90 _mm_permutex2var_epi8((__m128i)(__v16qu){1, 2, 3, 4, 5, 6, 7, 8,91 9, 10, 11, 12, 13, 14, 15, 16},92 (__m128i)(__v16qu){0, 16, 1, 17, 2, 18, 3, 19,93 4, 20, 5, 21, 6, 22, 7, 23},94 (__m128i)(__v16qu){101, 102, 103, 104, 105, 106, 107, 108,95 109, 110, 111, 112, 113, 114, 115, 116}),96 1, 101, 2, 102, 3, 103, 4, 104,97 5, 105, 6, 106, 7, 107, 8, 108));98TEST_CONSTEXPR(match_v16qu(99 _mm_mask_permutex2var_epi8((__m128i)(__v16qu){200, 201, 202, 203, 204, 205, 206, 207,100 208, 209, 210, 211, 212, 213, 214, 215},101 0xAAAA,102 (__m128i)(__v16qu){0, 16, 1, 17, 2, 18, 3, 19,103 4, 20, 5, 21, 6, 22, 7, 23},104 (__m128i)(__v16qu){101, 102, 103, 104, 105, 106, 107, 108,105 109, 110, 111, 112, 113, 114, 115, 116}),106 200, 101, 202, 102, 204, 103, 206, 104,107 208, 105, 210, 106, 212, 107, 214, 108));108 109__m256i test_mm256_permutex2var_epi8(__m256i __A, __m256i __I, __m256i __B) {110 // CHECK-LABEL: test_mm256_permutex2var_epi8111 // CHECK: call <32 x i8> @llvm.x86.avx512.vpermi2var.qi.256(<32 x i8> %{{.*}}, <32 x i8> %{{.*}}, <32 x i8> %{{.*}})112 return _mm256_permutex2var_epi8(__A, __I, __B); 113}114 115__m256i test_mm256_mask_permutex2var_epi8(__m256i __A, __mmask32 __U, __m256i __I, __m256i __B) {116 // CHECK-LABEL: test_mm256_mask_permutex2var_epi8117 // CHECK: call <32 x i8> @llvm.x86.avx512.vpermi2var.qi.256(<32 x i8> %{{.*}}, <32 x i8> %{{.*}}, <32 x i8> %{{.*}})118 // CHECK: select <32 x i1> %{{.*}}, <32 x i8> %{{.*}}, <32 x i8> %{{.*}}119 return _mm256_mask_permutex2var_epi8(__A, __U, __I, __B); 120}121 122__m256i test_mm256_maskz_permutex2var_epi8(__mmask32 __U, __m256i __A, __m256i __I, __m256i __B) {123 // CHECK-LABEL: test_mm256_maskz_permutex2var_epi8124 // CHECK: call <32 x i8> @llvm.x86.avx512.vpermi2var.qi.256(<32 x i8> %{{.*}}, <32 x i8> %{{.*}}, <32 x i8> %{{.*}})125 // CHECK: select <32 x i1> %{{.*}}, <32 x i8> %{{.*}}, <32 x i8> %{{.*}}126 return _mm256_maskz_permutex2var_epi8(__U, __A, __I, __B);127}128 129TEST_CONSTEXPR(match_v32qu(130 _mm256_permutex2var_epi8((__m256i)(__v32qu){1, 2, 3, 4, 5, 6, 7, 8,131 9, 10, 11, 12, 13, 14, 15, 16,132 17, 18, 19, 20, 21, 22, 23, 24,133 25, 26, 27, 28, 29, 30, 31, 32},134 (__m256i)(__v32qu){0, 32, 1, 33, 2, 34, 3, 35,135 4, 36, 5, 37, 6, 38, 7, 39,136 8, 40, 9, 41, 10, 42, 11, 43,137 12, 44, 13, 45, 14, 46, 15, 47},138 (__m256i)(__v32qu){101, 102, 103, 104, 105, 106, 107, 108,139 109, 110, 111, 112, 113, 114, 115, 116,140 117, 118, 119, 120, 121, 122, 123, 124,141 125, 126, 127, 128, 129, 130, 131, 132}),142 1, 101, 2, 102, 3, 103, 4, 104,143 5, 105, 6, 106, 7, 107, 8, 108,144 9, 109, 10, 110, 11, 111, 12, 112,145 13, 113, 14, 114, 15, 115, 16, 116));146TEST_CONSTEXPR(match_v32qu(147 _mm256_mask_permutex2var_epi8((__m256i)(__v32qu){200, 201, 202, 203, 204, 205, 206, 207,148 208, 209, 210, 211, 212, 213, 214, 215,149 216, 217, 218, 219, 220, 221, 222, 223,150 224, 225, 226, 227, 228, 229, 230, 231},151 0xAAAAAAAA,152 (__m256i)(__v32qu){0, 32, 1, 33, 2, 34, 3, 35,153 4, 36, 5, 37, 6, 38, 7, 39,154 8, 40, 9, 41, 10, 42, 11, 43,155 12, 44, 13, 45, 14, 46, 15, 47},156 (__m256i)(__v32qu){101, 102, 103, 104, 105, 106, 107, 108,157 109, 110, 111, 112, 113, 114, 115, 116,158 117, 118, 119, 120, 121, 122, 123, 124,159 125, 126, 127, 128, 129, 130, 131, 132}),160 200, 101, 202, 102, 204, 103, 206, 104,161 208, 105, 210, 106, 212, 107, 214, 108,162 216, 109, 218, 110, 220, 111, 222, 112,163 224, 113, 226, 114, 228, 115, 230, 116));164 165__m128i test_mm_multishift_epi64_epi8(__m128i __X, __m128i __Y) {166 // CHECK-LABEL: test_mm_multishift_epi64_epi8167 // CHECK: call <16 x i8> @llvm.x86.avx512.pmultishift.qb.128(<16 x i8> %{{.*}}, <16 x i8> %{{.*}})168 return _mm_multishift_epi64_epi8(__X, __Y);169}170 171TEST_CONSTEXPR(match_v16qu(172 _mm_multishift_epi64_epi8(173 (__m128i)(__v16qu){0, 8, 16, 24, 32, 40, 48, 56,174 0, 8, 16, 24, 32, 40, 48, 56},175 (__m128i)(__v16qu){0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,176 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18}),177 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,178 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18));179 180__m128i test_mm_mask_multishift_epi64_epi8(__m128i __W, __mmask16 __M, __m128i __X, __m128i __Y) {181 // CHECK-LABEL: test_mm_mask_multishift_epi64_epi8182 // CHECK: call <16 x i8> @llvm.x86.avx512.pmultishift.qb.128(<16 x i8> %{{.*}}, <16 x i8> %{{.*}})183 // CHECK: select <16 x i1> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}}184 return _mm_mask_multishift_epi64_epi8(__W, __M, __X, __Y);185}186 187TEST_CONSTEXPR(match_v16qu(188 _mm_mask_multishift_epi64_epi8(189 (__m128i)(__v16qu){0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,190 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},191 0xAAAA,192 (__m128i)(__v16qu){0, 8, 16, 24, 32, 40, 48, 56,193 0, 8, 16, 24, 32, 40, 48, 56},194 (__m128i)(__v16qu){0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,195 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18}),196 0xFF, 0x02, 0xFF, 0x04, 0xFF, 0x06, 0xFF, 0x08,197 0xFF, 0x12, 0xFF, 0x14, 0xFF, 0x16, 0xFF, 0x18));198 199__m128i test_mm_maskz_multishift_epi64_epi8(__mmask16 __M, __m128i __X, __m128i __Y) {200 // CHECK-LABEL: test_mm_maskz_multishift_epi64_epi8201 // CHECK: call <16 x i8> @llvm.x86.avx512.pmultishift.qb.128(<16 x i8> %{{.*}}, <16 x i8> %{{.*}})202 // CHECK: select <16 x i1> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}}203 return _mm_maskz_multishift_epi64_epi8(__M, __X, __Y);204}205 206TEST_CONSTEXPR(match_v16qu(207 _mm_maskz_multishift_epi64_epi8(208 0x5555,209 (__m128i)(__v16qu){0, 8, 16, 24, 32, 40, 48, 56,210 0, 8, 16, 24, 32, 40, 48, 56},211 (__m128i)(__v16qu){0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,212 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18}),213 0x01, 0, 0x03, 0, 0x05, 0, 0x07, 0,214 0x11, 0, 0x13, 0, 0x15, 0, 0x17, 0));215 216__m256i test_mm256_multishift_epi64_epi8(__m256i __X, __m256i __Y) {217 // CHECK-LABEL: test_mm256_multishift_epi64_epi8218 // CHECK: call <32 x i8> @llvm.x86.avx512.pmultishift.qb.256(<32 x i8> %{{.*}}, <32 x i8> %{{.*}})219 return _mm256_multishift_epi64_epi8(__X, __Y);220}221 222TEST_CONSTEXPR(match_v32qu(223 _mm256_multishift_epi64_epi8(224 (__m256i)(__v32qu){0, 8, 16, 24, 32, 40, 48, 56,225 0, 8, 16, 24, 32, 40, 48, 56,226 0, 8, 16, 24, 32, 40, 48, 56,227 0, 8, 16, 24, 32, 40, 48, 56},228 (__m256i)(__v32qu){0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,229 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18,230 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28,231 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38}),232 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,233 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18,234 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28,235 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38));236 237__m256i test_mm256_mask_multishift_epi64_epi8(__m256i __W, __mmask32 __M, __m256i __X, __m256i __Y) {238 // CHECK-LABEL: test_mm256_mask_multishift_epi64_epi8239 // CHECK: call <32 x i8> @llvm.x86.avx512.pmultishift.qb.256(<32 x i8> %{{.*}}, <32 x i8> %{{.*}})240 // CHECK: select <32 x i1> %{{.*}}, <32 x i8> %{{.*}}, <32 x i8> %{{.*}}241 return _mm256_mask_multishift_epi64_epi8(__W, __M, __X, __Y);242}243 244TEST_CONSTEXPR(match_v32qu(245 _mm256_mask_multishift_epi64_epi8(246 (__m256i)(__v32qu){0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,247 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,248 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,249 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},250 0xAAAAAAAA,251 (__m256i)(__v32qu){0, 8, 16, 24, 32, 40, 48, 56,252 0, 8, 16, 24, 32, 40, 48, 56,253 0, 8, 16, 24, 32, 40, 48, 56,254 0, 8, 16, 24, 32, 40, 48, 56},255 (__m256i)(__v32qu){0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,256 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18,257 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28,258 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38}),259 0xFF, 0x02, 0xFF, 0x04, 0xFF, 0x06, 0xFF, 0x08,260 0xFF, 0x12, 0xFF, 0x14, 0xFF, 0x16, 0xFF, 0x18,261 0xFF, 0x22, 0xFF, 0x24, 0xFF, 0x26, 0xFF, 0x28,262 0xFF, 0x32, 0xFF, 0x34, 0xFF, 0x36, 0xFF, 0x38));263 264__m256i test_mm256_maskz_multishift_epi64_epi8(__mmask32 __M, __m256i __X, __m256i __Y) {265 // CHECK-LABEL: test_mm256_maskz_multishift_epi64_epi8266 // CHECK: call <32 x i8> @llvm.x86.avx512.pmultishift.qb.256(<32 x i8> %{{.*}}, <32 x i8> %{{.*}})267 // CHECK: select <32 x i1> %{{.*}}, <32 x i8> %{{.*}}, <32 x i8> %{{.*}}268 return _mm256_maskz_multishift_epi64_epi8(__M, __X, __Y);269}270 271TEST_CONSTEXPR(match_v32qu(272 _mm256_maskz_multishift_epi64_epi8(273 0x55555555,274 (__m256i)(__v32qu){0, 8, 16, 24, 32, 40, 48, 56,275 0, 8, 16, 24, 32, 40, 48, 56,276 0, 8, 16, 24, 32, 40, 48, 56,277 0, 8, 16, 24, 32, 40, 48, 56},278 (__m256i)(__v32qu){0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,279 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18,280 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28,281 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38}),282 0x01, 0, 0x03, 0, 0x05, 0, 0x07, 0,283 0x11, 0, 0x13, 0, 0x15, 0, 0x17, 0,284 0x21, 0, 0x23, 0, 0x25, 0, 0x27, 0,285 0x31, 0, 0x33, 0, 0x35, 0, 0x37, 0));286 287