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