1 // RUN: %clang_cc1 -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +gfni -emit-llvm -o - | FileCheck %s --check-prefix SSE
2 // RUN: %clang_cc1 -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +gfni -target-feature +avx -emit-llvm -o - | FileCheck %s --check-prefixes SSE,AVX
3 // RUN: %clang_cc1 -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +gfni -target-feature +avx512f -target-feature +avx512vl -emit-llvm -o - | FileCheck %s --check-prefixes SSE,AVX,AVX512
4 // RUN: %clang_cc1 -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +gfni -target-feature +avx512bw -target-feature +avx512vl -emit-llvm -o - | FileCheck %s --check-prefixes SSE,AVX,AVX512,AVX512BW
5
6 #include <immintrin.h>
7
test_mm_gf2p8affineinv_epi64_epi8(__m128i A,__m128i B)8 __m128i test_mm_gf2p8affineinv_epi64_epi8(__m128i A, __m128i B) {
9 // SSE-LABEL: @test_mm_gf2p8affineinv_epi64_epi8
10 // SSE: @llvm.x86.vgf2p8affineinvqb.128
11 return _mm_gf2p8affineinv_epi64_epi8(A, B, 1);
12 }
13
test_mm_gf2p8affine_epi64_epi8(__m128i A,__m128i B)14 __m128i test_mm_gf2p8affine_epi64_epi8(__m128i A, __m128i B) {
15 // SSE-LABEL: @test_mm_gf2p8affine_epi64_epi8
16 // SSE: @llvm.x86.vgf2p8affineqb.128
17 return _mm_gf2p8affine_epi64_epi8(A, B, 1);
18 }
19
test_mm_gf2p8mul_epi8(__m128i A,__m128i B)20 __m128i test_mm_gf2p8mul_epi8(__m128i A, __m128i B) {
21 // SSE-LABEL: @test_mm_gf2p8mul_epi8
22 // SSE: @llvm.x86.vgf2p8mulb.128
23 return _mm_gf2p8mul_epi8(A, B);
24 }
25
26 #ifdef __AVX__
test_mm256_gf2p8affineinv_epi64_epi8(__m256i A,__m256i B)27 __m256i test_mm256_gf2p8affineinv_epi64_epi8(__m256i A, __m256i B) {
28 // AVX-LABEL: @test_mm256_gf2p8affineinv_epi64_epi8
29 // AVX: @llvm.x86.vgf2p8affineinvqb.256
30 return _mm256_gf2p8affineinv_epi64_epi8(A, B, 1);
31 }
32
test_mm256_gf2p8affine_epi64_epi8(__m256i A,__m256i B)33 __m256i test_mm256_gf2p8affine_epi64_epi8(__m256i A, __m256i B) {
34 // AVX-LABEL: @test_mm256_gf2p8affine_epi64_epi8
35 // AVX: @llvm.x86.vgf2p8affineqb.256
36 return _mm256_gf2p8affine_epi64_epi8(A, B, 1);
37 }
38
test_mm256_gf2p8mul_epi8(__m256i A,__m256i B)39 __m256i test_mm256_gf2p8mul_epi8(__m256i A, __m256i B) {
40 // AVX-LABEL: @test_mm256_gf2p8mul_epi8
41 // AVX: @llvm.x86.vgf2p8mulb.256
42 return _mm256_gf2p8mul_epi8(A, B);
43 }
44 #endif // __AVX__
45
46 #ifdef __AVX512F__
test_mm512_gf2p8affineinv_epi64_epi8(__m512i A,__m512i B)47 __m512i test_mm512_gf2p8affineinv_epi64_epi8(__m512i A, __m512i B) {
48 // AVX512-LABEL: @test_mm512_gf2p8affineinv_epi64_epi8
49 // AVX512: @llvm.x86.vgf2p8affineinvqb.512
50 return _mm512_gf2p8affineinv_epi64_epi8(A, B, 1);
51 }
52
test_mm512_gf2p8affine_epi64_epi8(__m512i A,__m512i B)53 __m512i test_mm512_gf2p8affine_epi64_epi8(__m512i A, __m512i B) {
54 // AVX512-LABEL: @test_mm512_gf2p8affine_epi64_epi8
55 // AVX512: @llvm.x86.vgf2p8affineqb.512
56 return _mm512_gf2p8affine_epi64_epi8(A, B, 1);
57 }
58
test_mm512_gf2p8mul_epi8(__m512i A,__m512i B)59 __m512i test_mm512_gf2p8mul_epi8(__m512i A, __m512i B) {
60 // AVX512-LABEL: @test_mm512_gf2p8mul_epi8
61 // AVX512: @llvm.x86.vgf2p8mulb.512
62 return _mm512_gf2p8mul_epi8(A, B);
63 }
64 #endif // __AVX512F__
65
66 #ifdef __AVX512BW__
test_mm512_mask_gf2p8affineinv_epi64_epi8(__m512i S,__mmask64 U,__m512i A,__m512i B)67 __m512i test_mm512_mask_gf2p8affineinv_epi64_epi8(__m512i S, __mmask64 U, __m512i A, __m512i B) {
68 // AVX512BW-LABEL: @test_mm512_mask_gf2p8affineinv_epi64_epi8
69 // AVX512BW: @llvm.x86.vgf2p8affineinvqb.512
70 // AVX512BW: select <64 x i1> %{{[0-9]+}}, <64 x i8> %{{[0-9]+}}, <64 x i8> {{.*}}
71 return _mm512_mask_gf2p8affineinv_epi64_epi8(S, U, A, B, 1);
72 }
73
test_mm512_maskz_gf2p8affineinv_epi64_epi8(__mmask64 U,__m512i A,__m512i B)74 __m512i test_mm512_maskz_gf2p8affineinv_epi64_epi8(__mmask64 U, __m512i A, __m512i B) {
75 // AVX512BW-LABEL: @test_mm512_maskz_gf2p8affineinv_epi64_epi8
76 // AVX512BW: @llvm.x86.vgf2p8affineinvqb.512
77 // AVX512BW: select <64 x i1> %{{[0-9]+}}, <64 x i8> %{{[0-9]+}}, <64 x i8> {{.*}}
78 return _mm512_maskz_gf2p8affineinv_epi64_epi8(U, A, B, 1);
79 }
80
test_mm_mask_gf2p8affineinv_epi64_epi8(__m128i S,__mmask16 U,__m128i A,__m128i B)81 __m128i test_mm_mask_gf2p8affineinv_epi64_epi8(__m128i S, __mmask16 U, __m128i A, __m128i B) {
82 // AVX512BW-LABEL: @test_mm_mask_gf2p8affineinv_epi64_epi8
83 // AVX512BW: @llvm.x86.vgf2p8affineinvqb.128
84 // AVX512BW: select <16 x i1> %{{[0-9]+}}, <16 x i8> %{{[0-9]+}}, <16 x i8> {{.*}}
85 return _mm_mask_gf2p8affineinv_epi64_epi8(S, U, A, B, 1);
86 }
87
test_mm_maskz_gf2p8affineinv_epi64_epi8(__mmask16 U,__m128i A,__m128i B)88 __m128i test_mm_maskz_gf2p8affineinv_epi64_epi8(__mmask16 U, __m128i A, __m128i B) {
89 // AVX512BW-LABEL: @test_mm_maskz_gf2p8affineinv_epi64_epi8
90 // AVX512BW: @llvm.x86.vgf2p8affineinvqb.128
91 // AVX512BW: select <16 x i1> %{{[0-9]+}}, <16 x i8> %{{[0-9]+}}, <16 x i8> {{.*}}
92 return _mm_maskz_gf2p8affineinv_epi64_epi8(U, A, B, 1);
93 }
94
test_mm256_mask_gf2p8affineinv_epi64_epi8(__m256i S,__mmask32 U,__m256i A,__m256i B)95 __m256i test_mm256_mask_gf2p8affineinv_epi64_epi8(__m256i S, __mmask32 U, __m256i A, __m256i B) {
96 // AVX512BW-LABEL: @test_mm256_mask_gf2p8affineinv_epi64_epi8
97 // AVX512BW: @llvm.x86.vgf2p8affineinvqb.256
98 // AVX512BW: select <32 x i1> %{{[0-9]+}}, <32 x i8> %{{[0-9]+}}, <32 x i8> {{.*}}
99 return _mm256_mask_gf2p8affineinv_epi64_epi8(S, U, A, B, 1);
100 }
101
test_mm256_maskz_gf2p8affineinv_epi64_epi8(__mmask32 U,__m256i A,__m256i B)102 __m256i test_mm256_maskz_gf2p8affineinv_epi64_epi8(__mmask32 U, __m256i A, __m256i B) {
103 // AVX512BW-LABEL: @test_mm256_maskz_gf2p8affineinv_epi64_epi8
104 // AVX512BW: @llvm.x86.vgf2p8affineinvqb.256
105 // AVX512BW: select <32 x i1> %{{[0-9]+}}, <32 x i8> %{{[0-9]+}}, <32 x i8> {{.*}}
106 return _mm256_maskz_gf2p8affineinv_epi64_epi8(U, A, B, 1);
107 }
108
test_mm512_mask_gf2p8affine_epi64_epi8(__m512i S,__mmask64 U,__m512i A,__m512i B)109 __m512i test_mm512_mask_gf2p8affine_epi64_epi8(__m512i S, __mmask64 U, __m512i A, __m512i B) {
110 // AVX512BW-LABEL: @test_mm512_mask_gf2p8affine_epi64_epi8
111 // AVX512BW: @llvm.x86.vgf2p8affineqb.512
112 // AVX512BW: select <64 x i1> %{{[0-9]+}}, <64 x i8> %{{[0-9]+}}, <64 x i8> {{.*}}
113 return _mm512_mask_gf2p8affine_epi64_epi8(S, U, A, B, 1);
114 }
115
test_mm512_maskz_gf2p8affine_epi64_epi8(__mmask64 U,__m512i A,__m512i B)116 __m512i test_mm512_maskz_gf2p8affine_epi64_epi8(__mmask64 U, __m512i A, __m512i B) {
117 // AVX512BW-LABEL: @test_mm512_maskz_gf2p8affine_epi64_epi8
118 // AVX512BW: @llvm.x86.vgf2p8affineqb.512
119 // AVX512BW: select <64 x i1> %{{[0-9]+}}, <64 x i8> %{{[0-9]+}}, <64 x i8> {{.*}}
120 return _mm512_maskz_gf2p8affine_epi64_epi8(U, A, B, 1);
121 }
122
test_mm_mask_gf2p8affine_epi64_epi8(__m128i S,__mmask16 U,__m128i A,__m128i B)123 __m128i test_mm_mask_gf2p8affine_epi64_epi8(__m128i S, __mmask16 U, __m128i A, __m128i B) {
124 // AVX512BW-LABEL: @test_mm_mask_gf2p8affine_epi64_epi8
125 // AVX512BW: @llvm.x86.vgf2p8affineqb.128
126 // AVX512BW: select <16 x i1> %{{[0-9]+}}, <16 x i8> %{{[0-9]+}}, <16 x i8> {{.*}}
127 return _mm_mask_gf2p8affine_epi64_epi8(S, U, A, B, 1);
128 }
129
test_mm_maskz_gf2p8affine_epi64_epi8(__mmask16 U,__m128i A,__m128i B)130 __m128i test_mm_maskz_gf2p8affine_epi64_epi8(__mmask16 U, __m128i A, __m128i B) {
131 // AVX512BW-LABEL: @test_mm_maskz_gf2p8affine_epi64_epi8
132 // AVX512BW: @llvm.x86.vgf2p8affineqb.128
133 // AVX512BW: select <16 x i1> %{{[0-9]+}}, <16 x i8> %{{[0-9]+}}, <16 x i8> {{.*}}
134 return _mm_maskz_gf2p8affine_epi64_epi8(U, A, B, 1);
135 }
136
test_mm256_mask_gf2p8affine_epi64_epi8(__m256i S,__mmask32 U,__m256i A,__m256i B)137 __m256i test_mm256_mask_gf2p8affine_epi64_epi8(__m256i S, __mmask32 U, __m256i A, __m256i B) {
138 // AVX512BW-LABEL: @test_mm256_mask_gf2p8affine_epi64_epi8
139 // AVX512BW: @llvm.x86.vgf2p8affineqb.256
140 // AVX512BW: select <32 x i1> %{{[0-9]+}}, <32 x i8> %{{[0-9]+}}, <32 x i8> {{.*}}
141 return _mm256_mask_gf2p8affine_epi64_epi8(S, U, A, B, 1);
142 }
143
test_mm256_maskz_gf2p8affine_epi64_epi8(__mmask32 U,__m256i A,__m256i B)144 __m256i test_mm256_maskz_gf2p8affine_epi64_epi8(__mmask32 U, __m256i A, __m256i B) {
145 // AVX512BW-LABEL: @test_mm256_maskz_gf2p8affine_epi64_epi8
146 // AVX512BW: @llvm.x86.vgf2p8affineqb.256
147 // AVX512BW: select <32 x i1> %{{[0-9]+}}, <32 x i8> %{{[0-9]+}}, <32 x i8> {{.*}}
148 return _mm256_maskz_gf2p8affine_epi64_epi8(U, A, B, 1);
149 }
150
test_mm512_mask_gf2p8mul_epi8(__m512i S,__mmask64 U,__m512i A,__m512i B)151 __m512i test_mm512_mask_gf2p8mul_epi8(__m512i S, __mmask64 U, __m512i A, __m512i B) {
152 // AVX512BW-LABEL: @test_mm512_mask_gf2p8mul_epi8
153 // AVX512BW: @llvm.x86.vgf2p8mulb.512
154 // AVX512BW: select <64 x i1> %{{[0-9]+}}, <64 x i8> %{{[0-9]+}}, <64 x i8> {{.*}}
155 return _mm512_mask_gf2p8mul_epi8(S, U, A, B);
156 }
157
test_mm512_maskz_gf2p8mul_epi8(__mmask64 U,__m512i A,__m512i B)158 __m512i test_mm512_maskz_gf2p8mul_epi8(__mmask64 U, __m512i A, __m512i B) {
159 // AVX512BW-LABEL: @test_mm512_maskz_gf2p8mul_epi8
160 // AVX512BW: @llvm.x86.vgf2p8mulb.512
161 // AVX512BW: select <64 x i1> %{{[0-9]+}}, <64 x i8> %{{[0-9]+}}, <64 x i8> {{.*}}
162 return _mm512_maskz_gf2p8mul_epi8(U, A, B);
163 }
164
test_mm_mask_gf2p8mul_epi8(__m128i S,__mmask16 U,__m128i A,__m128i B)165 __m128i test_mm_mask_gf2p8mul_epi8(__m128i S, __mmask16 U, __m128i A, __m128i B) {
166 // AVX512BW-LABEL: @test_mm_mask_gf2p8mul_epi8
167 // AVX512BW: @llvm.x86.vgf2p8mulb.128
168 // AVX512BW: select <16 x i1> %{{[0-9]+}}, <16 x i8> %{{[0-9]+}}, <16 x i8> {{.*}}
169 return _mm_mask_gf2p8mul_epi8(S, U, A, B);
170 }
171
test_mm_maskz_gf2p8mul_epi8(__mmask16 U,__m128i A,__m128i B)172 __m128i test_mm_maskz_gf2p8mul_epi8(__mmask16 U, __m128i A, __m128i B) {
173 // AVX512BW-LABEL: @test_mm_maskz_gf2p8mul_epi8
174 // AVX512BW: @llvm.x86.vgf2p8mulb.128
175 // AVX512BW: select <16 x i1> %{{[0-9]+}}, <16 x i8> %{{[0-9]+}}, <16 x i8> {{.*}}
176 return _mm_maskz_gf2p8mul_epi8(U, A, B);
177 }
178
test_mm256_mask_gf2p8mul_epi8(__m256i S,__mmask32 U,__m256i A,__m256i B)179 __m256i test_mm256_mask_gf2p8mul_epi8(__m256i S, __mmask32 U, __m256i A, __m256i B) {
180 // AVX512BW-LABEL: @test_mm256_mask_gf2p8mul_epi8
181 // AVX512BW: @llvm.x86.vgf2p8mulb.256
182 // AVX512BW: select <32 x i1> %{{[0-9]+}}, <32 x i8> %{{[0-9]+}}, <32 x i8> {{.*}}
183 return _mm256_mask_gf2p8mul_epi8(S, U, A, B);
184 }
185
test_mm256_maskz_gf2p8mul_epi8(__mmask32 U,__m256i A,__m256i B)186 __m256i test_mm256_maskz_gf2p8mul_epi8(__mmask32 U, __m256i A, __m256i B) {
187 // AVX512BW-LABEL: @test_mm256_maskz_gf2p8mul_epi8
188 // AVX512BW: @llvm.x86.vgf2p8mulb.256
189 // AVX512BW: select <32 x i1> %{{[0-9]+}}, <32 x i8> %{{[0-9]+}}, <32 x i8> {{.*}}
190 return _mm256_maskz_gf2p8mul_epi8(U, A, B);
191 }
192 #endif // __AVX512BW__
193