brintos

brintos / llvm-project-archived public Read only

0
0
Text · 16.6 KiB · 76a11c3 Raw
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