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
4
5 #include <immintrin.h>
6
test_mm_cvtne2ps2bf16(__m128 A,__m128 B)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);
12 }
13
test_mm_maskz_cvtne2ps2bf16(__m128 A,__m128 B,__mmask8 U)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);
20 }
21
test_mm_mask_cvtne2ps2bf16(__m128bh C,__mmask8 U,__m128 A,__m128 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);
28 }
29
test_mm256_cvtne2ps2bf16(__m256 A,__m256 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);
35 }
36
test_mm256_maskz_cvtne2ps2bf16(__m256 A,__m256 B,__mmask16 U)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);
43 }
44
test_mm256_mask_cvtne2ps2bf16(__m256bh C,__mmask16 U,__m256 A,__m256 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);
51 }
52
test_mm512_cvtne2ps2bf16(__m512 A,__m512 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);
58 }
59
test_mm512_maskz_cvtne2ps2bf16(__m512 A,__m512 B,__mmask32 U)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);
66 }
67
test_mm512_mask_cvtne2ps2bf16(__m512bh C,__mmask32 U,__m512 A,__m512 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);
74 }
75
test_mm_cvtneps2bf16(__m128 A)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);
81 }
82
test_mm_mask_cvtneps2bf16(__m128bh C,__mmask8 U,__m128 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);
88 }
89
test_mm_maskz_cvtneps2bf16(__m128 A,__mmask8 U)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);
95 }
96
test_mm256_cvtneps2bf16(__m256 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);
102 }
103
test_mm256_mask_cvtneps2bf16(__m128bh C,__mmask8 U,__m256 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);
110 }
111
test_mm256_maskz_cvtneps2bf16(__m256 A,__mmask8 U)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);
118 }
119
test_mm_dpbf16_ps(__m128 D,__m128bh A,__m128bh B)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);
125 }
126
test_mm_maskz_dpbf16_ps(__m128 D,__m128bh A,__m128bh B,__mmask8 U)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);
133 }
134
test_mm_mask_dpbf16_ps(__m128 D,__m128bh A,__m128bh B,__mmask8 U)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);
141 }
test_mm256_dpbf16_ps(__m256 D,__m256bh A,__m256bh 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);
147 }
148
test_mm256_maskz_dpbf16_ps(__m256 D,__m256bh A,__m256bh B,__mmask8 U)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);
155 }
156
test_mm256_mask_dpbf16_ps(__m256 D,__m256bh A,__m256bh B,__mmask8 U)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);
163 }
164
test_mm_cvtness_sbh(float A)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);
170 }
171
test_mm_cvtpbh_ps(__m128bh 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);
178 }
179
test_mm256_cvtpbh_ps(__m128bh 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);
186 }
187
test_mm_maskz_cvtpbh_ps(__mmask8 M,__m128bh 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);
195 }
196
test_mm256_maskz_cvtpbh_ps(__mmask8 M,__m128bh 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);
204 }
205
test_mm_mask_cvtpbh_ps(__m128 S,__mmask8 M,__m128bh 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);
213 }
214
test_mm256_mask_cvtpbh_ps(__m256 S,__mmask8 M,__m128bh 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);
222 }
223