1 // RUN: %clang_cc1 -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 %s
2 
3 
4 #include <immintrin.h>
5 
test_mm_permutexvar_epi8(__m128i __A,__m128i __B)6 __m128i test_mm_permutexvar_epi8(__m128i __A, __m128i __B) {
7   // CHECK-LABEL: @test_mm_permutexvar_epi8
8   // CHECK: @llvm.x86.avx512.permvar.qi.128
9   return _mm_permutexvar_epi8(__A, __B);
10 }
11 
test_mm_maskz_permutexvar_epi8(__mmask16 __M,__m128i __A,__m128i __B)12 __m128i test_mm_maskz_permutexvar_epi8(__mmask16 __M, __m128i __A, __m128i __B) {
13   // CHECK-LABEL: @test_mm_maskz_permutexvar_epi8
14   // CHECK: @llvm.x86.avx512.permvar.qi.128
15   // CHECK: select <16 x i1> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}}
16   return _mm_maskz_permutexvar_epi8(__M, __A, __B);
17 }
18 
test_mm_mask_permutexvar_epi8(__m128i __W,__mmask16 __M,__m128i __A,__m128i __B)19 __m128i test_mm_mask_permutexvar_epi8(__m128i __W, __mmask16 __M, __m128i __A, __m128i __B) {
20   // CHECK-LABEL: @test_mm_mask_permutexvar_epi8
21   // CHECK: @llvm.x86.avx512.permvar.qi.128
22   // CHECK: select <16 x i1> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}}
23   return _mm_mask_permutexvar_epi8(__W, __M, __A, __B);
24 }
25 
test_mm256_permutexvar_epi8(__m256i __A,__m256i __B)26 __m256i test_mm256_permutexvar_epi8(__m256i __A, __m256i __B) {
27   // CHECK-LABEL: @test_mm256_permutexvar_epi8
28   // CHECK: @llvm.x86.avx512.permvar.qi.256
29   return _mm256_permutexvar_epi8(__A, __B);
30 }
31 
test_mm256_maskz_permutexvar_epi8(__mmask32 __M,__m256i __A,__m256i __B)32 __m256i test_mm256_maskz_permutexvar_epi8(__mmask32 __M, __m256i __A, __m256i __B) {
33   // CHECK-LABEL: @test_mm256_maskz_permutexvar_epi8
34   // CHECK: @llvm.x86.avx512.permvar.qi.256
35   // CHECK: select <32 x i1> %{{.*}}, <32 x i8> %{{.*}}, <32 x i8> %{{.*}}
36   return _mm256_maskz_permutexvar_epi8(__M, __A, __B);
37 }
38 
test_mm256_mask_permutexvar_epi8(__m256i __W,__mmask32 __M,__m256i __A,__m256i __B)39 __m256i test_mm256_mask_permutexvar_epi8(__m256i __W, __mmask32 __M, __m256i __A, __m256i __B) {
40   // CHECK-LABEL: @test_mm256_mask_permutexvar_epi8
41   // CHECK: @llvm.x86.avx512.permvar.qi.256
42   // CHECK: select <32 x i1> %{{.*}}, <32 x i8> %{{.*}}, <32 x i8> %{{.*}}
43   return _mm256_mask_permutexvar_epi8(__W, __M, __A, __B);
44 }
45 
test_mm_mask2_permutex2var_epi8(__m128i __A,__m128i __I,__mmask16 __U,__m128i __B)46 __m128i test_mm_mask2_permutex2var_epi8(__m128i __A, __m128i __I, __mmask16 __U, __m128i __B) {
47   // CHECK-LABEL: @test_mm_mask2_permutex2var_epi8
48   // CHECK: @llvm.x86.avx512.vpermi2var.qi.128
49   // CHECK: select <16 x i1> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}}
50   return _mm_mask2_permutex2var_epi8(__A, __I, __U, __B);
51 }
52 
test_mm256_mask2_permutex2var_epi8(__m256i __A,__m256i __I,__mmask32 __U,__m256i __B)53 __m256i test_mm256_mask2_permutex2var_epi8(__m256i __A, __m256i __I, __mmask32 __U, __m256i __B) {
54   // CHECK-LABEL: @test_mm256_mask2_permutex2var_epi8
55   // CHECK: @llvm.x86.avx512.vpermi2var.qi.256
56   // CHECK: select <32 x i1> %{{.*}}, <32 x i8> %{{.*}}, <32 x i8> %{{.*}}
57   return _mm256_mask2_permutex2var_epi8(__A, __I, __U, __B);
58 }
59 
test_mm_permutex2var_epi8(__m128i __A,__m128i __I,__m128i __B)60 __m128i test_mm_permutex2var_epi8(__m128i __A, __m128i __I, __m128i __B) {
61   // CHECK-LABEL: @test_mm_permutex2var_epi8
62   // CHECK: @llvm.x86.avx512.vpermi2var.qi.128
63   return _mm_permutex2var_epi8(__A, __I, __B);
64 }
65 
test_mm_mask_permutex2var_epi8(__m128i __A,__mmask16 __U,__m128i __I,__m128i __B)66 __m128i test_mm_mask_permutex2var_epi8(__m128i __A, __mmask16 __U, __m128i __I, __m128i __B) {
67   // CHECK-LABEL: @test_mm_mask_permutex2var_epi8
68   // CHECK: @llvm.x86.avx512.vpermi2var.qi.128
69   // CHECK: select <16 x i1> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}}
70   return _mm_mask_permutex2var_epi8(__A, __U, __I, __B);
71 }
72 
test_mm_maskz_permutex2var_epi8(__mmask16 __U,__m128i __A,__m128i __I,__m128i __B)73 __m128i test_mm_maskz_permutex2var_epi8(__mmask16 __U, __m128i __A, __m128i __I, __m128i __B) {
74   // CHECK-LABEL: @test_mm_maskz_permutex2var_epi8
75   // CHECK: @llvm.x86.avx512.vpermi2var.qi.128
76   // CHECK: select <16 x i1> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}}
77   return _mm_maskz_permutex2var_epi8(__U, __A, __I, __B);
78 }
79 
test_mm256_permutex2var_epi8(__m256i __A,__m256i __I,__m256i __B)80 __m256i test_mm256_permutex2var_epi8(__m256i __A, __m256i __I, __m256i __B) {
81   // CHECK-LABEL: @test_mm256_permutex2var_epi8
82   // CHECK: @llvm.x86.avx512.vpermi2var.qi.256
83   return _mm256_permutex2var_epi8(__A, __I, __B);
84 }
85 
test_mm256_mask_permutex2var_epi8(__m256i __A,__mmask32 __U,__m256i __I,__m256i __B)86 __m256i test_mm256_mask_permutex2var_epi8(__m256i __A, __mmask32 __U, __m256i __I, __m256i __B) {
87   // CHECK-LABEL: @test_mm256_mask_permutex2var_epi8
88   // CHECK: @llvm.x86.avx512.vpermi2var.qi.256
89   // CHECK: select <32 x i1> %{{.*}}, <32 x i8> %{{.*}}, <32 x i8> %{{.*}}
90   return _mm256_mask_permutex2var_epi8(__A, __U, __I, __B);
91 }
92 
test_mm256_maskz_permutex2var_epi8(__mmask32 __U,__m256i __A,__m256i __I,__m256i __B)93 __m256i test_mm256_maskz_permutex2var_epi8(__mmask32 __U, __m256i __A, __m256i __I, __m256i __B) {
94   // CHECK-LABEL: @test_mm256_maskz_permutex2var_epi8
95   // CHECK: @llvm.x86.avx512.vpermi2var.qi.256
96   // CHECK: select <32 x i1> %{{.*}}, <32 x i8> %{{.*}}, <32 x i8> %{{.*}}
97   return _mm256_maskz_permutex2var_epi8(__U, __A, __I, __B);
98 }
99 
test_mm_mask_multishift_epi64_epi8(__m128i __W,__mmask16 __M,__m128i __X,__m128i __Y)100 __m128i test_mm_mask_multishift_epi64_epi8(__m128i __W, __mmask16 __M, __m128i __X, __m128i __Y) {
101   // CHECK-LABEL: @test_mm_mask_multishift_epi64_epi8
102   // CHECK: @llvm.x86.avx512.pmultishift.qb.128
103   // CHECK: select <16 x i1> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}}
104   return _mm_mask_multishift_epi64_epi8(__W, __M, __X, __Y);
105 }
106 
test_mm_maskz_multishift_epi64_epi8(__mmask16 __M,__m128i __X,__m128i __Y)107 __m128i test_mm_maskz_multishift_epi64_epi8(__mmask16 __M, __m128i __X, __m128i __Y) {
108   // CHECK-LABEL: @test_mm_maskz_multishift_epi64_epi8
109   // CHECK: @llvm.x86.avx512.pmultishift.qb.128
110   // CHECK: select <16 x i1> %{{.*}}, <16 x i8> %{{.*}}, <16 x i8> %{{.*}}
111   return _mm_maskz_multishift_epi64_epi8(__M, __X, __Y);
112 }
113 
test_mm_multishift_epi64_epi8(__m128i __X,__m128i __Y)114 __m128i test_mm_multishift_epi64_epi8(__m128i __X, __m128i __Y) {
115   // CHECK-LABEL: @test_mm_multishift_epi64_epi8
116   // CHECK: @llvm.x86.avx512.pmultishift.qb.128
117   return _mm_multishift_epi64_epi8(__X, __Y);
118 }
119 
test_mm256_mask_multishift_epi64_epi8(__m256i __W,__mmask32 __M,__m256i __X,__m256i __Y)120 __m256i test_mm256_mask_multishift_epi64_epi8(__m256i __W, __mmask32 __M, __m256i __X, __m256i __Y) {
121   // CHECK-LABEL: @test_mm256_mask_multishift_epi64_epi8
122   // CHECK: @llvm.x86.avx512.pmultishift.qb.256
123   // CHECK: select <32 x i1> %{{.*}}, <32 x i8> %{{.*}}, <32 x i8> %{{.*}}
124   return _mm256_mask_multishift_epi64_epi8(__W, __M, __X, __Y);
125 }
126 
test_mm256_maskz_multishift_epi64_epi8(__mmask32 __M,__m256i __X,__m256i __Y)127 __m256i test_mm256_maskz_multishift_epi64_epi8(__mmask32 __M, __m256i __X, __m256i __Y) {
128   // CHECK-LABEL: @test_mm256_maskz_multishift_epi64_epi8
129   // CHECK: @llvm.x86.avx512.pmultishift.qb.256
130   // CHECK: select <32 x i1> %{{.*}}, <32 x i8> %{{.*}}, <32 x i8> %{{.*}}
131   return _mm256_maskz_multishift_epi64_epi8(__M, __X, __Y);
132 }
133 
test_mm256_multishift_epi64_epi8(__m256i __X,__m256i __Y)134 __m256i test_mm256_multishift_epi64_epi8(__m256i __X, __m256i __Y) {
135   // CHECK-LABEL: @test_mm256_multishift_epi64_epi8
136   // CHECK: @llvm.x86.avx512.pmultishift.qb.256
137   return _mm256_multishift_epi64_epi8(__X, __Y);
138 }
139 
140