[RISCV] Add shrinkwrap test cases showing gaps in current impl
[llvm-project.git] / llvm / test / CodeGen / X86 / avx10.2-fma-commute.ll
blobc41e03ba637cbec979a579ab8971a299b5c2f737
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s --mtriple=x86_64-unknown-unknown -mattr=avx10.2-512 | FileCheck %s
4 define <8 x bfloat> @fma_123_v8bf16(<8 x bfloat> %x, <8 x bfloat> %y, <8 x bfloat> %z) {
5 ; CHECK-LABEL: fma_123_v8bf16:
6 ; CHECK:       # %bb.0:
7 ; CHECK-NEXT:    vfmadd213nepbf16 %xmm2, %xmm1, %xmm0
8 ; CHECK-NEXT:    retq
9   %a = call <8 x bfloat> @llvm.fma.v8bf16(<8 x bfloat> %x, <8 x bfloat> %y, <8 x bfloat> %z)
10   ret <8 x bfloat> %a
13 define <8 x bfloat> @fma_213_v8bf16(<8 x bfloat> %x, <8 x bfloat> %y, <8 x bfloat> %z) {
14 ; CHECK-LABEL: fma_213_v8bf16:
15 ; CHECK:       # %bb.0:
16 ; CHECK-NEXT:    vfmadd213nepbf16 %xmm2, %xmm1, %xmm0
17 ; CHECK-NEXT:    retq
18   %a = call <8 x bfloat> @llvm.fma.v8bf16(<8 x bfloat> %y, <8 x bfloat> %x, <8 x bfloat> %z)
19   ret <8 x bfloat> %a
22 define <8 x bfloat> @fma_231_v8bf16(<8 x bfloat> %x, <8 x bfloat> %y, <8 x bfloat> %z) {
23 ; CHECK-LABEL: fma_231_v8bf16:
24 ; CHECK:       # %bb.0:
25 ; CHECK-NEXT:    vfmadd231nepbf16 %xmm1, %xmm2, %xmm0
26 ; CHECK-NEXT:    retq
27   %a = call <8 x bfloat> @llvm.fma.v8bf16(<8 x bfloat> %y, <8 x bfloat> %z, <8 x bfloat> %x)
28   ret <8 x bfloat> %a
31 define <8 x bfloat> @fma_321_v8bf16(<8 x bfloat> %x, <8 x bfloat> %y, <8 x bfloat> %z) {
32 ; CHECK-LABEL: fma_321_v8bf16:
33 ; CHECK:       # %bb.0:
34 ; CHECK-NEXT:    vfmadd231nepbf16 %xmm1, %xmm2, %xmm0
35 ; CHECK-NEXT:    retq
36   %a = call <8 x bfloat> @llvm.fma.v8bf16(<8 x bfloat> %z, <8 x bfloat> %y, <8 x bfloat> %x)
37   ret <8 x bfloat> %a
40 define <8 x bfloat> @fma_132_v8bf16(<8 x bfloat> %x, <8 x bfloat> %y, <8 x bfloat> %z) {
41 ; CHECK-LABEL: fma_132_v8bf16:
42 ; CHECK:       # %bb.0:
43 ; CHECK-NEXT:    vfmadd213nepbf16 %xmm1, %xmm2, %xmm0
44 ; CHECK-NEXT:    retq
45   %a = call <8 x bfloat> @llvm.fma.v8bf16(<8 x bfloat> %x, <8 x bfloat> %z, <8 x bfloat> %y)
46   ret <8 x bfloat> %a
49 define <8 x bfloat> @fma_312_v8bf16(<8 x bfloat> %x, <8 x bfloat> %y, <8 x bfloat> %z) {
50 ; CHECK-LABEL: fma_312_v8bf16:
51 ; CHECK:       # %bb.0:
52 ; CHECK-NEXT:    vfmadd213nepbf16 %xmm1, %xmm2, %xmm0
53 ; CHECK-NEXT:    retq
54   %a = call <8 x bfloat> @llvm.fma.v8bf16(<8 x bfloat> %z, <8 x bfloat> %x, <8 x bfloat> %y)
55   ret <8 x bfloat> %a
58 define <8 x bfloat> @fma_load_123_v8bf16(<8 x bfloat> %x, <8 x bfloat> %y, ptr %zp) {
59 ; CHECK-LABEL: fma_load_123_v8bf16:
60 ; CHECK:       # %bb.0:
61 ; CHECK-NEXT:    vfmadd213nepbf16 (%rdi), %xmm1, %xmm0
62 ; CHECK-NEXT:    retq
63   %z = load <8 x bfloat>, ptr %zp
64   %a = call <8 x bfloat> @llvm.fma.v8bf16(<8 x bfloat> %x, <8 x bfloat> %y, <8 x bfloat> %z)
65   ret <8 x bfloat> %a
68 define <8 x bfloat> @fma_load_213_v8bf16(<8 x bfloat> %x, <8 x bfloat> %y, ptr %zp) {
69 ; CHECK-LABEL: fma_load_213_v8bf16:
70 ; CHECK:       # %bb.0:
71 ; CHECK-NEXT:    vfmadd213nepbf16 (%rdi), %xmm1, %xmm0
72 ; CHECK-NEXT:    retq
73   %z = load <8 x bfloat>, ptr %zp
74   %a = call <8 x bfloat> @llvm.fma.v8bf16(<8 x bfloat> %y, <8 x bfloat> %x, <8 x bfloat> %z)
75   ret <8 x bfloat> %a
78 define <8 x bfloat> @fma_load_231_v8bf16(<8 x bfloat> %x, <8 x bfloat> %y, ptr %zp) {
79 ; CHECK-LABEL: fma_load_231_v8bf16:
80 ; CHECK:       # %bb.0:
81 ; CHECK-NEXT:    vfmadd231nepbf16 (%rdi), %xmm1, %xmm0
82 ; CHECK-NEXT:    retq
83   %z = load <8 x bfloat>, ptr %zp
84   %a = call <8 x bfloat> @llvm.fma.v8bf16(<8 x bfloat> %y, <8 x bfloat> %z, <8 x bfloat> %x)
85   ret <8 x bfloat> %a
88 define <8 x bfloat> @fma_load_321_v8bf16(<8 x bfloat> %x, <8 x bfloat> %y, ptr %zp) {
89 ; CHECK-LABEL: fma_load_321_v8bf16:
90 ; CHECK:       # %bb.0:
91 ; CHECK-NEXT:    vfmadd231nepbf16 (%rdi), %xmm1, %xmm0
92 ; CHECK-NEXT:    retq
93   %z = load <8 x bfloat>, ptr %zp
94   %a = call <8 x bfloat> @llvm.fma.v8bf16(<8 x bfloat> %z, <8 x bfloat> %y, <8 x bfloat> %x)
95   ret <8 x bfloat> %a
98 define <8 x bfloat> @fma_load_132_v8bf16(<8 x bfloat> %x, <8 x bfloat> %y, ptr %zp) {
99 ; CHECK-LABEL: fma_load_132_v8bf16:
100 ; CHECK:       # %bb.0:
101 ; CHECK-NEXT:    vfmadd132nepbf16 (%rdi), %xmm1, %xmm0
102 ; CHECK-NEXT:    retq
103   %z = load <8 x bfloat>, ptr %zp
104   %a = call <8 x bfloat> @llvm.fma.v8bf16(<8 x bfloat> %x, <8 x bfloat> %z, <8 x bfloat> %y)
105   ret <8 x bfloat> %a
108 define <8 x bfloat> @fma_load_312_v8bf16(<8 x bfloat> %x, <8 x bfloat> %y, ptr %zp) {
109 ; CHECK-LABEL: fma_load_312_v8bf16:
110 ; CHECK:       # %bb.0:
111 ; CHECK-NEXT:    vfmadd132nepbf16 (%rdi), %xmm1, %xmm0
112 ; CHECK-NEXT:    retq
113   %z = load <8 x bfloat>, ptr %zp
114   %a = call <8 x bfloat> @llvm.fma.v8bf16(<8 x bfloat> %z, <8 x bfloat> %x, <8 x bfloat> %y)
115   ret <8 x bfloat> %a
118 define <8 x bfloat> @fma_mask_123_v8bf16(<8 x bfloat> %x, <8 x bfloat> %y, <8 x bfloat> %z, i8 %mask) {
119 ; CHECK-LABEL: fma_mask_123_v8bf16:
120 ; CHECK:       # %bb.0:
121 ; CHECK-NEXT:    kmovd %edi, %k1
122 ; CHECK-NEXT:    vfmadd132nepbf16 %xmm1, %xmm2, %xmm0 {%k1}
123 ; CHECK-NEXT:    retq
124   %a = call <8 x bfloat> @llvm.fma.v8bf16(<8 x bfloat> %x, <8 x bfloat> %y, <8 x bfloat> %z)
125   %b = bitcast i8 %mask to <8 x i1>
126   %c = select <8 x i1> %b, <8 x bfloat> %a, <8 x bfloat> %x
127   ret <8 x bfloat> %c
130 define <8 x bfloat> @fma_mask_213_v8bf16(<8 x bfloat> %x, <8 x bfloat> %y, <8 x bfloat> %z, i8 %mask) {
131 ; CHECK-LABEL: fma_mask_213_v8bf16:
132 ; CHECK:       # %bb.0:
133 ; CHECK-NEXT:    kmovd %edi, %k1
134 ; CHECK-NEXT:    vfmadd213nepbf16 %xmm2, %xmm1, %xmm0 {%k1}
135 ; CHECK-NEXT:    retq
136   %a = call <8 x bfloat> @llvm.fma.v8bf16(<8 x bfloat> %y, <8 x bfloat> %x, <8 x bfloat> %z)
137   %b = bitcast i8 %mask to <8 x i1>
138   %c = select <8 x i1> %b, <8 x bfloat> %a, <8 x bfloat> %x
139   ret <8 x bfloat> %c
142 define <8 x bfloat> @fma_mask_231_v8bf16(<8 x bfloat> %x, <8 x bfloat> %y, <8 x bfloat> %z, i8 %mask) {
143 ; CHECK-LABEL: fma_mask_231_v8bf16:
144 ; CHECK:       # %bb.0:
145 ; CHECK-NEXT:    kmovd %edi, %k1
146 ; CHECK-NEXT:    vfmadd231nepbf16 %xmm2, %xmm1, %xmm0 {%k1}
147 ; CHECK-NEXT:    retq
148   %a = call <8 x bfloat> @llvm.fma.v8bf16(<8 x bfloat> %y, <8 x bfloat> %z, <8 x bfloat> %x)
149   %b = bitcast i8 %mask to <8 x i1>
150   %c = select <8 x i1> %b, <8 x bfloat> %a, <8 x bfloat> %x
151   ret <8 x bfloat> %c
154 define <8 x bfloat> @fma_mask_321_v8bf16(<8 x bfloat> %x, <8 x bfloat> %y, <8 x bfloat> %z, i8 %mask) {
155 ; CHECK-LABEL: fma_mask_321_v8bf16:
156 ; CHECK:       # %bb.0:
157 ; CHECK-NEXT:    kmovd %edi, %k1
158 ; CHECK-NEXT:    vfmadd231nepbf16 %xmm1, %xmm2, %xmm0 {%k1}
159 ; CHECK-NEXT:    retq
160   %a = call <8 x bfloat> @llvm.fma.v8bf16(<8 x bfloat> %z, <8 x bfloat> %y, <8 x bfloat> %x)
161   %b = bitcast i8 %mask to <8 x i1>
162   %c = select <8 x i1> %b, <8 x bfloat> %a, <8 x bfloat> %x
163   ret <8 x bfloat> %c
166 define <8 x bfloat> @fma_mask_132_v8bf16(<8 x bfloat> %x, <8 x bfloat> %y, <8 x bfloat> %z, i8 %mask) {
167 ; CHECK-LABEL: fma_mask_132_v8bf16:
168 ; CHECK:       # %bb.0:
169 ; CHECK-NEXT:    kmovd %edi, %k1
170 ; CHECK-NEXT:    vfmadd132nepbf16 %xmm2, %xmm1, %xmm0 {%k1}
171 ; CHECK-NEXT:    retq
172   %a = call <8 x bfloat> @llvm.fma.v8bf16(<8 x bfloat> %x, <8 x bfloat> %z, <8 x bfloat> %y)
173   %b = bitcast i8 %mask to <8 x i1>
174   %c = select <8 x i1> %b, <8 x bfloat> %a, <8 x bfloat> %x
175   ret <8 x bfloat> %c
178 define <8 x bfloat> @fma_mask_312_v8bf16(<8 x bfloat> %x, <8 x bfloat> %y, <8 x bfloat> %z, i8 %mask) {
179 ; CHECK-LABEL: fma_mask_312_v8bf16:
180 ; CHECK:       # %bb.0:
181 ; CHECK-NEXT:    kmovd %edi, %k1
182 ; CHECK-NEXT:    vfmadd213nepbf16 %xmm1, %xmm2, %xmm0 {%k1}
183 ; CHECK-NEXT:    retq
184   %a = call <8 x bfloat> @llvm.fma.v8bf16(<8 x bfloat> %z, <8 x bfloat> %x, <8 x bfloat> %y)
185   %b = bitcast i8 %mask to <8 x i1>
186   %c = select <8 x i1> %b, <8 x bfloat> %a, <8 x bfloat> %x
187   ret <8 x bfloat> %c
190 define <8 x bfloat> @fma_maskz_123_v8bf16(<8 x bfloat> %x, <8 x bfloat> %y, <8 x bfloat> %z, i8 %mask) {
191 ; CHECK-LABEL: fma_maskz_123_v8bf16:
192 ; CHECK:       # %bb.0:
193 ; CHECK-NEXT:    kmovd %edi, %k1
194 ; CHECK-NEXT:    vfmadd213nepbf16 %xmm2, %xmm1, %xmm0 {%k1} {z}
195 ; CHECK-NEXT:    retq
196   %a = call <8 x bfloat> @llvm.fma.v8bf16(<8 x bfloat> %x, <8 x bfloat> %y, <8 x bfloat> %z)
197   %b = bitcast i8 %mask to <8 x i1>
198   %c = select <8 x i1> %b, <8 x bfloat> %a, <8 x bfloat> zeroinitializer
199   ret <8 x bfloat> %c
202 define <8 x bfloat> @fma_maskz_213_v8bf16(<8 x bfloat> %x, <8 x bfloat> %y, <8 x bfloat> %z, i8 %mask) {
203 ; CHECK-LABEL: fma_maskz_213_v8bf16:
204 ; CHECK:       # %bb.0:
205 ; CHECK-NEXT:    kmovd %edi, %k1
206 ; CHECK-NEXT:    vfmadd213nepbf16 %xmm2, %xmm1, %xmm0 {%k1} {z}
207 ; CHECK-NEXT:    retq
208   %a = call <8 x bfloat> @llvm.fma.v8bf16(<8 x bfloat> %y, <8 x bfloat> %x, <8 x bfloat> %z)
209   %b = bitcast i8 %mask to <8 x i1>
210   %c = select <8 x i1> %b, <8 x bfloat> %a, <8 x bfloat> zeroinitializer
211   ret <8 x bfloat> %c
214 define <8 x bfloat> @fma_maskz_231_v8bf16(<8 x bfloat> %x, <8 x bfloat> %y, <8 x bfloat> %z, i8 %mask) {
215 ; CHECK-LABEL: fma_maskz_231_v8bf16:
216 ; CHECK:       # %bb.0:
217 ; CHECK-NEXT:    kmovd %edi, %k1
218 ; CHECK-NEXT:    vfmadd231nepbf16 %xmm1, %xmm2, %xmm0 {%k1} {z}
219 ; CHECK-NEXT:    retq
220   %a = call <8 x bfloat> @llvm.fma.v8bf16(<8 x bfloat> %y, <8 x bfloat> %z, <8 x bfloat> %x)
221   %b = bitcast i8 %mask to <8 x i1>
222   %c = select <8 x i1> %b, <8 x bfloat> %a, <8 x bfloat> zeroinitializer
223   ret <8 x bfloat> %c
226 define <8 x bfloat> @fma_maskz_321_v8bf16(<8 x bfloat> %x, <8 x bfloat> %y, <8 x bfloat> %z, i8 %mask) {
227 ; CHECK-LABEL: fma_maskz_321_v8bf16:
228 ; CHECK:       # %bb.0:
229 ; CHECK-NEXT:    kmovd %edi, %k1
230 ; CHECK-NEXT:    vfmadd231nepbf16 %xmm1, %xmm2, %xmm0 {%k1} {z}
231 ; CHECK-NEXT:    retq
232   %a = call <8 x bfloat> @llvm.fma.v8bf16(<8 x bfloat> %z, <8 x bfloat> %y, <8 x bfloat> %x)
233   %b = bitcast i8 %mask to <8 x i1>
234   %c = select <8 x i1> %b, <8 x bfloat> %a, <8 x bfloat> zeroinitializer
235   ret <8 x bfloat> %c
238 define <8 x bfloat> @fma_maskz_132_v8bf16(<8 x bfloat> %x, <8 x bfloat> %y, <8 x bfloat> %z, i8 %mask) {
239 ; CHECK-LABEL: fma_maskz_132_v8bf16:
240 ; CHECK:       # %bb.0:
241 ; CHECK-NEXT:    kmovd %edi, %k1
242 ; CHECK-NEXT:    vfmadd213nepbf16 %xmm1, %xmm2, %xmm0 {%k1} {z}
243 ; CHECK-NEXT:    retq
244   %a = call <8 x bfloat> @llvm.fma.v8bf16(<8 x bfloat> %x, <8 x bfloat> %z, <8 x bfloat> %y)
245   %b = bitcast i8 %mask to <8 x i1>
246   %c = select <8 x i1> %b, <8 x bfloat> %a, <8 x bfloat> zeroinitializer
247   ret <8 x bfloat> %c
250 define <8 x bfloat> @fma_maskz_312_v8bf16(<8 x bfloat> %x, <8 x bfloat> %y, <8 x bfloat> %z, i8 %mask) {
251 ; CHECK-LABEL: fma_maskz_312_v8bf16:
252 ; CHECK:       # %bb.0:
253 ; CHECK-NEXT:    kmovd %edi, %k1
254 ; CHECK-NEXT:    vfmadd213nepbf16 %xmm1, %xmm2, %xmm0 {%k1} {z}
255 ; CHECK-NEXT:    retq
256   %a = call <8 x bfloat> @llvm.fma.v8bf16(<8 x bfloat> %z, <8 x bfloat> %x, <8 x bfloat> %y)
257   %b = bitcast i8 %mask to <8 x i1>
258   %c = select <8 x i1> %b, <8 x bfloat> %a, <8 x bfloat> zeroinitializer
259   ret <8 x bfloat> %c
262 define <8 x bfloat> @fma_mask_load_123_v8bf16(<8 x bfloat> %x, <8 x bfloat> %y, ptr %zp, i8 %mask) {
263 ; CHECK-LABEL: fma_mask_load_123_v8bf16:
264 ; CHECK:       # %bb.0:
265 ; CHECK-NEXT:    kmovd %esi, %k1
266 ; CHECK-NEXT:    vfmadd213nepbf16 (%rdi), %xmm1, %xmm0 {%k1}
267 ; CHECK-NEXT:    retq
268   %z = load <8 x bfloat>, ptr %zp
269   %a = call <8 x bfloat> @llvm.fma.v8bf16(<8 x bfloat> %x, <8 x bfloat> %y, <8 x bfloat> %z)
270   %b = bitcast i8 %mask to <8 x i1>
271   %c = select <8 x i1> %b, <8 x bfloat> %a, <8 x bfloat> %x
272   ret <8 x bfloat> %c
275 define <8 x bfloat> @fma_mask_load_213_v8bf16(<8 x bfloat> %x, <8 x bfloat> %y, ptr %zp, i8 %mask) {
276 ; CHECK-LABEL: fma_mask_load_213_v8bf16:
277 ; CHECK:       # %bb.0:
278 ; CHECK-NEXT:    kmovd %esi, %k1
279 ; CHECK-NEXT:    vfmadd213nepbf16 (%rdi), %xmm1, %xmm0 {%k1}
280 ; CHECK-NEXT:    retq
281   %z = load <8 x bfloat>, ptr %zp
282   %a = call <8 x bfloat> @llvm.fma.v8bf16(<8 x bfloat> %y, <8 x bfloat> %x, <8 x bfloat> %z)
283   %b = bitcast i8 %mask to <8 x i1>
284   %c = select <8 x i1> %b, <8 x bfloat> %a, <8 x bfloat> %x
285   ret <8 x bfloat> %c
288 define <8 x bfloat> @fma_mask_load_231_v8bf16(<8 x bfloat> %x, <8 x bfloat> %y, ptr %zp, i8 %mask) {
289 ; CHECK-LABEL: fma_mask_load_231_v8bf16:
290 ; CHECK:       # %bb.0:
291 ; CHECK-NEXT:    kmovd %esi, %k1
292 ; CHECK-NEXT:    vfmadd231nepbf16 (%rdi), %xmm1, %xmm0 {%k1}
293 ; CHECK-NEXT:    retq
294   %z = load <8 x bfloat>, ptr %zp
295   %a = call <8 x bfloat> @llvm.fma.v8bf16(<8 x bfloat> %y, <8 x bfloat> %z, <8 x bfloat> %x)
296   %b = bitcast i8 %mask to <8 x i1>
297   %c = select <8 x i1> %b, <8 x bfloat> %a, <8 x bfloat> %x
298   ret <8 x bfloat> %c
301 define <8 x bfloat> @fma_mask_load_321_v8bf16(<8 x bfloat> %x, <8 x bfloat> %y, ptr %zp, i8 %mask) {
302 ; CHECK-LABEL: fma_mask_load_321_v8bf16:
303 ; CHECK:       # %bb.0:
304 ; CHECK-NEXT:    kmovd %esi, %k1
305 ; CHECK-NEXT:    vfmadd231nepbf16 (%rdi), %xmm1, %xmm0 {%k1}
306 ; CHECK-NEXT:    retq
307   %z = load <8 x bfloat>, ptr %zp
308   %a = call <8 x bfloat> @llvm.fma.v8bf16(<8 x bfloat> %z, <8 x bfloat> %y, <8 x bfloat> %x)
309   %b = bitcast i8 %mask to <8 x i1>
310   %c = select <8 x i1> %b, <8 x bfloat> %a, <8 x bfloat> %x
311   ret <8 x bfloat> %c
314 define <8 x bfloat> @fma_mask_load_132_v8bf16(<8 x bfloat> %x, <8 x bfloat> %y, ptr %zp, i8 %mask) {
315 ; CHECK-LABEL: fma_mask_load_132_v8bf16:
316 ; CHECK:       # %bb.0:
317 ; CHECK-NEXT:    kmovd %esi, %k1
318 ; CHECK-NEXT:    vfmadd132nepbf16 (%rdi), %xmm1, %xmm0 {%k1}
319 ; CHECK-NEXT:    retq
320   %z = load <8 x bfloat>, ptr %zp
321   %a = call <8 x bfloat> @llvm.fma.v8bf16(<8 x bfloat> %x, <8 x bfloat> %z, <8 x bfloat> %y)
322   %b = bitcast i8 %mask to <8 x i1>
323   %c = select <8 x i1> %b, <8 x bfloat> %a, <8 x bfloat> %x
324   ret <8 x bfloat> %c
327 define <8 x bfloat> @fma_mask_load_312_v8bf16(<8 x bfloat> %x, <8 x bfloat> %y, ptr %zp, i8 %mask) {
328 ; CHECK-LABEL: fma_mask_load_312_v8bf16:
329 ; CHECK:       # %bb.0:
330 ; CHECK-NEXT:    kmovd %esi, %k1
331 ; CHECK-NEXT:    vfmadd132nepbf16 (%rdi), %xmm1, %xmm0 {%k1}
332 ; CHECK-NEXT:    retq
333   %z = load <8 x bfloat>, ptr %zp
334   %a = call <8 x bfloat> @llvm.fma.v8bf16(<8 x bfloat> %z, <8 x bfloat> %x, <8 x bfloat> %y)
335   %b = bitcast i8 %mask to <8 x i1>
336   %c = select <8 x i1> %b, <8 x bfloat> %a, <8 x bfloat> %x
337   ret <8 x bfloat> %c
340 define <8 x bfloat> @fma_maskz_load_123_v8bf16(<8 x bfloat> %x, <8 x bfloat> %y, ptr %zp, i8 %mask) {
341 ; CHECK-LABEL: fma_maskz_load_123_v8bf16:
342 ; CHECK:       # %bb.0:
343 ; CHECK-NEXT:    kmovd %esi, %k1
344 ; CHECK-NEXT:    vfmadd213nepbf16 (%rdi), %xmm1, %xmm0 {%k1} {z}
345 ; CHECK-NEXT:    retq
346   %z = load <8 x bfloat>, ptr %zp
347   %a = call <8 x bfloat> @llvm.fma.v8bf16(<8 x bfloat> %x, <8 x bfloat> %y, <8 x bfloat> %z)
348   %b = bitcast i8 %mask to <8 x i1>
349   %c = select <8 x i1> %b, <8 x bfloat> %a, <8 x bfloat> zeroinitializer
350   ret <8 x bfloat> %c
353 define <8 x bfloat> @fma_maskz_load_213_v8bf16(<8 x bfloat> %x, <8 x bfloat> %y, ptr %zp, i8 %mask) {
354 ; CHECK-LABEL: fma_maskz_load_213_v8bf16:
355 ; CHECK:       # %bb.0:
356 ; CHECK-NEXT:    kmovd %esi, %k1
357 ; CHECK-NEXT:    vfmadd213nepbf16 (%rdi), %xmm1, %xmm0 {%k1} {z}
358 ; CHECK-NEXT:    retq
359   %z = load <8 x bfloat>, ptr %zp
360   %a = call <8 x bfloat> @llvm.fma.v8bf16(<8 x bfloat> %y, <8 x bfloat> %x, <8 x bfloat> %z)
361   %b = bitcast i8 %mask to <8 x i1>
362   %c = select <8 x i1> %b, <8 x bfloat> %a, <8 x bfloat> zeroinitializer
363   ret <8 x bfloat> %c
366 define <8 x bfloat> @fma_maskz_load_231_v8bf16(<8 x bfloat> %x, <8 x bfloat> %y, ptr %zp, i8 %mask) {
367 ; CHECK-LABEL: fma_maskz_load_231_v8bf16:
368 ; CHECK:       # %bb.0:
369 ; CHECK-NEXT:    kmovd %esi, %k1
370 ; CHECK-NEXT:    vfmadd231nepbf16 (%rdi), %xmm1, %xmm0 {%k1} {z}
371 ; CHECK-NEXT:    retq
372   %z = load <8 x bfloat>, ptr %zp
373   %a = call <8 x bfloat> @llvm.fma.v8bf16(<8 x bfloat> %y, <8 x bfloat> %z, <8 x bfloat> %x)
374   %b = bitcast i8 %mask to <8 x i1>
375   %c = select <8 x i1> %b, <8 x bfloat> %a, <8 x bfloat> zeroinitializer
376   ret <8 x bfloat> %c
379 define <8 x bfloat> @fma_maskz_load_321_v8bf16(<8 x bfloat> %x, <8 x bfloat> %y, ptr %zp, i8 %mask) {
380 ; CHECK-LABEL: fma_maskz_load_321_v8bf16:
381 ; CHECK:       # %bb.0:
382 ; CHECK-NEXT:    kmovd %esi, %k1
383 ; CHECK-NEXT:    vfmadd231nepbf16 (%rdi), %xmm1, %xmm0 {%k1} {z}
384 ; CHECK-NEXT:    retq
385   %z = load <8 x bfloat>, ptr %zp
386   %a = call <8 x bfloat> @llvm.fma.v8bf16(<8 x bfloat> %z, <8 x bfloat> %y, <8 x bfloat> %x)
387   %b = bitcast i8 %mask to <8 x i1>
388   %c = select <8 x i1> %b, <8 x bfloat> %a, <8 x bfloat> zeroinitializer
389   ret <8 x bfloat> %c
392 define <8 x bfloat> @fma_maskz_load_132_v8bf16(<8 x bfloat> %x, <8 x bfloat> %y, ptr %zp, i8 %mask) {
393 ; CHECK-LABEL: fma_maskz_load_132_v8bf16:
394 ; CHECK:       # %bb.0:
395 ; CHECK-NEXT:    kmovd %esi, %k1
396 ; CHECK-NEXT:    vfmadd132nepbf16 (%rdi), %xmm1, %xmm0 {%k1} {z}
397 ; CHECK-NEXT:    retq
398   %z = load <8 x bfloat>, ptr %zp
399   %a = call <8 x bfloat> @llvm.fma.v8bf16(<8 x bfloat> %x, <8 x bfloat> %z, <8 x bfloat> %y)
400   %b = bitcast i8 %mask to <8 x i1>
401   %c = select <8 x i1> %b, <8 x bfloat> %a, <8 x bfloat> zeroinitializer
402   ret <8 x bfloat> %c
405 define <8 x bfloat> @fma_maskz_load_312_v8bf16(<8 x bfloat> %x, <8 x bfloat> %y, ptr %zp, i8 %mask) {
406 ; CHECK-LABEL: fma_maskz_load_312_v8bf16:
407 ; CHECK:       # %bb.0:
408 ; CHECK-NEXT:    kmovd %esi, %k1
409 ; CHECK-NEXT:    vfmadd132nepbf16 (%rdi), %xmm1, %xmm0 {%k1} {z}
410 ; CHECK-NEXT:    retq
411   %z = load <8 x bfloat>, ptr %zp
412   %a = call <8 x bfloat> @llvm.fma.v8bf16(<8 x bfloat> %z, <8 x bfloat> %x, <8 x bfloat> %y)
413   %b = bitcast i8 %mask to <8 x i1>
414   %c = select <8 x i1> %b, <8 x bfloat> %a, <8 x bfloat> zeroinitializer
415   ret <8 x bfloat> %c
418 define <16 x bfloat> @fma_123_v16bf16(<16 x bfloat> %x, <16 x bfloat> %y, <16 x bfloat> %z) {
419 ; CHECK-LABEL: fma_123_v16bf16:
420 ; CHECK:       # %bb.0:
421 ; CHECK-NEXT:    vfmadd213nepbf16 %ymm2, %ymm1, %ymm0
422 ; CHECK-NEXT:    retq
423   %a = call <16 x bfloat> @llvm.fma.v16bf16(<16 x bfloat> %x, <16 x bfloat> %y, <16 x bfloat> %z)
424   ret <16 x bfloat> %a
427 define <16 x bfloat> @fma_213_v16bf16(<16 x bfloat> %x, <16 x bfloat> %y, <16 x bfloat> %z) {
428 ; CHECK-LABEL: fma_213_v16bf16:
429 ; CHECK:       # %bb.0:
430 ; CHECK-NEXT:    vfmadd213nepbf16 %ymm2, %ymm1, %ymm0
431 ; CHECK-NEXT:    retq
432   %a = call <16 x bfloat> @llvm.fma.v16bf16(<16 x bfloat> %y, <16 x bfloat> %x, <16 x bfloat> %z)
433   ret <16 x bfloat> %a
436 define <16 x bfloat> @fma_231_v16bf16(<16 x bfloat> %x, <16 x bfloat> %y, <16 x bfloat> %z) {
437 ; CHECK-LABEL: fma_231_v16bf16:
438 ; CHECK:       # %bb.0:
439 ; CHECK-NEXT:    vfmadd231nepbf16 %ymm1, %ymm2, %ymm0
440 ; CHECK-NEXT:    retq
441   %a = call <16 x bfloat> @llvm.fma.v16bf16(<16 x bfloat> %y, <16 x bfloat> %z, <16 x bfloat> %x)
442   ret <16 x bfloat> %a
445 define <16 x bfloat> @fma_321_v16bf16(<16 x bfloat> %x, <16 x bfloat> %y, <16 x bfloat> %z) {
446 ; CHECK-LABEL: fma_321_v16bf16:
447 ; CHECK:       # %bb.0:
448 ; CHECK-NEXT:    vfmadd231nepbf16 %ymm1, %ymm2, %ymm0
449 ; CHECK-NEXT:    retq
450   %a = call <16 x bfloat> @llvm.fma.v16bf16(<16 x bfloat> %z, <16 x bfloat> %y, <16 x bfloat> %x)
451   ret <16 x bfloat> %a
454 define <16 x bfloat> @fma_132_v16bf16(<16 x bfloat> %x, <16 x bfloat> %y, <16 x bfloat> %z) {
455 ; CHECK-LABEL: fma_132_v16bf16:
456 ; CHECK:       # %bb.0:
457 ; CHECK-NEXT:    vfmadd213nepbf16 %ymm1, %ymm2, %ymm0
458 ; CHECK-NEXT:    retq
459   %a = call <16 x bfloat> @llvm.fma.v16bf16(<16 x bfloat> %x, <16 x bfloat> %z, <16 x bfloat> %y)
460   ret <16 x bfloat> %a
463 define <16 x bfloat> @fma_312_v16bf16(<16 x bfloat> %x, <16 x bfloat> %y, <16 x bfloat> %z) {
464 ; CHECK-LABEL: fma_312_v16bf16:
465 ; CHECK:       # %bb.0:
466 ; CHECK-NEXT:    vfmadd213nepbf16 %ymm1, %ymm2, %ymm0
467 ; CHECK-NEXT:    retq
468   %a = call <16 x bfloat> @llvm.fma.v16bf16(<16 x bfloat> %z, <16 x bfloat> %x, <16 x bfloat> %y)
469   ret <16 x bfloat> %a
472 define <16 x bfloat> @fma_load_123_v16bf16(<16 x bfloat> %x, <16 x bfloat> %y, ptr %zp) {
473 ; CHECK-LABEL: fma_load_123_v16bf16:
474 ; CHECK:       # %bb.0:
475 ; CHECK-NEXT:    vfmadd213nepbf16 (%rdi), %ymm1, %ymm0
476 ; CHECK-NEXT:    retq
477   %z = load <16 x bfloat>, ptr %zp
478   %a = call <16 x bfloat> @llvm.fma.v16bf16(<16 x bfloat> %x, <16 x bfloat> %y, <16 x bfloat> %z)
479   ret <16 x bfloat> %a
482 define <16 x bfloat> @fma_load_213_v16bf16(<16 x bfloat> %x, <16 x bfloat> %y, ptr %zp) {
483 ; CHECK-LABEL: fma_load_213_v16bf16:
484 ; CHECK:       # %bb.0:
485 ; CHECK-NEXT:    vfmadd213nepbf16 (%rdi), %ymm1, %ymm0
486 ; CHECK-NEXT:    retq
487   %z = load <16 x bfloat>, ptr %zp
488   %a = call <16 x bfloat> @llvm.fma.v16bf16(<16 x bfloat> %y, <16 x bfloat> %x, <16 x bfloat> %z)
489   ret <16 x bfloat> %a
492 define <16 x bfloat> @fma_load_231_v16bf16(<16 x bfloat> %x, <16 x bfloat> %y, ptr %zp) {
493 ; CHECK-LABEL: fma_load_231_v16bf16:
494 ; CHECK:       # %bb.0:
495 ; CHECK-NEXT:    vfmadd231nepbf16 (%rdi), %ymm1, %ymm0
496 ; CHECK-NEXT:    retq
497   %z = load <16 x bfloat>, ptr %zp
498   %a = call <16 x bfloat> @llvm.fma.v16bf16(<16 x bfloat> %y, <16 x bfloat> %z, <16 x bfloat> %x)
499   ret <16 x bfloat> %a
502 define <16 x bfloat> @fma_load_321_v16bf16(<16 x bfloat> %x, <16 x bfloat> %y, ptr %zp) {
503 ; CHECK-LABEL: fma_load_321_v16bf16:
504 ; CHECK:       # %bb.0:
505 ; CHECK-NEXT:    vfmadd231nepbf16 (%rdi), %ymm1, %ymm0
506 ; CHECK-NEXT:    retq
507   %z = load <16 x bfloat>, ptr %zp
508   %a = call <16 x bfloat> @llvm.fma.v16bf16(<16 x bfloat> %z, <16 x bfloat> %y, <16 x bfloat> %x)
509   ret <16 x bfloat> %a
512 define <16 x bfloat> @fma_load_132_v16bf16(<16 x bfloat> %x, <16 x bfloat> %y, ptr %zp) {
513 ; CHECK-LABEL: fma_load_132_v16bf16:
514 ; CHECK:       # %bb.0:
515 ; CHECK-NEXT:    vfmadd132nepbf16 (%rdi), %ymm1, %ymm0
516 ; CHECK-NEXT:    retq
517   %z = load <16 x bfloat>, ptr %zp
518   %a = call <16 x bfloat> @llvm.fma.v16bf16(<16 x bfloat> %x, <16 x bfloat> %z, <16 x bfloat> %y)
519   ret <16 x bfloat> %a
522 define <16 x bfloat> @fma_load_312_v16bf16(<16 x bfloat> %x, <16 x bfloat> %y, ptr %zp) {
523 ; CHECK-LABEL: fma_load_312_v16bf16:
524 ; CHECK:       # %bb.0:
525 ; CHECK-NEXT:    vfmadd132nepbf16 (%rdi), %ymm1, %ymm0
526 ; CHECK-NEXT:    retq
527   %z = load <16 x bfloat>, ptr %zp
528   %a = call <16 x bfloat> @llvm.fma.v16bf16(<16 x bfloat> %z, <16 x bfloat> %x, <16 x bfloat> %y)
529   ret <16 x bfloat> %a
532 define <16 x bfloat> @fma_mask_123_v16bf16(<16 x bfloat> %x, <16 x bfloat> %y, <16 x bfloat> %z, i16 %mask) {
533 ; CHECK-LABEL: fma_mask_123_v16bf16:
534 ; CHECK:       # %bb.0:
535 ; CHECK-NEXT:    kmovd %edi, %k1
536 ; CHECK-NEXT:    vfmadd132nepbf16 %ymm1, %ymm2, %ymm0 {%k1}
537 ; CHECK-NEXT:    retq
538   %a = call <16 x bfloat> @llvm.fma.v16bf16(<16 x bfloat> %x, <16 x bfloat> %y, <16 x bfloat> %z)
539   %b = bitcast i16 %mask to <16 x i1>
540   %c = select <16 x i1> %b, <16 x bfloat> %a, <16 x bfloat> %x
541   ret <16 x bfloat> %c
544 define <16 x bfloat> @fma_mask_213_v16bf16(<16 x bfloat> %x, <16 x bfloat> %y, <16 x bfloat> %z, i16 %mask) {
545 ; CHECK-LABEL: fma_mask_213_v16bf16:
546 ; CHECK:       # %bb.0:
547 ; CHECK-NEXT:    kmovd %edi, %k1
548 ; CHECK-NEXT:    vfmadd213nepbf16 %ymm2, %ymm1, %ymm0 {%k1}
549 ; CHECK-NEXT:    retq
550   %a = call <16 x bfloat> @llvm.fma.v16bf16(<16 x bfloat> %y, <16 x bfloat> %x, <16 x bfloat> %z)
551   %b = bitcast i16 %mask to <16 x i1>
552   %c = select <16 x i1> %b, <16 x bfloat> %a, <16 x bfloat> %x
553   ret <16 x bfloat> %c
556 define <16 x bfloat> @fma_mask_231_v16bf16(<16 x bfloat> %x, <16 x bfloat> %y, <16 x bfloat> %z, i16 %mask) {
557 ; CHECK-LABEL: fma_mask_231_v16bf16:
558 ; CHECK:       # %bb.0:
559 ; CHECK-NEXT:    kmovd %edi, %k1
560 ; CHECK-NEXT:    vfmadd231nepbf16 %ymm2, %ymm1, %ymm0 {%k1}
561 ; CHECK-NEXT:    retq
562   %a = call <16 x bfloat> @llvm.fma.v16bf16(<16 x bfloat> %y, <16 x bfloat> %z, <16 x bfloat> %x)
563   %b = bitcast i16 %mask to <16 x i1>
564   %c = select <16 x i1> %b, <16 x bfloat> %a, <16 x bfloat> %x
565   ret <16 x bfloat> %c
568 define <16 x bfloat> @fma_mask_321_v16bf16(<16 x bfloat> %x, <16 x bfloat> %y, <16 x bfloat> %z, i16 %mask) {
569 ; CHECK-LABEL: fma_mask_321_v16bf16:
570 ; CHECK:       # %bb.0:
571 ; CHECK-NEXT:    kmovd %edi, %k1
572 ; CHECK-NEXT:    vfmadd231nepbf16 %ymm1, %ymm2, %ymm0 {%k1}
573 ; CHECK-NEXT:    retq
574   %a = call <16 x bfloat> @llvm.fma.v16bf16(<16 x bfloat> %z, <16 x bfloat> %y, <16 x bfloat> %x)
575   %b = bitcast i16 %mask to <16 x i1>
576   %c = select <16 x i1> %b, <16 x bfloat> %a, <16 x bfloat> %x
577   ret <16 x bfloat> %c
580 define <16 x bfloat> @fma_mask_132_v16bf16(<16 x bfloat> %x, <16 x bfloat> %y, <16 x bfloat> %z, i16 %mask) {
581 ; CHECK-LABEL: fma_mask_132_v16bf16:
582 ; CHECK:       # %bb.0:
583 ; CHECK-NEXT:    kmovd %edi, %k1
584 ; CHECK-NEXT:    vfmadd132nepbf16 %ymm2, %ymm1, %ymm0 {%k1}
585 ; CHECK-NEXT:    retq
586   %a = call <16 x bfloat> @llvm.fma.v16bf16(<16 x bfloat> %x, <16 x bfloat> %z, <16 x bfloat> %y)
587   %b = bitcast i16 %mask to <16 x i1>
588   %c = select <16 x i1> %b, <16 x bfloat> %a, <16 x bfloat> %x
589   ret <16 x bfloat> %c
592 define <16 x bfloat> @fma_mask_312_v16bf16(<16 x bfloat> %x, <16 x bfloat> %y, <16 x bfloat> %z, i16 %mask) {
593 ; CHECK-LABEL: fma_mask_312_v16bf16:
594 ; CHECK:       # %bb.0:
595 ; CHECK-NEXT:    kmovd %edi, %k1
596 ; CHECK-NEXT:    vfmadd213nepbf16 %ymm1, %ymm2, %ymm0 {%k1}
597 ; CHECK-NEXT:    retq
598   %a = call <16 x bfloat> @llvm.fma.v16bf16(<16 x bfloat> %z, <16 x bfloat> %x, <16 x bfloat> %y)
599   %b = bitcast i16 %mask to <16 x i1>
600   %c = select <16 x i1> %b, <16 x bfloat> %a, <16 x bfloat> %x
601   ret <16 x bfloat> %c
604 define <16 x bfloat> @fma_maskz_123_v16bf16(<16 x bfloat> %x, <16 x bfloat> %y, <16 x bfloat> %z, i16 %mask) {
605 ; CHECK-LABEL: fma_maskz_123_v16bf16:
606 ; CHECK:       # %bb.0:
607 ; CHECK-NEXT:    kmovd %edi, %k1
608 ; CHECK-NEXT:    vfmadd213nepbf16 %ymm2, %ymm1, %ymm0 {%k1} {z}
609 ; CHECK-NEXT:    retq
610   %a = call <16 x bfloat> @llvm.fma.v16bf16(<16 x bfloat> %x, <16 x bfloat> %y, <16 x bfloat> %z)
611   %b = bitcast i16 %mask to <16 x i1>
612   %c = select <16 x i1> %b, <16 x bfloat> %a, <16 x bfloat> zeroinitializer
613   ret <16 x bfloat> %c
616 define <16 x bfloat> @fma_maskz_213_v16bf16(<16 x bfloat> %x, <16 x bfloat> %y, <16 x bfloat> %z, i16 %mask) {
617 ; CHECK-LABEL: fma_maskz_213_v16bf16:
618 ; CHECK:       # %bb.0:
619 ; CHECK-NEXT:    kmovd %edi, %k1
620 ; CHECK-NEXT:    vfmadd213nepbf16 %ymm2, %ymm1, %ymm0 {%k1} {z}
621 ; CHECK-NEXT:    retq
622   %a = call <16 x bfloat> @llvm.fma.v16bf16(<16 x bfloat> %y, <16 x bfloat> %x, <16 x bfloat> %z)
623   %b = bitcast i16 %mask to <16 x i1>
624   %c = select <16 x i1> %b, <16 x bfloat> %a, <16 x bfloat> zeroinitializer
625   ret <16 x bfloat> %c
628 define <16 x bfloat> @fma_maskz_231_v16bf16(<16 x bfloat> %x, <16 x bfloat> %y, <16 x bfloat> %z, i16 %mask) {
629 ; CHECK-LABEL: fma_maskz_231_v16bf16:
630 ; CHECK:       # %bb.0:
631 ; CHECK-NEXT:    kmovd %edi, %k1
632 ; CHECK-NEXT:    vfmadd231nepbf16 %ymm1, %ymm2, %ymm0 {%k1} {z}
633 ; CHECK-NEXT:    retq
634   %a = call <16 x bfloat> @llvm.fma.v16bf16(<16 x bfloat> %y, <16 x bfloat> %z, <16 x bfloat> %x)
635   %b = bitcast i16 %mask to <16 x i1>
636   %c = select <16 x i1> %b, <16 x bfloat> %a, <16 x bfloat> zeroinitializer
637   ret <16 x bfloat> %c
640 define <16 x bfloat> @fma_maskz_321_v16bf16(<16 x bfloat> %x, <16 x bfloat> %y, <16 x bfloat> %z, i16 %mask) {
641 ; CHECK-LABEL: fma_maskz_321_v16bf16:
642 ; CHECK:       # %bb.0:
643 ; CHECK-NEXT:    kmovd %edi, %k1
644 ; CHECK-NEXT:    vfmadd231nepbf16 %ymm1, %ymm2, %ymm0 {%k1} {z}
645 ; CHECK-NEXT:    retq
646   %a = call <16 x bfloat> @llvm.fma.v16bf16(<16 x bfloat> %z, <16 x bfloat> %y, <16 x bfloat> %x)
647   %b = bitcast i16 %mask to <16 x i1>
648   %c = select <16 x i1> %b, <16 x bfloat> %a, <16 x bfloat> zeroinitializer
649   ret <16 x bfloat> %c
652 define <16 x bfloat> @fma_maskz_132_v16bf16(<16 x bfloat> %x, <16 x bfloat> %y, <16 x bfloat> %z, i16 %mask) {
653 ; CHECK-LABEL: fma_maskz_132_v16bf16:
654 ; CHECK:       # %bb.0:
655 ; CHECK-NEXT:    kmovd %edi, %k1
656 ; CHECK-NEXT:    vfmadd213nepbf16 %ymm1, %ymm2, %ymm0 {%k1} {z}
657 ; CHECK-NEXT:    retq
658   %a = call <16 x bfloat> @llvm.fma.v16bf16(<16 x bfloat> %x, <16 x bfloat> %z, <16 x bfloat> %y)
659   %b = bitcast i16 %mask to <16 x i1>
660   %c = select <16 x i1> %b, <16 x bfloat> %a, <16 x bfloat> zeroinitializer
661   ret <16 x bfloat> %c
664 define <16 x bfloat> @fma_maskz_312_v16bf16(<16 x bfloat> %x, <16 x bfloat> %y, <16 x bfloat> %z, i16 %mask) {
665 ; CHECK-LABEL: fma_maskz_312_v16bf16:
666 ; CHECK:       # %bb.0:
667 ; CHECK-NEXT:    kmovd %edi, %k1
668 ; CHECK-NEXT:    vfmadd213nepbf16 %ymm1, %ymm2, %ymm0 {%k1} {z}
669 ; CHECK-NEXT:    retq
670   %a = call <16 x bfloat> @llvm.fma.v16bf16(<16 x bfloat> %z, <16 x bfloat> %x, <16 x bfloat> %y)
671   %b = bitcast i16 %mask to <16 x i1>
672   %c = select <16 x i1> %b, <16 x bfloat> %a, <16 x bfloat> zeroinitializer
673   ret <16 x bfloat> %c
676 define <16 x bfloat> @fma_mask_load_123_v16bf16(<16 x bfloat> %x, <16 x bfloat> %y, ptr %zp, i16 %mask) {
677 ; CHECK-LABEL: fma_mask_load_123_v16bf16:
678 ; CHECK:       # %bb.0:
679 ; CHECK-NEXT:    kmovd %esi, %k1
680 ; CHECK-NEXT:    vfmadd213nepbf16 (%rdi), %ymm1, %ymm0 {%k1}
681 ; CHECK-NEXT:    retq
682   %z = load <16 x bfloat>, ptr %zp
683   %a = call <16 x bfloat> @llvm.fma.v16bf16(<16 x bfloat> %x, <16 x bfloat> %y, <16 x bfloat> %z)
684   %b = bitcast i16 %mask to <16 x i1>
685   %c = select <16 x i1> %b, <16 x bfloat> %a, <16 x bfloat> %x
686   ret <16 x bfloat> %c
689 define <16 x bfloat> @fma_mask_load_213_v16bf16(<16 x bfloat> %x, <16 x bfloat> %y, ptr %zp, i16 %mask) {
690 ; CHECK-LABEL: fma_mask_load_213_v16bf16:
691 ; CHECK:       # %bb.0:
692 ; CHECK-NEXT:    kmovd %esi, %k1
693 ; CHECK-NEXT:    vfmadd213nepbf16 (%rdi), %ymm1, %ymm0 {%k1}
694 ; CHECK-NEXT:    retq
695   %z = load <16 x bfloat>, ptr %zp
696   %a = call <16 x bfloat> @llvm.fma.v16bf16(<16 x bfloat> %y, <16 x bfloat> %x, <16 x bfloat> %z)
697   %b = bitcast i16 %mask to <16 x i1>
698   %c = select <16 x i1> %b, <16 x bfloat> %a, <16 x bfloat> %x
699   ret <16 x bfloat> %c
702 define <16 x bfloat> @fma_mask_load_231_v16bf16(<16 x bfloat> %x, <16 x bfloat> %y, ptr %zp, i16 %mask) {
703 ; CHECK-LABEL: fma_mask_load_231_v16bf16:
704 ; CHECK:       # %bb.0:
705 ; CHECK-NEXT:    kmovd %esi, %k1
706 ; CHECK-NEXT:    vfmadd231nepbf16 (%rdi), %ymm1, %ymm0 {%k1}
707 ; CHECK-NEXT:    retq
708   %z = load <16 x bfloat>, ptr %zp
709   %a = call <16 x bfloat> @llvm.fma.v16bf16(<16 x bfloat> %y, <16 x bfloat> %z, <16 x bfloat> %x)
710   %b = bitcast i16 %mask to <16 x i1>
711   %c = select <16 x i1> %b, <16 x bfloat> %a, <16 x bfloat> %x
712   ret <16 x bfloat> %c
715 define <16 x bfloat> @fma_mask_load_321_v16bf16(<16 x bfloat> %x, <16 x bfloat> %y, ptr %zp, i16 %mask) {
716 ; CHECK-LABEL: fma_mask_load_321_v16bf16:
717 ; CHECK:       # %bb.0:
718 ; CHECK-NEXT:    kmovd %esi, %k1
719 ; CHECK-NEXT:    vfmadd231nepbf16 (%rdi), %ymm1, %ymm0 {%k1}
720 ; CHECK-NEXT:    retq
721   %z = load <16 x bfloat>, ptr %zp
722   %a = call <16 x bfloat> @llvm.fma.v16bf16(<16 x bfloat> %z, <16 x bfloat> %y, <16 x bfloat> %x)
723   %b = bitcast i16 %mask to <16 x i1>
724   %c = select <16 x i1> %b, <16 x bfloat> %a, <16 x bfloat> %x
725   ret <16 x bfloat> %c
728 define <16 x bfloat> @fma_mask_load_132_v16bf16(<16 x bfloat> %x, <16 x bfloat> %y, ptr %zp, i16 %mask) {
729 ; CHECK-LABEL: fma_mask_load_132_v16bf16:
730 ; CHECK:       # %bb.0:
731 ; CHECK-NEXT:    kmovd %esi, %k1
732 ; CHECK-NEXT:    vfmadd132nepbf16 (%rdi), %ymm1, %ymm0 {%k1}
733 ; CHECK-NEXT:    retq
734   %z = load <16 x bfloat>, ptr %zp
735   %a = call <16 x bfloat> @llvm.fma.v16bf16(<16 x bfloat> %x, <16 x bfloat> %z, <16 x bfloat> %y)
736   %b = bitcast i16 %mask to <16 x i1>
737   %c = select <16 x i1> %b, <16 x bfloat> %a, <16 x bfloat> %x
738   ret <16 x bfloat> %c
741 define <16 x bfloat> @fma_mask_load_312_v16bf16(<16 x bfloat> %x, <16 x bfloat> %y, ptr %zp, i16 %mask) {
742 ; CHECK-LABEL: fma_mask_load_312_v16bf16:
743 ; CHECK:       # %bb.0:
744 ; CHECK-NEXT:    kmovd %esi, %k1
745 ; CHECK-NEXT:    vfmadd132nepbf16 (%rdi), %ymm1, %ymm0 {%k1}
746 ; CHECK-NEXT:    retq
747   %z = load <16 x bfloat>, ptr %zp
748   %a = call <16 x bfloat> @llvm.fma.v16bf16(<16 x bfloat> %z, <16 x bfloat> %x, <16 x bfloat> %y)
749   %b = bitcast i16 %mask to <16 x i1>
750   %c = select <16 x i1> %b, <16 x bfloat> %a, <16 x bfloat> %x
751   ret <16 x bfloat> %c
754 define <16 x bfloat> @fma_maskz_load_123_v16bf16(<16 x bfloat> %x, <16 x bfloat> %y, ptr %zp, i16 %mask) {
755 ; CHECK-LABEL: fma_maskz_load_123_v16bf16:
756 ; CHECK:       # %bb.0:
757 ; CHECK-NEXT:    kmovd %esi, %k1
758 ; CHECK-NEXT:    vfmadd213nepbf16 (%rdi), %ymm1, %ymm0 {%k1} {z}
759 ; CHECK-NEXT:    retq
760   %z = load <16 x bfloat>, ptr %zp
761   %a = call <16 x bfloat> @llvm.fma.v16bf16(<16 x bfloat> %x, <16 x bfloat> %y, <16 x bfloat> %z)
762   %b = bitcast i16 %mask to <16 x i1>
763   %c = select <16 x i1> %b, <16 x bfloat> %a, <16 x bfloat> zeroinitializer
764   ret <16 x bfloat> %c
767 define <16 x bfloat> @fma_maskz_load_213_v16bf16(<16 x bfloat> %x, <16 x bfloat> %y, ptr %zp, i16 %mask) {
768 ; CHECK-LABEL: fma_maskz_load_213_v16bf16:
769 ; CHECK:       # %bb.0:
770 ; CHECK-NEXT:    kmovd %esi, %k1
771 ; CHECK-NEXT:    vfmadd213nepbf16 (%rdi), %ymm1, %ymm0 {%k1} {z}
772 ; CHECK-NEXT:    retq
773   %z = load <16 x bfloat>, ptr %zp
774   %a = call <16 x bfloat> @llvm.fma.v16bf16(<16 x bfloat> %y, <16 x bfloat> %x, <16 x bfloat> %z)
775   %b = bitcast i16 %mask to <16 x i1>
776   %c = select <16 x i1> %b, <16 x bfloat> %a, <16 x bfloat> zeroinitializer
777   ret <16 x bfloat> %c
780 define <16 x bfloat> @fma_maskz_load_231_v16bf16(<16 x bfloat> %x, <16 x bfloat> %y, ptr %zp, i16 %mask) {
781 ; CHECK-LABEL: fma_maskz_load_231_v16bf16:
782 ; CHECK:       # %bb.0:
783 ; CHECK-NEXT:    kmovd %esi, %k1
784 ; CHECK-NEXT:    vfmadd231nepbf16 (%rdi), %ymm1, %ymm0 {%k1} {z}
785 ; CHECK-NEXT:    retq
786   %z = load <16 x bfloat>, ptr %zp
787   %a = call <16 x bfloat> @llvm.fma.v16bf16(<16 x bfloat> %y, <16 x bfloat> %z, <16 x bfloat> %x)
788   %b = bitcast i16 %mask to <16 x i1>
789   %c = select <16 x i1> %b, <16 x bfloat> %a, <16 x bfloat> zeroinitializer
790   ret <16 x bfloat> %c
793 define <16 x bfloat> @fma_maskz_load_321_v16bf16(<16 x bfloat> %x, <16 x bfloat> %y, ptr %zp, i16 %mask) {
794 ; CHECK-LABEL: fma_maskz_load_321_v16bf16:
795 ; CHECK:       # %bb.0:
796 ; CHECK-NEXT:    kmovd %esi, %k1
797 ; CHECK-NEXT:    vfmadd231nepbf16 (%rdi), %ymm1, %ymm0 {%k1} {z}
798 ; CHECK-NEXT:    retq
799   %z = load <16 x bfloat>, ptr %zp
800   %a = call <16 x bfloat> @llvm.fma.v16bf16(<16 x bfloat> %z, <16 x bfloat> %y, <16 x bfloat> %x)
801   %b = bitcast i16 %mask to <16 x i1>
802   %c = select <16 x i1> %b, <16 x bfloat> %a, <16 x bfloat> zeroinitializer
803   ret <16 x bfloat> %c
806 define <16 x bfloat> @fma_maskz_load_132_v16bf16(<16 x bfloat> %x, <16 x bfloat> %y, ptr %zp, i16 %mask) {
807 ; CHECK-LABEL: fma_maskz_load_132_v16bf16:
808 ; CHECK:       # %bb.0:
809 ; CHECK-NEXT:    kmovd %esi, %k1
810 ; CHECK-NEXT:    vfmadd132nepbf16 (%rdi), %ymm1, %ymm0 {%k1} {z}
811 ; CHECK-NEXT:    retq
812   %z = load <16 x bfloat>, ptr %zp
813   %a = call <16 x bfloat> @llvm.fma.v16bf16(<16 x bfloat> %x, <16 x bfloat> %z, <16 x bfloat> %y)
814   %b = bitcast i16 %mask to <16 x i1>
815   %c = select <16 x i1> %b, <16 x bfloat> %a, <16 x bfloat> zeroinitializer
816   ret <16 x bfloat> %c
819 define <16 x bfloat> @fma_maskz_load_312_v16bf16(<16 x bfloat> %x, <16 x bfloat> %y, ptr %zp, i16 %mask) {
820 ; CHECK-LABEL: fma_maskz_load_312_v16bf16:
821 ; CHECK:       # %bb.0:
822 ; CHECK-NEXT:    kmovd %esi, %k1
823 ; CHECK-NEXT:    vfmadd132nepbf16 (%rdi), %ymm1, %ymm0 {%k1} {z}
824 ; CHECK-NEXT:    retq
825   %z = load <16 x bfloat>, ptr %zp
826   %a = call <16 x bfloat> @llvm.fma.v16bf16(<16 x bfloat> %z, <16 x bfloat> %x, <16 x bfloat> %y)
827   %b = bitcast i16 %mask to <16 x i1>
828   %c = select <16 x i1> %b, <16 x bfloat> %a, <16 x bfloat> zeroinitializer
829   ret <16 x bfloat> %c
832 define <32 x bfloat> @fma_123_v32bf16(<32 x bfloat> %x, <32 x bfloat> %y, <32 x bfloat> %z) {
833 ; CHECK-LABEL: fma_123_v32bf16:
834 ; CHECK:       # %bb.0:
835 ; CHECK-NEXT:    vfmadd213nepbf16 %zmm2, %zmm1, %zmm0
836 ; CHECK-NEXT:    retq
837   %a = call <32 x bfloat> @llvm.fma.v32bf16(<32 x bfloat> %x, <32 x bfloat> %y, <32 x bfloat> %z)
838   ret <32 x bfloat> %a
841 define <32 x bfloat> @fma_213_v32bf16(<32 x bfloat> %x, <32 x bfloat> %y, <32 x bfloat> %z) {
842 ; CHECK-LABEL: fma_213_v32bf16:
843 ; CHECK:       # %bb.0:
844 ; CHECK-NEXT:    vfmadd213nepbf16 %zmm2, %zmm1, %zmm0
845 ; CHECK-NEXT:    retq
846   %a = call <32 x bfloat> @llvm.fma.v32bf16(<32 x bfloat> %y, <32 x bfloat> %x, <32 x bfloat> %z)
847   ret <32 x bfloat> %a
850 define <32 x bfloat> @fma_231_v32bf16(<32 x bfloat> %x, <32 x bfloat> %y, <32 x bfloat> %z) {
851 ; CHECK-LABEL: fma_231_v32bf16:
852 ; CHECK:       # %bb.0:
853 ; CHECK-NEXT:    vfmadd231nepbf16 %zmm1, %zmm2, %zmm0
854 ; CHECK-NEXT:    retq
855   %a = call <32 x bfloat> @llvm.fma.v32bf16(<32 x bfloat> %y, <32 x bfloat> %z, <32 x bfloat> %x)
856   ret <32 x bfloat> %a
859 define <32 x bfloat> @fma_321_v32bf16(<32 x bfloat> %x, <32 x bfloat> %y, <32 x bfloat> %z) {
860 ; CHECK-LABEL: fma_321_v32bf16:
861 ; CHECK:       # %bb.0:
862 ; CHECK-NEXT:    vfmadd231nepbf16 %zmm1, %zmm2, %zmm0
863 ; CHECK-NEXT:    retq
864   %a = call <32 x bfloat> @llvm.fma.v32bf16(<32 x bfloat> %z, <32 x bfloat> %y, <32 x bfloat> %x)
865   ret <32 x bfloat> %a
868 define <32 x bfloat> @fma_132_v32bf16(<32 x bfloat> %x, <32 x bfloat> %y, <32 x bfloat> %z) {
869 ; CHECK-LABEL: fma_132_v32bf16:
870 ; CHECK:       # %bb.0:
871 ; CHECK-NEXT:    vfmadd213nepbf16 %zmm1, %zmm2, %zmm0
872 ; CHECK-NEXT:    retq
873   %a = call <32 x bfloat> @llvm.fma.v32bf16(<32 x bfloat> %x, <32 x bfloat> %z, <32 x bfloat> %y)
874   ret <32 x bfloat> %a
877 define <32 x bfloat> @fma_312_v32bf16(<32 x bfloat> %x, <32 x bfloat> %y, <32 x bfloat> %z) {
878 ; CHECK-LABEL: fma_312_v32bf16:
879 ; CHECK:       # %bb.0:
880 ; CHECK-NEXT:    vfmadd213nepbf16 %zmm1, %zmm2, %zmm0
881 ; CHECK-NEXT:    retq
882   %a = call <32 x bfloat> @llvm.fma.v32bf16(<32 x bfloat> %z, <32 x bfloat> %x, <32 x bfloat> %y)
883   ret <32 x bfloat> %a
886 define <32 x bfloat> @fma_load_123_v32bf16(<32 x bfloat> %x, <32 x bfloat> %y, ptr %zp) {
887 ; CHECK-LABEL: fma_load_123_v32bf16:
888 ; CHECK:       # %bb.0:
889 ; CHECK-NEXT:    vfmadd213nepbf16 (%rdi), %zmm1, %zmm0
890 ; CHECK-NEXT:    retq
891   %z = load <32 x bfloat>, ptr %zp
892   %a = call <32 x bfloat> @llvm.fma.v32bf16(<32 x bfloat> %x, <32 x bfloat> %y, <32 x bfloat> %z)
893   ret <32 x bfloat> %a
896 define <32 x bfloat> @fma_load_213_v32bf16(<32 x bfloat> %x, <32 x bfloat> %y, ptr %zp) {
897 ; CHECK-LABEL: fma_load_213_v32bf16:
898 ; CHECK:       # %bb.0:
899 ; CHECK-NEXT:    vfmadd213nepbf16 (%rdi), %zmm1, %zmm0
900 ; CHECK-NEXT:    retq
901   %z = load <32 x bfloat>, ptr %zp
902   %a = call <32 x bfloat> @llvm.fma.v32bf16(<32 x bfloat> %y, <32 x bfloat> %x, <32 x bfloat> %z)
903   ret <32 x bfloat> %a
906 define <32 x bfloat> @fma_load_231_v32bf16(<32 x bfloat> %x, <32 x bfloat> %y, ptr %zp) {
907 ; CHECK-LABEL: fma_load_231_v32bf16:
908 ; CHECK:       # %bb.0:
909 ; CHECK-NEXT:    vfmadd231nepbf16 (%rdi), %zmm1, %zmm0
910 ; CHECK-NEXT:    retq
911   %z = load <32 x bfloat>, ptr %zp
912   %a = call <32 x bfloat> @llvm.fma.v32bf16(<32 x bfloat> %y, <32 x bfloat> %z, <32 x bfloat> %x)
913   ret <32 x bfloat> %a
916 define <32 x bfloat> @fma_load_321_v32bf16(<32 x bfloat> %x, <32 x bfloat> %y, ptr %zp) {
917 ; CHECK-LABEL: fma_load_321_v32bf16:
918 ; CHECK:       # %bb.0:
919 ; CHECK-NEXT:    vfmadd231nepbf16 (%rdi), %zmm1, %zmm0
920 ; CHECK-NEXT:    retq
921   %z = load <32 x bfloat>, ptr %zp
922   %a = call <32 x bfloat> @llvm.fma.v32bf16(<32 x bfloat> %z, <32 x bfloat> %y, <32 x bfloat> %x)
923   ret <32 x bfloat> %a
926 define <32 x bfloat> @fma_load_132_v32bf16(<32 x bfloat> %x, <32 x bfloat> %y, ptr %zp) {
927 ; CHECK-LABEL: fma_load_132_v32bf16:
928 ; CHECK:       # %bb.0:
929 ; CHECK-NEXT:    vfmadd132nepbf16 (%rdi), %zmm1, %zmm0
930 ; CHECK-NEXT:    retq
931   %z = load <32 x bfloat>, ptr %zp
932   %a = call <32 x bfloat> @llvm.fma.v32bf16(<32 x bfloat> %x, <32 x bfloat> %z, <32 x bfloat> %y)
933   ret <32 x bfloat> %a
936 define <32 x bfloat> @fma_load_312_v32bf16(<32 x bfloat> %x, <32 x bfloat> %y, ptr %zp) {
937 ; CHECK-LABEL: fma_load_312_v32bf16:
938 ; CHECK:       # %bb.0:
939 ; CHECK-NEXT:    vfmadd132nepbf16 (%rdi), %zmm1, %zmm0
940 ; CHECK-NEXT:    retq
941   %z = load <32 x bfloat>, ptr %zp
942   %a = call <32 x bfloat> @llvm.fma.v32bf16(<32 x bfloat> %z, <32 x bfloat> %x, <32 x bfloat> %y)
943   ret <32 x bfloat> %a
946 define <32 x bfloat> @fma_mask_123_v32bf16(<32 x bfloat> %x, <32 x bfloat> %y, <32 x bfloat> %z, i32 %mask) {
947 ; CHECK-LABEL: fma_mask_123_v32bf16:
948 ; CHECK:       # %bb.0:
949 ; CHECK-NEXT:    kmovd %edi, %k1
950 ; CHECK-NEXT:    vfmadd132nepbf16 %zmm1, %zmm2, %zmm0 {%k1}
951 ; CHECK-NEXT:    retq
952   %a = call <32 x bfloat> @llvm.fma.v32bf16(<32 x bfloat> %x, <32 x bfloat> %y, <32 x bfloat> %z)
953   %b = bitcast i32 %mask to <32 x i1>
954   %c = select <32 x i1> %b, <32 x bfloat> %a, <32 x bfloat> %x
955   ret <32 x bfloat> %c
958 define <32 x bfloat> @fma_mask_213_v32bf16(<32 x bfloat> %x, <32 x bfloat> %y, <32 x bfloat> %z, i32 %mask) {
959 ; CHECK-LABEL: fma_mask_213_v32bf16:
960 ; CHECK:       # %bb.0:
961 ; CHECK-NEXT:    kmovd %edi, %k1
962 ; CHECK-NEXT:    vfmadd213nepbf16 %zmm2, %zmm1, %zmm0 {%k1}
963 ; CHECK-NEXT:    retq
964   %a = call <32 x bfloat> @llvm.fma.v32bf16(<32 x bfloat> %y, <32 x bfloat> %x, <32 x bfloat> %z)
965   %b = bitcast i32 %mask to <32 x i1>
966   %c = select <32 x i1> %b, <32 x bfloat> %a, <32 x bfloat> %x
967   ret <32 x bfloat> %c
970 define <32 x bfloat> @fma_mask_231_v32bf16(<32 x bfloat> %x, <32 x bfloat> %y, <32 x bfloat> %z, i32 %mask) {
971 ; CHECK-LABEL: fma_mask_231_v32bf16:
972 ; CHECK:       # %bb.0:
973 ; CHECK-NEXT:    kmovd %edi, %k1
974 ; CHECK-NEXT:    vfmadd231nepbf16 %zmm2, %zmm1, %zmm0 {%k1}
975 ; CHECK-NEXT:    retq
976   %a = call <32 x bfloat> @llvm.fma.v32bf16(<32 x bfloat> %y, <32 x bfloat> %z, <32 x bfloat> %x)
977   %b = bitcast i32 %mask to <32 x i1>
978   %c = select <32 x i1> %b, <32 x bfloat> %a, <32 x bfloat> %x
979   ret <32 x bfloat> %c
982 define <32 x bfloat> @fma_mask_321_v32bf16(<32 x bfloat> %x, <32 x bfloat> %y, <32 x bfloat> %z, i32 %mask) {
983 ; CHECK-LABEL: fma_mask_321_v32bf16:
984 ; CHECK:       # %bb.0:
985 ; CHECK-NEXT:    kmovd %edi, %k1
986 ; CHECK-NEXT:    vfmadd231nepbf16 %zmm1, %zmm2, %zmm0 {%k1}
987 ; CHECK-NEXT:    retq
988   %a = call <32 x bfloat> @llvm.fma.v32bf16(<32 x bfloat> %z, <32 x bfloat> %y, <32 x bfloat> %x)
989   %b = bitcast i32 %mask to <32 x i1>
990   %c = select <32 x i1> %b, <32 x bfloat> %a, <32 x bfloat> %x
991   ret <32 x bfloat> %c
994 define <32 x bfloat> @fma_mask_132_v32bf16(<32 x bfloat> %x, <32 x bfloat> %y, <32 x bfloat> %z, i32 %mask) {
995 ; CHECK-LABEL: fma_mask_132_v32bf16:
996 ; CHECK:       # %bb.0:
997 ; CHECK-NEXT:    kmovd %edi, %k1
998 ; CHECK-NEXT:    vfmadd132nepbf16 %zmm2, %zmm1, %zmm0 {%k1}
999 ; CHECK-NEXT:    retq
1000   %a = call <32 x bfloat> @llvm.fma.v32bf16(<32 x bfloat> %x, <32 x bfloat> %z, <32 x bfloat> %y)
1001   %b = bitcast i32 %mask to <32 x i1>
1002   %c = select <32 x i1> %b, <32 x bfloat> %a, <32 x bfloat> %x
1003   ret <32 x bfloat> %c
1006 define <32 x bfloat> @fma_mask_312_v32bf16(<32 x bfloat> %x, <32 x bfloat> %y, <32 x bfloat> %z, i32 %mask) {
1007 ; CHECK-LABEL: fma_mask_312_v32bf16:
1008 ; CHECK:       # %bb.0:
1009 ; CHECK-NEXT:    kmovd %edi, %k1
1010 ; CHECK-NEXT:    vfmadd213nepbf16 %zmm1, %zmm2, %zmm0 {%k1}
1011 ; CHECK-NEXT:    retq
1012   %a = call <32 x bfloat> @llvm.fma.v32bf16(<32 x bfloat> %z, <32 x bfloat> %x, <32 x bfloat> %y)
1013   %b = bitcast i32 %mask to <32 x i1>
1014   %c = select <32 x i1> %b, <32 x bfloat> %a, <32 x bfloat> %x
1015   ret <32 x bfloat> %c
1018 define <32 x bfloat> @fma_maskz_123_v32bf16(<32 x bfloat> %x, <32 x bfloat> %y, <32 x bfloat> %z, i32 %mask) {
1019 ; CHECK-LABEL: fma_maskz_123_v32bf16:
1020 ; CHECK:       # %bb.0:
1021 ; CHECK-NEXT:    kmovd %edi, %k1
1022 ; CHECK-NEXT:    vfmadd213nepbf16 %zmm2, %zmm1, %zmm0 {%k1} {z}
1023 ; CHECK-NEXT:    retq
1024   %a = call <32 x bfloat> @llvm.fma.v32bf16(<32 x bfloat> %x, <32 x bfloat> %y, <32 x bfloat> %z)
1025   %b = bitcast i32 %mask to <32 x i1>
1026   %c = select <32 x i1> %b, <32 x bfloat> %a, <32 x bfloat> zeroinitializer
1027   ret <32 x bfloat> %c
1030 define <32 x bfloat> @fma_maskz_213_v32bf16(<32 x bfloat> %x, <32 x bfloat> %y, <32 x bfloat> %z, i32 %mask) {
1031 ; CHECK-LABEL: fma_maskz_213_v32bf16:
1032 ; CHECK:       # %bb.0:
1033 ; CHECK-NEXT:    kmovd %edi, %k1
1034 ; CHECK-NEXT:    vfmadd213nepbf16 %zmm2, %zmm1, %zmm0 {%k1} {z}
1035 ; CHECK-NEXT:    retq
1036   %a = call <32 x bfloat> @llvm.fma.v32bf16(<32 x bfloat> %y, <32 x bfloat> %x, <32 x bfloat> %z)
1037   %b = bitcast i32 %mask to <32 x i1>
1038   %c = select <32 x i1> %b, <32 x bfloat> %a, <32 x bfloat> zeroinitializer
1039   ret <32 x bfloat> %c
1042 define <32 x bfloat> @fma_maskz_231_v32bf16(<32 x bfloat> %x, <32 x bfloat> %y, <32 x bfloat> %z, i32 %mask) {
1043 ; CHECK-LABEL: fma_maskz_231_v32bf16:
1044 ; CHECK:       # %bb.0:
1045 ; CHECK-NEXT:    kmovd %edi, %k1
1046 ; CHECK-NEXT:    vfmadd231nepbf16 %zmm1, %zmm2, %zmm0 {%k1} {z}
1047 ; CHECK-NEXT:    retq
1048   %a = call <32 x bfloat> @llvm.fma.v32bf16(<32 x bfloat> %y, <32 x bfloat> %z, <32 x bfloat> %x)
1049   %b = bitcast i32 %mask to <32 x i1>
1050   %c = select <32 x i1> %b, <32 x bfloat> %a, <32 x bfloat> zeroinitializer
1051   ret <32 x bfloat> %c
1054 define <32 x bfloat> @fma_maskz_321_v32bf16(<32 x bfloat> %x, <32 x bfloat> %y, <32 x bfloat> %z, i32 %mask) {
1055 ; CHECK-LABEL: fma_maskz_321_v32bf16:
1056 ; CHECK:       # %bb.0:
1057 ; CHECK-NEXT:    kmovd %edi, %k1
1058 ; CHECK-NEXT:    vfmadd231nepbf16 %zmm1, %zmm2, %zmm0 {%k1} {z}
1059 ; CHECK-NEXT:    retq
1060   %a = call <32 x bfloat> @llvm.fma.v32bf16(<32 x bfloat> %z, <32 x bfloat> %y, <32 x bfloat> %x)
1061   %b = bitcast i32 %mask to <32 x i1>
1062   %c = select <32 x i1> %b, <32 x bfloat> %a, <32 x bfloat> zeroinitializer
1063   ret <32 x bfloat> %c
1066 define <32 x bfloat> @fma_maskz_132_v32bf16(<32 x bfloat> %x, <32 x bfloat> %y, <32 x bfloat> %z, i32 %mask) {
1067 ; CHECK-LABEL: fma_maskz_132_v32bf16:
1068 ; CHECK:       # %bb.0:
1069 ; CHECK-NEXT:    kmovd %edi, %k1
1070 ; CHECK-NEXT:    vfmadd213nepbf16 %zmm1, %zmm2, %zmm0 {%k1} {z}
1071 ; CHECK-NEXT:    retq
1072   %a = call <32 x bfloat> @llvm.fma.v32bf16(<32 x bfloat> %x, <32 x bfloat> %z, <32 x bfloat> %y)
1073   %b = bitcast i32 %mask to <32 x i1>
1074   %c = select <32 x i1> %b, <32 x bfloat> %a, <32 x bfloat> zeroinitializer
1075   ret <32 x bfloat> %c
1078 define <32 x bfloat> @fma_maskz_312_v32bf16(<32 x bfloat> %x, <32 x bfloat> %y, <32 x bfloat> %z, i32 %mask) {
1079 ; CHECK-LABEL: fma_maskz_312_v32bf16:
1080 ; CHECK:       # %bb.0:
1081 ; CHECK-NEXT:    kmovd %edi, %k1
1082 ; CHECK-NEXT:    vfmadd213nepbf16 %zmm1, %zmm2, %zmm0 {%k1} {z}
1083 ; CHECK-NEXT:    retq
1084   %a = call <32 x bfloat> @llvm.fma.v32bf16(<32 x bfloat> %z, <32 x bfloat> %x, <32 x bfloat> %y)
1085   %b = bitcast i32 %mask to <32 x i1>
1086   %c = select <32 x i1> %b, <32 x bfloat> %a, <32 x bfloat> zeroinitializer
1087   ret <32 x bfloat> %c
1090 define <32 x bfloat> @fma_mask_load_123_v32bf16(<32 x bfloat> %x, <32 x bfloat> %y, ptr %zp, i32 %mask) {
1091 ; CHECK-LABEL: fma_mask_load_123_v32bf16:
1092 ; CHECK:       # %bb.0:
1093 ; CHECK-NEXT:    kmovd %esi, %k1
1094 ; CHECK-NEXT:    vfmadd213nepbf16 (%rdi), %zmm1, %zmm0 {%k1}
1095 ; CHECK-NEXT:    retq
1096   %z = load <32 x bfloat>, ptr %zp
1097   %a = call <32 x bfloat> @llvm.fma.v32bf16(<32 x bfloat> %x, <32 x bfloat> %y, <32 x bfloat> %z)
1098   %b = bitcast i32 %mask to <32 x i1>
1099   %c = select <32 x i1> %b, <32 x bfloat> %a, <32 x bfloat> %x
1100   ret <32 x bfloat> %c
1103 define <32 x bfloat> @fma_mask_load_213_v32bf16(<32 x bfloat> %x, <32 x bfloat> %y, ptr %zp, i32 %mask) {
1104 ; CHECK-LABEL: fma_mask_load_213_v32bf16:
1105 ; CHECK:       # %bb.0:
1106 ; CHECK-NEXT:    kmovd %esi, %k1
1107 ; CHECK-NEXT:    vfmadd213nepbf16 (%rdi), %zmm1, %zmm0 {%k1}
1108 ; CHECK-NEXT:    retq
1109   %z = load <32 x bfloat>, ptr %zp
1110   %a = call <32 x bfloat> @llvm.fma.v32bf16(<32 x bfloat> %y, <32 x bfloat> %x, <32 x bfloat> %z)
1111   %b = bitcast i32 %mask to <32 x i1>
1112   %c = select <32 x i1> %b, <32 x bfloat> %a, <32 x bfloat> %x
1113   ret <32 x bfloat> %c
1116 define <32 x bfloat> @fma_mask_load_231_v32bf16(<32 x bfloat> %x, <32 x bfloat> %y, ptr %zp, i32 %mask) {
1117 ; CHECK-LABEL: fma_mask_load_231_v32bf16:
1118 ; CHECK:       # %bb.0:
1119 ; CHECK-NEXT:    kmovd %esi, %k1
1120 ; CHECK-NEXT:    vfmadd231nepbf16 (%rdi), %zmm1, %zmm0 {%k1}
1121 ; CHECK-NEXT:    retq
1122   %z = load <32 x bfloat>, ptr %zp
1123   %a = call <32 x bfloat> @llvm.fma.v32bf16(<32 x bfloat> %y, <32 x bfloat> %z, <32 x bfloat> %x)
1124   %b = bitcast i32 %mask to <32 x i1>
1125   %c = select <32 x i1> %b, <32 x bfloat> %a, <32 x bfloat> %x
1126   ret <32 x bfloat> %c
1129 define <32 x bfloat> @fma_mask_load_321_v32bf16(<32 x bfloat> %x, <32 x bfloat> %y, ptr %zp, i32 %mask) {
1130 ; CHECK-LABEL: fma_mask_load_321_v32bf16:
1131 ; CHECK:       # %bb.0:
1132 ; CHECK-NEXT:    kmovd %esi, %k1
1133 ; CHECK-NEXT:    vfmadd231nepbf16 (%rdi), %zmm1, %zmm0 {%k1}
1134 ; CHECK-NEXT:    retq
1135   %z = load <32 x bfloat>, ptr %zp
1136   %a = call <32 x bfloat> @llvm.fma.v32bf16(<32 x bfloat> %z, <32 x bfloat> %y, <32 x bfloat> %x)
1137   %b = bitcast i32 %mask to <32 x i1>
1138   %c = select <32 x i1> %b, <32 x bfloat> %a, <32 x bfloat> %x
1139   ret <32 x bfloat> %c
1142 define <32 x bfloat> @fma_mask_load_132_v32bf16(<32 x bfloat> %x, <32 x bfloat> %y, ptr %zp, i32 %mask) {
1143 ; CHECK-LABEL: fma_mask_load_132_v32bf16:
1144 ; CHECK:       # %bb.0:
1145 ; CHECK-NEXT:    kmovd %esi, %k1
1146 ; CHECK-NEXT:    vfmadd132nepbf16 (%rdi), %zmm1, %zmm0 {%k1}
1147 ; CHECK-NEXT:    retq
1148   %z = load <32 x bfloat>, ptr %zp
1149   %a = call <32 x bfloat> @llvm.fma.v32bf16(<32 x bfloat> %x, <32 x bfloat> %z, <32 x bfloat> %y)
1150   %b = bitcast i32 %mask to <32 x i1>
1151   %c = select <32 x i1> %b, <32 x bfloat> %a, <32 x bfloat> %x
1152   ret <32 x bfloat> %c
1155 define <32 x bfloat> @fma_mask_load_312_v32bf16(<32 x bfloat> %x, <32 x bfloat> %y, ptr %zp, i32 %mask) {
1156 ; CHECK-LABEL: fma_mask_load_312_v32bf16:
1157 ; CHECK:       # %bb.0:
1158 ; CHECK-NEXT:    kmovd %esi, %k1
1159 ; CHECK-NEXT:    vfmadd132nepbf16 (%rdi), %zmm1, %zmm0 {%k1}
1160 ; CHECK-NEXT:    retq
1161   %z = load <32 x bfloat>, ptr %zp
1162   %a = call <32 x bfloat> @llvm.fma.v32bf16(<32 x bfloat> %z, <32 x bfloat> %x, <32 x bfloat> %y)
1163   %b = bitcast i32 %mask to <32 x i1>
1164   %c = select <32 x i1> %b, <32 x bfloat> %a, <32 x bfloat> %x
1165   ret <32 x bfloat> %c
1168 define <32 x bfloat> @fma_maskz_load_123_v32bf16(<32 x bfloat> %x, <32 x bfloat> %y, ptr %zp, i32 %mask) {
1169 ; CHECK-LABEL: fma_maskz_load_123_v32bf16:
1170 ; CHECK:       # %bb.0:
1171 ; CHECK-NEXT:    kmovd %esi, %k1
1172 ; CHECK-NEXT:    vfmadd213nepbf16 (%rdi), %zmm1, %zmm0 {%k1} {z}
1173 ; CHECK-NEXT:    retq
1174   %z = load <32 x bfloat>, ptr %zp
1175   %a = call <32 x bfloat> @llvm.fma.v32bf16(<32 x bfloat> %x, <32 x bfloat> %y, <32 x bfloat> %z)
1176   %b = bitcast i32 %mask to <32 x i1>
1177   %c = select <32 x i1> %b, <32 x bfloat> %a, <32 x bfloat> zeroinitializer
1178   ret <32 x bfloat> %c
1181 define <32 x bfloat> @fma_maskz_load_213_v32bf16(<32 x bfloat> %x, <32 x bfloat> %y, ptr %zp, i32 %mask) {
1182 ; CHECK-LABEL: fma_maskz_load_213_v32bf16:
1183 ; CHECK:       # %bb.0:
1184 ; CHECK-NEXT:    kmovd %esi, %k1
1185 ; CHECK-NEXT:    vfmadd213nepbf16 (%rdi), %zmm1, %zmm0 {%k1} {z}
1186 ; CHECK-NEXT:    retq
1187   %z = load <32 x bfloat>, ptr %zp
1188   %a = call <32 x bfloat> @llvm.fma.v32bf16(<32 x bfloat> %y, <32 x bfloat> %x, <32 x bfloat> %z)
1189   %b = bitcast i32 %mask to <32 x i1>
1190   %c = select <32 x i1> %b, <32 x bfloat> %a, <32 x bfloat> zeroinitializer
1191   ret <32 x bfloat> %c
1194 define <32 x bfloat> @fma_maskz_load_231_v32bf16(<32 x bfloat> %x, <32 x bfloat> %y, ptr %zp, i32 %mask) {
1195 ; CHECK-LABEL: fma_maskz_load_231_v32bf16:
1196 ; CHECK:       # %bb.0:
1197 ; CHECK-NEXT:    kmovd %esi, %k1
1198 ; CHECK-NEXT:    vfmadd231nepbf16 (%rdi), %zmm1, %zmm0 {%k1} {z}
1199 ; CHECK-NEXT:    retq
1200   %z = load <32 x bfloat>, ptr %zp
1201   %a = call <32 x bfloat> @llvm.fma.v32bf16(<32 x bfloat> %y, <32 x bfloat> %z, <32 x bfloat> %x)
1202   %b = bitcast i32 %mask to <32 x i1>
1203   %c = select <32 x i1> %b, <32 x bfloat> %a, <32 x bfloat> zeroinitializer
1204   ret <32 x bfloat> %c
1207 define <32 x bfloat> @fma_maskz_load_321_v32bf16(<32 x bfloat> %x, <32 x bfloat> %y, ptr %zp, i32 %mask) {
1208 ; CHECK-LABEL: fma_maskz_load_321_v32bf16:
1209 ; CHECK:       # %bb.0:
1210 ; CHECK-NEXT:    kmovd %esi, %k1
1211 ; CHECK-NEXT:    vfmadd231nepbf16 (%rdi), %zmm1, %zmm0 {%k1} {z}
1212 ; CHECK-NEXT:    retq
1213   %z = load <32 x bfloat>, ptr %zp
1214   %a = call <32 x bfloat> @llvm.fma.v32bf16(<32 x bfloat> %z, <32 x bfloat> %y, <32 x bfloat> %x)
1215   %b = bitcast i32 %mask to <32 x i1>
1216   %c = select <32 x i1> %b, <32 x bfloat> %a, <32 x bfloat> zeroinitializer
1217   ret <32 x bfloat> %c
1220 define <32 x bfloat> @fma_maskz_load_132_v32bf16(<32 x bfloat> %x, <32 x bfloat> %y, ptr %zp, i32 %mask) {
1221 ; CHECK-LABEL: fma_maskz_load_132_v32bf16:
1222 ; CHECK:       # %bb.0:
1223 ; CHECK-NEXT:    kmovd %esi, %k1
1224 ; CHECK-NEXT:    vfmadd132nepbf16 (%rdi), %zmm1, %zmm0 {%k1} {z}
1225 ; CHECK-NEXT:    retq
1226   %z = load <32 x bfloat>, ptr %zp
1227   %a = call <32 x bfloat> @llvm.fma.v32bf16(<32 x bfloat> %x, <32 x bfloat> %z, <32 x bfloat> %y)
1228   %b = bitcast i32 %mask to <32 x i1>
1229   %c = select <32 x i1> %b, <32 x bfloat> %a, <32 x bfloat> zeroinitializer
1230   ret <32 x bfloat> %c
1233 define <32 x bfloat> @fma_maskz_load_312_v32bf16(<32 x bfloat> %x, <32 x bfloat> %y, ptr %zp, i32 %mask) {
1234 ; CHECK-LABEL: fma_maskz_load_312_v32bf16:
1235 ; CHECK:       # %bb.0:
1236 ; CHECK-NEXT:    kmovd %esi, %k1
1237 ; CHECK-NEXT:    vfmadd132nepbf16 (%rdi), %zmm1, %zmm0 {%k1} {z}
1238 ; CHECK-NEXT:    retq
1239   %z = load <32 x bfloat>, ptr %zp
1240   %a = call <32 x bfloat> @llvm.fma.v32bf16(<32 x bfloat> %z, <32 x bfloat> %x, <32 x bfloat> %y)
1241   %b = bitcast i32 %mask to <32 x i1>
1242   %c = select <32 x i1> %b, <32 x bfloat> %a, <32 x bfloat> zeroinitializer
1243   ret <32 x bfloat> %c