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