[clang] Implement lifetime analysis for lifetime_capture_by(X) (#115921)
[llvm-project.git] / clang / test / CodeGen / X86 / gfni-builtins.c
blob7f196e08f4d80b8fb9e03b377e6ed29659cb2757
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
6 #include <immintrin.h>
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);
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);
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);
26 #ifdef __AVX__
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);
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);
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);
44 #endif // __AVX__
46 #ifdef __AVX512F__
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);
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);
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);
64 #endif // __AVX512F__
66 #ifdef __AVX512BW__
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
192 #endif // __AVX512BW__