]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - test/CodeGen/gfni-builtins.c
Vendor import of clang trunk r321530:
[FreeBSD/FreeBSD.git] / test / CodeGen / gfni-builtins.c
1 // RUN: %clang_cc1 -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +gfni -emit-llvm -o - | FileCheck %s --check-prefix SSE
2 // RUN: %clang_cc1 -ffreestanding %s -triple=x86_64-apple-darwin -DAVX -target-feature +gfni -target-feature +avx -emit-llvm -o - | FileCheck %s --check-prefixes SSE,AVX
3 // RUN: %clang_cc1 -ffreestanding %s -triple=x86_64-apple-darwin -DAVX512 -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
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
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
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 #if defined(AVX) || defined(AVX512)
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
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
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 AVX512
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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 // AVX512