[LLVM][IR] Use splat syntax when printing ConstantExpr based splats. (#116856)
[llvm-project.git] / clang / test / CodeGen / X86 / avx512vlbf16-builtins.c
blobf62ba46cfd95c369abc83bf3560b53ba15bc7616
1 // RUN: %clang_cc1 -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-apple-darwin \
2 // RUN: -target-feature +avx512bf16 -target-feature \
3 // RUN: +avx512vl -emit-llvm -o - -Wall -Werror | FileCheck %s
5 #include <immintrin.h>
7 __m128bh test_mm_cvtne2ps2bf16(__m128 A, __m128 B) {
8 // CHECK-LABEL: @test_mm_cvtne2ps2bf16
9 // CHECK: @llvm.x86.avx512bf16.cvtne2ps2bf16.128
10 // CHECK: ret <8 x bfloat> %{{.*}}
11 return _mm_cvtne2ps_pbh(A, B);
14 __m128bh test_mm_maskz_cvtne2ps2bf16(__m128 A, __m128 B, __mmask8 U) {
15 // CHECK-LABEL: @test_mm_maskz_cvtne2ps2bf16
16 // CHECK: @llvm.x86.avx512bf16.cvtne2ps2bf16.128
17 // CHECK: select <8 x i1> %{{.*}}, <8 x bfloat> %{{.*}}, <8 x bfloat> %{{.*}}
18 // CHECK: ret <8 x bfloat> %{{.*}}
19 return _mm_maskz_cvtne2ps_pbh(U, A, B);
22 __m128bh test_mm_mask_cvtne2ps2bf16(__m128bh C, __mmask8 U, __m128 A, __m128 B) {
23 // CHECK-LABEL: @test_mm_mask_cvtne2ps2bf16
24 // CHECK: @llvm.x86.avx512bf16.cvtne2ps2bf16.128
25 // CHECK: select <8 x i1> %{{.*}}, <8 x bfloat> %{{.*}}, <8 x bfloat> %{{.*}}
26 // CHECK: ret <8 x bfloat> %{{.*}}
27 return _mm_mask_cvtne2ps_pbh(C, U, A, B);
30 __m256bh test_mm256_cvtne2ps2bf16(__m256 A, __m256 B) {
31 // CHECK-LABEL: @test_mm256_cvtne2ps2bf16
32 // CHECK: @llvm.x86.avx512bf16.cvtne2ps2bf16.256
33 // CHECK: ret <16 x bfloat> %{{.*}}
34 return _mm256_cvtne2ps_pbh(A, B);
37 __m256bh test_mm256_maskz_cvtne2ps2bf16(__m256 A, __m256 B, __mmask16 U) {
38 // CHECK-LABEL: @test_mm256_maskz_cvtne2ps2bf16
39 // CHECK: @llvm.x86.avx512bf16.cvtne2ps2bf16.256
40 // CHECK: select <16 x i1> %{{.*}}, <16 x bfloat> %{{.*}}, <16 x bfloat> %{{.*}}
41 // CHECK: ret <16 x bfloat> %{{.*}}
42 return _mm256_maskz_cvtne2ps_pbh(U, A, B);
45 __m256bh test_mm256_mask_cvtne2ps2bf16(__m256bh C, __mmask16 U, __m256 A, __m256 B) {
46 // CHECK-LABEL: @test_mm256_mask_cvtne2ps2bf16
47 // CHECK: @llvm.x86.avx512bf16.cvtne2ps2bf16.256
48 // CHECK: select <16 x i1> %{{.*}}, <16 x bfloat> %{{.*}}, <16 x bfloat> %{{.*}}
49 // CHECK: ret <16 x bfloat> %{{.*}}
50 return _mm256_mask_cvtne2ps_pbh(C, U, A, B);
53 __m512bh test_mm512_cvtne2ps2bf16(__m512 A, __m512 B) {
54 // CHECK-LABEL: @test_mm512_cvtne2ps2bf16
55 // CHECK: @llvm.x86.avx512bf16.cvtne2ps2bf16.512
56 // CHECK: ret <32 x bfloat> %{{.*}}
57 return _mm512_cvtne2ps_pbh(A, B);
60 __m512bh test_mm512_maskz_cvtne2ps2bf16(__m512 A, __m512 B, __mmask32 U) {
61 // CHECK-LABEL: @test_mm512_maskz_cvtne2ps2bf16
62 // CHECK: @llvm.x86.avx512bf16.cvtne2ps2bf16.512
63 // CHECK: select <32 x i1> %{{.*}}, <32 x bfloat> %{{.*}}, <32 x bfloat> %{{.*}}
64 // CHECK: ret <32 x bfloat> %{{.*}}
65 return _mm512_maskz_cvtne2ps_pbh(U, A, B);
68 __m512bh test_mm512_mask_cvtne2ps2bf16(__m512bh C, __mmask32 U, __m512 A, __m512 B) {
69 // CHECK-LABEL: @test_mm512_mask_cvtne2ps2bf16
70 // CHECK: @llvm.x86.avx512bf16.cvtne2ps2bf16.512
71 // CHECK: select <32 x i1> %{{.*}}, <32 x bfloat> %{{.*}}, <32 x bfloat> %{{.*}}
72 // CHECK: ret <32 x bfloat> %{{.*}}
73 return _mm512_mask_cvtne2ps_pbh(C, U, A, B);
76 __m128bh test_mm_cvtneps2bf16(__m128 A) {
77 // CHECK-LABEL: @test_mm_cvtneps2bf16
78 // CHECK: @llvm.x86.vcvtneps2bf16128
79 // CHECK: ret <8 x bfloat> %{{.*}}
80 return _mm_cvtneps_pbh(A);
83 __m128bh test_mm_mask_cvtneps2bf16(__m128bh C, __mmask8 U, __m128 A) {
84 // CHECK-LABEL: @test_mm_mask_cvtneps2bf16
85 // CHECK: @llvm.x86.avx512bf16.mask.cvtneps2bf16.
86 // CHECK: ret <8 x bfloat> %{{.*}}
87 return _mm_mask_cvtneps_pbh(C, U, A);
90 __m128bh test_mm_maskz_cvtneps2bf16(__m128 A, __mmask8 U) {
91 // CHECK-LABEL: @test_mm_maskz_cvtneps2bf16
92 // CHECK: @llvm.x86.avx512bf16.mask.cvtneps2bf16.128
93 // CHECK: ret <8 x bfloat> %{{.*}}
94 return _mm_maskz_cvtneps_pbh(U, A);
97 __m128bh test_mm256_cvtneps2bf16(__m256 A) {
98 // CHECK-LABEL: @test_mm256_cvtneps2bf16
99 // CHECK: @llvm.x86.vcvtneps2bf16256
100 // CHECK: ret <8 x bfloat> %{{.*}}
101 return _mm256_cvtneps_pbh(A);
104 __m128bh test_mm256_mask_cvtneps2bf16(__m128bh C, __mmask8 U, __m256 A) {
105 // CHECK-LABEL: @test_mm256_mask_cvtneps2bf16
106 // CHECK: @llvm.x86.avx512bf16.cvtneps2bf16.256
107 // CHECK: select <8 x i1> %{{.*}}, <8 x bfloat> %{{.*}}, <8 x bfloat> %{{.*}}
108 // CHECK: ret <8 x bfloat> %{{.*}}
109 return _mm256_mask_cvtneps_pbh(C, U, A);
112 __m128bh test_mm256_maskz_cvtneps2bf16(__m256 A, __mmask8 U) {
113 // CHECK-LABEL: @test_mm256_maskz_cvtneps2bf16
114 // CHECK: @llvm.x86.avx512bf16.cvtneps2bf16.256
115 // CHECK: select <8 x i1> %{{.*}}, <8 x bfloat> %{{.*}}, <8 x bfloat> %{{.*}}
116 // CHECK: ret <8 x bfloat> %{{.*}}
117 return _mm256_maskz_cvtneps_pbh(U, A);
120 __m128 test_mm_dpbf16_ps(__m128 D, __m128bh A, __m128bh B) {
121 // CHECK-LABEL: @test_mm_dpbf16_ps
122 // CHECK: @llvm.x86.avx512bf16.dpbf16ps.128
123 // CHECK: ret <4 x float> %{{.*}}
124 return _mm_dpbf16_ps(D, A, B);
127 __m128 test_mm_maskz_dpbf16_ps(__m128 D, __m128bh A, __m128bh B, __mmask8 U) {
128 // CHECK-LABEL: @test_mm_maskz_dpbf16_ps
129 // CHECK: @llvm.x86.avx512bf16.dpbf16ps.128
130 // CHECK: select <4 x i1> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}}
131 // CHECK: ret <4 x float> %{{.*}}
132 return _mm_maskz_dpbf16_ps(U, D, A, B);
135 __m128 test_mm_mask_dpbf16_ps(__m128 D, __m128bh A, __m128bh B, __mmask8 U) {
136 // CHECK-LABEL: @test_mm_mask_dpbf16_ps
137 // CHECK: @llvm.x86.avx512bf16.dpbf16ps.128
138 // CHECK: select <4 x i1> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}}
139 // CHECK: ret <4 x float> %{{.*}}
140 return _mm_mask_dpbf16_ps(D, U, A, B);
142 __m256 test_mm256_dpbf16_ps(__m256 D, __m256bh A, __m256bh B) {
143 // CHECK-LABEL: @test_mm256_dpbf16_ps
144 // CHECK: @llvm.x86.avx512bf16.dpbf16ps.256
145 // CHECK: ret <8 x float> %{{.*}}
146 return _mm256_dpbf16_ps(D, A, B);
149 __m256 test_mm256_maskz_dpbf16_ps(__m256 D, __m256bh A, __m256bh B, __mmask8 U) {
150 // CHECK-LABEL: @test_mm256_maskz_dpbf16_ps
151 // CHECK: @llvm.x86.avx512bf16.dpbf16ps.256
152 // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}}
153 // CHECK: ret <8 x float> %{{.*}}
154 return _mm256_maskz_dpbf16_ps(U, D, A, B);
157 __m256 test_mm256_mask_dpbf16_ps(__m256 D, __m256bh A, __m256bh B, __mmask8 U) {
158 // CHECK-LABEL: @test_mm256_mask_dpbf16_ps
159 // CHECK: @llvm.x86.avx512bf16.dpbf16ps.256
160 // CHECK: select <8 x i1> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}}
161 // CHECK: ret <8 x float> %{{.*}}
162 return _mm256_mask_dpbf16_ps(D, U, A, B);
165 __bf16 test_mm_cvtness_sbh(float A) {
166 // CHECK-LABEL: @test_mm_cvtness_sbh
167 // CHECK: @llvm.x86.avx512bf16.mask.cvtneps2bf16.128
168 // CHECK: ret bfloat %{{.*}}
169 return _mm_cvtness_sbh(A);
172 __m128 test_mm_cvtpbh_ps(__m128bh A) {
173 // CHECK-LABEL: @test_mm_cvtpbh_ps
174 // CHECK: sext <4 x i16> %{{.*}} to <4 x i32>
175 // CHECK: @llvm.x86.sse2.pslli.d
176 // CHECK: ret <4 x float> %{{.*}}
177 return _mm_cvtpbh_ps(A);
180 __m256 test_mm256_cvtpbh_ps(__m128bh A) {
181 // CHECK-LABEL: @test_mm256_cvtpbh_ps
182 // CHECK: sext <8 x i16> %{{.*}} to <8 x i32>
183 // CHECK: @llvm.x86.avx2.pslli.d
184 // CHECK: ret <8 x float> %{{.*}}
185 return _mm256_cvtpbh_ps(A);
188 __m128 test_mm_maskz_cvtpbh_ps(__mmask8 M, __m128bh A) {
189 // CHECK-LABEL: @test_mm_maskz_cvtpbh_ps
190 // CHECK: sext <4 x i16> %{{.*}} to <4 x i32>
191 // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}}
192 // CHECK: @llvm.x86.sse2.pslli.d
193 // CHECK: ret <4 x float> %{{.*}}
194 return _mm_maskz_cvtpbh_ps(M, A);
197 __m256 test_mm256_maskz_cvtpbh_ps(__mmask8 M, __m128bh A) {
198 // CHECK-LABEL: @test_mm256_maskz_cvtpbh_ps
199 // CHECK: sext <8 x i16> %{{.*}} to <8 x i32>
200 // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}}
201 // CHECK: @llvm.x86.avx2.pslli.d
202 // CHECK: ret <8 x float> %{{.*}}
203 return _mm256_maskz_cvtpbh_ps(M, A);
206 __m128 test_mm_mask_cvtpbh_ps(__m128 S, __mmask8 M, __m128bh A) {
207 // CHECK-LABEL: @test_mm_mask_cvtpbh_ps
208 // CHECK: sext <4 x i16> %{{.*}} to <4 x i32>
209 // CHECK: @llvm.x86.sse2.pslli.d
210 // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}}
211 // CHECK: ret <4 x float> %{{.*}}
212 return _mm_mask_cvtpbh_ps(S, M, A);
215 __m256 test_mm256_mask_cvtpbh_ps(__m256 S, __mmask8 M, __m128bh A) {
216 // CHECK-LABEL: @test_mm256_mask_cvtpbh_ps
217 // CHECK: sext <8 x i16> %{{.*}} to <8 x i32>
218 // CHECK: @llvm.x86.avx2.pslli.d
219 // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}}
220 // CHECK: ret <8 x float> %{{.*}}
221 return _mm256_mask_cvtpbh_ps(S, M, A);