1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve < %s | FileCheck %s
8 define <vscale x 8 x half> @fabd_h(<vscale x 8 x i1> %pg, <vscale x 8 x half> %a, <vscale x 8 x half> %b) {
11 ; CHECK-NEXT: fabd z0.h, p0/m, z0.h, z1.h
13 %out = call <vscale x 8 x half> @llvm.aarch64.sve.fabd.u.nxv8f16(<vscale x 8 x i1> %pg,
14 <vscale x 8 x half> %a,
15 <vscale x 8 x half> %b)
16 ret <vscale x 8 x half> %out
19 define <vscale x 4 x float> @fabd_s(<vscale x 4 x i1> %pg, <vscale x 4 x float> %a, <vscale x 4 x float> %b) {
20 ; CHECK-LABEL: fabd_s:
22 ; CHECK-NEXT: fabd z0.s, p0/m, z0.s, z1.s
24 %out = call <vscale x 4 x float> @llvm.aarch64.sve.fabd.u.nxv4f32(<vscale x 4 x i1> %pg,
25 <vscale x 4 x float> %a,
26 <vscale x 4 x float> %b)
27 ret <vscale x 4 x float> %out
30 define <vscale x 2 x double> @fabd_d(<vscale x 2 x i1> %pg, <vscale x 2 x double> %a, <vscale x 2 x double> %b) {
31 ; CHECK-LABEL: fabd_d:
33 ; CHECK-NEXT: fabd z0.d, p0/m, z0.d, z1.d
35 %out = call <vscale x 2 x double> @llvm.aarch64.sve.fabd.u.nxv2f64(<vscale x 2 x i1> %pg,
36 <vscale x 2 x double> %a,
37 <vscale x 2 x double> %b)
38 ret <vscale x 2 x double> %out
45 define <vscale x 8 x half> @fadd_h(<vscale x 8 x i1> %pg, <vscale x 8 x half> %a, <vscale x 8 x half> %b) {
46 ; CHECK-LABEL: fadd_h:
48 ; CHECK-NEXT: fadd z0.h, p0/m, z0.h, z1.h
50 %out = call <vscale x 8 x half> @llvm.aarch64.sve.fadd.u.nxv8f16(<vscale x 8 x i1> %pg,
51 <vscale x 8 x half> %a,
52 <vscale x 8 x half> %b)
53 ret <vscale x 8 x half> %out
56 define <vscale x 4 x float> @fadd_s(<vscale x 4 x i1> %pg, <vscale x 4 x float> %a, <vscale x 4 x float> %b) {
57 ; CHECK-LABEL: fadd_s:
59 ; CHECK-NEXT: fadd z0.s, p0/m, z0.s, z1.s
61 %out = call <vscale x 4 x float> @llvm.aarch64.sve.fadd.u.nxv4f32(<vscale x 4 x i1> %pg,
62 <vscale x 4 x float> %a,
63 <vscale x 4 x float> %b)
64 ret <vscale x 4 x float> %out
67 define <vscale x 2 x double> @fadd_d(<vscale x 2 x i1> %pg, <vscale x 2 x double> %a, <vscale x 2 x double> %b) {
68 ; CHECK-LABEL: fadd_d:
70 ; CHECK-NEXT: fadd z0.d, p0/m, z0.d, z1.d
72 %out = call <vscale x 2 x double> @llvm.aarch64.sve.fadd.u.nxv2f64(<vscale x 2 x i1> %pg,
73 <vscale x 2 x double> %a,
74 <vscale x 2 x double> %b)
75 ret <vscale x 2 x double> %out
82 define <vscale x 8 x half> @fdiv_h(<vscale x 8 x i1> %pg, <vscale x 8 x half> %a, <vscale x 8 x half> %b) {
83 ; CHECK-LABEL: fdiv_h:
85 ; CHECK-NEXT: fdiv z0.h, p0/m, z0.h, z1.h
87 %out = call <vscale x 8 x half> @llvm.aarch64.sve.fdiv.u.nxv8f16(<vscale x 8 x i1> %pg,
88 <vscale x 8 x half> %a,
89 <vscale x 8 x half> %b)
90 ret <vscale x 8 x half> %out
93 define <vscale x 4 x float> @fdiv_s(<vscale x 4 x i1> %pg, <vscale x 4 x float> %a, <vscale x 4 x float> %b) {
94 ; CHECK-LABEL: fdiv_s:
96 ; CHECK-NEXT: fdiv z0.s, p0/m, z0.s, z1.s
98 %out = call <vscale x 4 x float> @llvm.aarch64.sve.fdiv.u.nxv4f32(<vscale x 4 x i1> %pg,
99 <vscale x 4 x float> %a,
100 <vscale x 4 x float> %b)
101 ret <vscale x 4 x float> %out
104 define <vscale x 2 x double> @fdiv_d(<vscale x 2 x i1> %pg, <vscale x 2 x double> %a, <vscale x 2 x double> %b) {
105 ; CHECK-LABEL: fdiv_d:
107 ; CHECK-NEXT: fdiv z0.d, p0/m, z0.d, z1.d
109 %out = call <vscale x 2 x double> @llvm.aarch64.sve.fdiv.u.nxv2f64(<vscale x 2 x i1> %pg,
110 <vscale x 2 x double> %a,
111 <vscale x 2 x double> %b)
112 ret <vscale x 2 x double> %out
119 define <vscale x 8 x half> @fdivr_h(<vscale x 8 x i1> %pg, <vscale x 8 x half> %a, <vscale x 8 x half> %b) {
120 ; CHECK-LABEL: fdivr_h:
122 ; CHECK-NEXT: fdivr z0.h, p0/m, z0.h, z1.h
124 %out = call <vscale x 8 x half> @llvm.aarch64.sve.fdiv.u.nxv8f16(<vscale x 8 x i1> %pg,
125 <vscale x 8 x half> %b,
126 <vscale x 8 x half> %a)
127 ret <vscale x 8 x half> %out
130 define <vscale x 4 x float> @fdivr_s(<vscale x 4 x i1> %pg, <vscale x 4 x float> %a, <vscale x 4 x float> %b) {
131 ; CHECK-LABEL: fdivr_s:
133 ; CHECK-NEXT: fdivr z0.s, p0/m, z0.s, z1.s
135 %out = call <vscale x 4 x float> @llvm.aarch64.sve.fdiv.u.nxv4f32(<vscale x 4 x i1> %pg,
136 <vscale x 4 x float> %b,
137 <vscale x 4 x float> %a)
138 ret <vscale x 4 x float> %out
141 define <vscale x 2 x double> @fdivr_d(<vscale x 2 x i1> %pg, <vscale x 2 x double> %a, <vscale x 2 x double> %b) {
142 ; CHECK-LABEL: fdivr_d:
144 ; CHECK-NEXT: fdivr z0.d, p0/m, z0.d, z1.d
146 %out = call <vscale x 2 x double> @llvm.aarch64.sve.fdiv.u.nxv2f64(<vscale x 2 x i1> %pg,
147 <vscale x 2 x double> %b,
148 <vscale x 2 x double> %a)
149 ret <vscale x 2 x double> %out
156 define <vscale x 8 x half> @fmad_h(<vscale x 8 x i1> %pg, <vscale x 8 x half> %a, <vscale x 8 x half> %b, <vscale x 8 x half> %c) {
157 ; CHECK-LABEL: fmad_h:
159 ; CHECK-NEXT: fmad z0.h, p0/m, z1.h, z2.h
161 %out = call <vscale x 8 x half> @llvm.aarch64.sve.fmla.u.nxv8f16(<vscale x 8 x i1> %pg,
162 <vscale x 8 x half> %c,
163 <vscale x 8 x half> %a,
164 <vscale x 8 x half> %b)
165 ret <vscale x 8 x half> %out
168 define <vscale x 4 x float> @fmad_s(<vscale x 4 x i1> %pg, <vscale x 4 x float> %a, <vscale x 4 x float> %b, <vscale x 4 x float> %c) {
169 ; CHECK-LABEL: fmad_s:
171 ; CHECK-NEXT: fmad z0.s, p0/m, z1.s, z2.s
173 %out = call <vscale x 4 x float> @llvm.aarch64.sve.fmla.u.nxv4f32(<vscale x 4 x i1> %pg,
174 <vscale x 4 x float> %c,
175 <vscale x 4 x float> %a,
176 <vscale x 4 x float> %b)
177 ret <vscale x 4 x float> %out
180 define <vscale x 2 x double> @fmad_d(<vscale x 2 x i1> %pg, <vscale x 2 x double> %a, <vscale x 2 x double> %b, <vscale x 2 x double> %c) {
181 ; CHECK-LABEL: fmad_d:
183 ; CHECK-NEXT: fmad z0.d, p0/m, z1.d, z2.d
185 %out = call <vscale x 2 x double> @llvm.aarch64.sve.fmla.u.nxv2f64(<vscale x 2 x i1> %pg,
186 <vscale x 2 x double> %c,
187 <vscale x 2 x double> %a,
188 <vscale x 2 x double> %b)
189 ret <vscale x 2 x double> %out
196 define <vscale x 8 x half> @fmax_h(<vscale x 8 x i1> %pg, <vscale x 8 x half> %a, <vscale x 8 x half> %b) {
197 ; CHECK-LABEL: fmax_h:
199 ; CHECK-NEXT: fmax z0.h, p0/m, z0.h, z1.h
201 %out = call <vscale x 8 x half> @llvm.aarch64.sve.fmax.u.nxv8f16(<vscale x 8 x i1> %pg,
202 <vscale x 8 x half> %a,
203 <vscale x 8 x half> %b)
204 ret <vscale x 8 x half> %out
207 define <vscale x 4 x float> @fmax_s(<vscale x 4 x i1> %pg, <vscale x 4 x float> %a, <vscale x 4 x float> %b) {
208 ; CHECK-LABEL: fmax_s:
210 ; CHECK-NEXT: fmax z0.s, p0/m, z0.s, z1.s
212 %out = call <vscale x 4 x float> @llvm.aarch64.sve.fmax.u.nxv4f32(<vscale x 4 x i1> %pg,
213 <vscale x 4 x float> %a,
214 <vscale x 4 x float> %b)
215 ret <vscale x 4 x float> %out
218 define <vscale x 2 x double> @fmax_d(<vscale x 2 x i1> %pg, <vscale x 2 x double> %a, <vscale x 2 x double> %b) {
219 ; CHECK-LABEL: fmax_d:
221 ; CHECK-NEXT: fmax z0.d, p0/m, z0.d, z1.d
223 %out = call <vscale x 2 x double> @llvm.aarch64.sve.fmax.u.nxv2f64(<vscale x 2 x i1> %pg,
224 <vscale x 2 x double> %a,
225 <vscale x 2 x double> %b)
226 ret <vscale x 2 x double> %out
233 define <vscale x 8 x half> @fmaxnm_h(<vscale x 8 x i1> %pg, <vscale x 8 x half> %a, <vscale x 8 x half> %b) {
234 ; CHECK-LABEL: fmaxnm_h:
236 ; CHECK-NEXT: fmaxnm z0.h, p0/m, z0.h, z1.h
238 %out = call <vscale x 8 x half> @llvm.aarch64.sve.fmaxnm.u.nxv8f16(<vscale x 8 x i1> %pg,
239 <vscale x 8 x half> %a,
240 <vscale x 8 x half> %b)
241 ret <vscale x 8 x half> %out
244 define <vscale x 4 x float> @fmaxnm_s(<vscale x 4 x i1> %pg, <vscale x 4 x float> %a, <vscale x 4 x float> %b) {
245 ; CHECK-LABEL: fmaxnm_s:
247 ; CHECK-NEXT: fmaxnm z0.s, p0/m, z0.s, z1.s
249 %out = call <vscale x 4 x float> @llvm.aarch64.sve.fmaxnm.u.nxv4f32(<vscale x 4 x i1> %pg,
250 <vscale x 4 x float> %a,
251 <vscale x 4 x float> %b)
252 ret <vscale x 4 x float> %out
255 define <vscale x 2 x double> @fmaxnm_d(<vscale x 2 x i1> %pg, <vscale x 2 x double> %a, <vscale x 2 x double> %b) {
256 ; CHECK-LABEL: fmaxnm_d:
258 ; CHECK-NEXT: fmaxnm z0.d, p0/m, z0.d, z1.d
260 %out = call <vscale x 2 x double> @llvm.aarch64.sve.fmaxnm.u.nxv2f64(<vscale x 2 x i1> %pg,
261 <vscale x 2 x double> %a,
262 <vscale x 2 x double> %b)
263 ret <vscale x 2 x double> %out
270 define <vscale x 8 x half> @fmin_h(<vscale x 8 x i1> %pg, <vscale x 8 x half> %a, <vscale x 8 x half> %b) {
271 ; CHECK-LABEL: fmin_h:
273 ; CHECK-NEXT: fmin z0.h, p0/m, z0.h, z1.h
275 %out = call <vscale x 8 x half> @llvm.aarch64.sve.fmin.u.nxv8f16(<vscale x 8 x i1> %pg,
276 <vscale x 8 x half> %a,
277 <vscale x 8 x half> %b)
278 ret <vscale x 8 x half> %out
281 define <vscale x 4 x float> @fmin_s(<vscale x 4 x i1> %pg, <vscale x 4 x float> %a, <vscale x 4 x float> %b) {
282 ; CHECK-LABEL: fmin_s:
284 ; CHECK-NEXT: fmin z0.s, p0/m, z0.s, z1.s
286 %out = call <vscale x 4 x float> @llvm.aarch64.sve.fmin.u.nxv4f32(<vscale x 4 x i1> %pg,
287 <vscale x 4 x float> %a,
288 <vscale x 4 x float> %b)
289 ret <vscale x 4 x float> %out
292 define <vscale x 2 x double> @fmin_d(<vscale x 2 x i1> %pg, <vscale x 2 x double> %a, <vscale x 2 x double> %b) {
293 ; CHECK-LABEL: fmin_d:
295 ; CHECK-NEXT: fmin z0.d, p0/m, z0.d, z1.d
297 %out = call <vscale x 2 x double> @llvm.aarch64.sve.fmin.u.nxv2f64(<vscale x 2 x i1> %pg,
298 <vscale x 2 x double> %a,
299 <vscale x 2 x double> %b)
300 ret <vscale x 2 x double> %out
307 define <vscale x 8 x half> @fminnm_h(<vscale x 8 x i1> %pg, <vscale x 8 x half> %a, <vscale x 8 x half> %b) {
308 ; CHECK-LABEL: fminnm_h:
310 ; CHECK-NEXT: fminnm z0.h, p0/m, z0.h, z1.h
312 %out = call <vscale x 8 x half> @llvm.aarch64.sve.fminnm.u.nxv8f16(<vscale x 8 x i1> %pg,
313 <vscale x 8 x half> %a,
314 <vscale x 8 x half> %b)
315 ret <vscale x 8 x half> %out
318 define <vscale x 4 x float> @fminnm_s(<vscale x 4 x i1> %pg, <vscale x 4 x float> %a, <vscale x 4 x float> %b) {
319 ; CHECK-LABEL: fminnm_s:
321 ; CHECK-NEXT: fminnm z0.s, p0/m, z0.s, z1.s
323 %out = call <vscale x 4 x float> @llvm.aarch64.sve.fminnm.u.nxv4f32(<vscale x 4 x i1> %pg,
324 <vscale x 4 x float> %a,
325 <vscale x 4 x float> %b)
326 ret <vscale x 4 x float> %out
329 define <vscale x 2 x double> @fminnm_d(<vscale x 2 x i1> %pg, <vscale x 2 x double> %a, <vscale x 2 x double> %b) {
330 ; CHECK-LABEL: fminnm_d:
332 ; CHECK-NEXT: fminnm z0.d, p0/m, z0.d, z1.d
334 %out = call <vscale x 2 x double> @llvm.aarch64.sve.fminnm.u.nxv2f64(<vscale x 2 x i1> %pg,
335 <vscale x 2 x double> %a,
336 <vscale x 2 x double> %b)
337 ret <vscale x 2 x double> %out
344 define <vscale x 8 x half> @fmla_h(<vscale x 8 x i1> %pg, <vscale x 8 x half> %a, <vscale x 8 x half> %b, <vscale x 8 x half> %c) {
345 ; CHECK-LABEL: fmla_h:
347 ; CHECK-NEXT: fmla z0.h, p0/m, z1.h, z2.h
349 %out = call <vscale x 8 x half> @llvm.aarch64.sve.fmla.u.nxv8f16(<vscale x 8 x i1> %pg,
350 <vscale x 8 x half> %a,
351 <vscale x 8 x half> %b,
352 <vscale x 8 x half> %c)
353 ret <vscale x 8 x half> %out
356 define <vscale x 4 x float> @fmla_s(<vscale x 4 x i1> %pg, <vscale x 4 x float> %a, <vscale x 4 x float> %b, <vscale x 4 x float> %c) {
357 ; CHECK-LABEL: fmla_s:
359 ; CHECK-NEXT: fmla z0.s, p0/m, z1.s, z2.s
361 %out = call <vscale x 4 x float> @llvm.aarch64.sve.fmla.u.nxv4f32(<vscale x 4 x i1> %pg,
362 <vscale x 4 x float> %a,
363 <vscale x 4 x float> %b,
364 <vscale x 4 x float> %c)
365 ret <vscale x 4 x float> %out
368 define <vscale x 2 x double> @fmla_d(<vscale x 2 x i1> %pg, <vscale x 2 x double> %a, <vscale x 2 x double> %b, <vscale x 2 x double> %c) {
369 ; CHECK-LABEL: fmla_d:
371 ; CHECK-NEXT: fmla z0.d, p0/m, z1.d, z2.d
373 %out = call <vscale x 2 x double> @llvm.aarch64.sve.fmla.u.nxv2f64(<vscale x 2 x i1> %pg,
374 <vscale x 2 x double> %a,
375 <vscale x 2 x double> %b,
376 <vscale x 2 x double> %c)
377 ret <vscale x 2 x double> %out
384 define <vscale x 8 x half> @fmls_h(<vscale x 8 x i1> %pg, <vscale x 8 x half> %a, <vscale x 8 x half> %b, <vscale x 8 x half> %c) {
385 ; CHECK-LABEL: fmls_h:
387 ; CHECK-NEXT: fmls z0.h, p0/m, z1.h, z2.h
389 %out = call <vscale x 8 x half> @llvm.aarch64.sve.fmls.u.nxv8f16(<vscale x 8 x i1> %pg,
390 <vscale x 8 x half> %a,
391 <vscale x 8 x half> %b,
392 <vscale x 8 x half> %c)
393 ret <vscale x 8 x half> %out
396 define <vscale x 4 x float> @fmls_s(<vscale x 4 x i1> %pg, <vscale x 4 x float> %a, <vscale x 4 x float> %b, <vscale x 4 x float> %c) {
397 ; CHECK-LABEL: fmls_s:
399 ; CHECK-NEXT: fmls z0.s, p0/m, z1.s, z2.s
401 %out = call <vscale x 4 x float> @llvm.aarch64.sve.fmls.u.nxv4f32(<vscale x 4 x i1> %pg,
402 <vscale x 4 x float> %a,
403 <vscale x 4 x float> %b,
404 <vscale x 4 x float> %c)
405 ret <vscale x 4 x float> %out
408 define <vscale x 2 x double> @fmls_d(<vscale x 2 x i1> %pg, <vscale x 2 x double> %a, <vscale x 2 x double> %b, <vscale x 2 x double> %c) {
409 ; CHECK-LABEL: fmls_d:
411 ; CHECK-NEXT: fmls z0.d, p0/m, z1.d, z2.d
413 %out = call <vscale x 2 x double> @llvm.aarch64.sve.fmls.u.nxv2f64(<vscale x 2 x i1> %pg,
414 <vscale x 2 x double> %a,
415 <vscale x 2 x double> %b,
416 <vscale x 2 x double> %c)
417 ret <vscale x 2 x double> %out
424 define <vscale x 8 x half> @fmsb_h(<vscale x 8 x i1> %pg, <vscale x 8 x half> %a, <vscale x 8 x half> %b, <vscale x 8 x half> %c) {
425 ; CHECK-LABEL: fmsb_h:
427 ; CHECK-NEXT: fmsb z0.h, p0/m, z1.h, z2.h
429 %out = call <vscale x 8 x half> @llvm.aarch64.sve.fmls.u.nxv8f16(<vscale x 8 x i1> %pg,
430 <vscale x 8 x half> %c,
431 <vscale x 8 x half> %a,
432 <vscale x 8 x half> %b)
433 ret <vscale x 8 x half> %out
436 define <vscale x 4 x float> @fmsb_s(<vscale x 4 x i1> %pg, <vscale x 4 x float> %a, <vscale x 4 x float> %b, <vscale x 4 x float> %c) {
437 ; CHECK-LABEL: fmsb_s:
439 ; CHECK-NEXT: fmsb z0.s, p0/m, z1.s, z2.s
441 %out = call <vscale x 4 x float> @llvm.aarch64.sve.fmls.u.nxv4f32(<vscale x 4 x i1> %pg,
442 <vscale x 4 x float> %c,
443 <vscale x 4 x float> %a,
444 <vscale x 4 x float> %b)
445 ret <vscale x 4 x float> %out
448 define <vscale x 2 x double> @fmsb_d(<vscale x 2 x i1> %pg, <vscale x 2 x double> %a, <vscale x 2 x double> %b, <vscale x 2 x double> %c) {
449 ; CHECK-LABEL: fmsb_d:
451 ; CHECK-NEXT: fmsb z0.d, p0/m, z1.d, z2.d
453 %out = call <vscale x 2 x double> @llvm.aarch64.sve.fmls.u.nxv2f64(<vscale x 2 x i1> %pg,
454 <vscale x 2 x double> %c,
455 <vscale x 2 x double> %a,
456 <vscale x 2 x double> %b)
457 ret <vscale x 2 x double> %out
464 define <vscale x 8 x half> @fmul_h(<vscale x 8 x i1> %pg, <vscale x 8 x half> %a, <vscale x 8 x half> %b) {
465 ; CHECK-LABEL: fmul_h:
467 ; CHECK-NEXT: fmul z0.h, p0/m, z0.h, z1.h
469 %out = call <vscale x 8 x half> @llvm.aarch64.sve.fmul.u.nxv8f16(<vscale x 8 x i1> %pg,
470 <vscale x 8 x half> %a,
471 <vscale x 8 x half> %b)
472 ret <vscale x 8 x half> %out
475 define <vscale x 4 x float> @fmul_s(<vscale x 4 x i1> %pg, <vscale x 4 x float> %a, <vscale x 4 x float> %b) {
476 ; CHECK-LABEL: fmul_s:
478 ; CHECK-NEXT: fmul z0.s, p0/m, z0.s, z1.s
480 %out = call <vscale x 4 x float> @llvm.aarch64.sve.fmul.u.nxv4f32(<vscale x 4 x i1> %pg,
481 <vscale x 4 x float> %a,
482 <vscale x 4 x float> %b)
483 ret <vscale x 4 x float> %out
486 define <vscale x 2 x double> @fmul_d(<vscale x 2 x i1> %pg, <vscale x 2 x double> %a, <vscale x 2 x double> %b) {
487 ; CHECK-LABEL: fmul_d:
489 ; CHECK-NEXT: fmul z0.d, p0/m, z0.d, z1.d
491 %out = call <vscale x 2 x double> @llvm.aarch64.sve.fmul.u.nxv2f64(<vscale x 2 x i1> %pg,
492 <vscale x 2 x double> %a,
493 <vscale x 2 x double> %b)
494 ret <vscale x 2 x double> %out
501 define <vscale x 8 x half> @fmulx_h(<vscale x 8 x i1> %pg, <vscale x 8 x half> %a, <vscale x 8 x half> %b) {
502 ; CHECK-LABEL: fmulx_h:
504 ; CHECK-NEXT: fmulx z0.h, p0/m, z0.h, z1.h
506 %out = call <vscale x 8 x half> @llvm.aarch64.sve.fmulx.u.nxv8f16(<vscale x 8 x i1> %pg,
507 <vscale x 8 x half> %a,
508 <vscale x 8 x half> %b)
509 ret <vscale x 8 x half> %out
512 define <vscale x 4 x float> @fmulx_s(<vscale x 4 x i1> %pg, <vscale x 4 x float> %a, <vscale x 4 x float> %b) {
513 ; CHECK-LABEL: fmulx_s:
515 ; CHECK-NEXT: fmulx z0.s, p0/m, z0.s, z1.s
517 %out = call <vscale x 4 x float> @llvm.aarch64.sve.fmulx.u.nxv4f32(<vscale x 4 x i1> %pg,
518 <vscale x 4 x float> %a,
519 <vscale x 4 x float> %b)
520 ret <vscale x 4 x float> %out
523 define <vscale x 2 x double> @fmulx_d(<vscale x 2 x i1> %pg, <vscale x 2 x double> %a, <vscale x 2 x double> %b) {
524 ; CHECK-LABEL: fmulx_d:
526 ; CHECK-NEXT: fmulx z0.d, p0/m, z0.d, z1.d
528 %out = call <vscale x 2 x double> @llvm.aarch64.sve.fmulx.u.nxv2f64(<vscale x 2 x i1> %pg,
529 <vscale x 2 x double> %a,
530 <vscale x 2 x double> %b)
531 ret <vscale x 2 x double> %out
538 define <vscale x 8 x half> @fnmad_h(<vscale x 8 x i1> %pg, <vscale x 8 x half> %a, <vscale x 8 x half> %b, <vscale x 8 x half> %c) {
539 ; CHECK-LABEL: fnmad_h:
541 ; CHECK-NEXT: fnmad z0.h, p0/m, z1.h, z2.h
543 %out = call <vscale x 8 x half> @llvm.aarch64.sve.fnmla.u.nxv8f16(<vscale x 8 x i1> %pg,
544 <vscale x 8 x half> %c,
545 <vscale x 8 x half> %a,
546 <vscale x 8 x half> %b)
547 ret <vscale x 8 x half> %out
550 define <vscale x 4 x float> @fnmad_s(<vscale x 4 x i1> %pg, <vscale x 4 x float> %a, <vscale x 4 x float> %b, <vscale x 4 x float> %c) {
551 ; CHECK-LABEL: fnmad_s:
553 ; CHECK-NEXT: fnmad z0.s, p0/m, z1.s, z2.s
555 %out = call <vscale x 4 x float> @llvm.aarch64.sve.fnmla.u.nxv4f32(<vscale x 4 x i1> %pg,
556 <vscale x 4 x float> %c,
557 <vscale x 4 x float> %a,
558 <vscale x 4 x float> %b)
559 ret <vscale x 4 x float> %out
562 define <vscale x 2 x double> @fnmad_d(<vscale x 2 x i1> %pg, <vscale x 2 x double> %a, <vscale x 2 x double> %b, <vscale x 2 x double> %c) {
563 ; CHECK-LABEL: fnmad_d:
565 ; CHECK-NEXT: fnmad z0.d, p0/m, z1.d, z2.d
567 %out = call <vscale x 2 x double> @llvm.aarch64.sve.fnmla.u.nxv2f64(<vscale x 2 x i1> %pg,
568 <vscale x 2 x double> %c,
569 <vscale x 2 x double> %a,
570 <vscale x 2 x double> %b)
571 ret <vscale x 2 x double> %out
578 define <vscale x 8 x half> @fnmla_h(<vscale x 8 x i1> %pg, <vscale x 8 x half> %a, <vscale x 8 x half> %b, <vscale x 8 x half> %c) {
579 ; CHECK-LABEL: fnmla_h:
581 ; CHECK-NEXT: fnmla z0.h, p0/m, z1.h, z2.h
583 %out = call <vscale x 8 x half> @llvm.aarch64.sve.fnmla.u.nxv8f16(<vscale x 8 x i1> %pg,
584 <vscale x 8 x half> %a,
585 <vscale x 8 x half> %b,
586 <vscale x 8 x half> %c)
587 ret <vscale x 8 x half> %out
590 define <vscale x 4 x float> @fnmla_s(<vscale x 4 x i1> %pg, <vscale x 4 x float> %a, <vscale x 4 x float> %b, <vscale x 4 x float> %c) {
591 ; CHECK-LABEL: fnmla_s:
593 ; CHECK-NEXT: fnmla z0.s, p0/m, z1.s, z2.s
595 %out = call <vscale x 4 x float> @llvm.aarch64.sve.fnmla.u.nxv4f32(<vscale x 4 x i1> %pg,
596 <vscale x 4 x float> %a,
597 <vscale x 4 x float> %b,
598 <vscale x 4 x float> %c)
599 ret <vscale x 4 x float> %out
602 define <vscale x 2 x double> @fnmla_d(<vscale x 2 x i1> %pg, <vscale x 2 x double> %a, <vscale x 2 x double> %b, <vscale x 2 x double> %c) {
603 ; CHECK-LABEL: fnmla_d:
605 ; CHECK-NEXT: fnmla z0.d, p0/m, z1.d, z2.d
607 %out = call <vscale x 2 x double> @llvm.aarch64.sve.fnmla.u.nxv2f64(<vscale x 2 x i1> %pg,
608 <vscale x 2 x double> %a,
609 <vscale x 2 x double> %b,
610 <vscale x 2 x double> %c)
611 ret <vscale x 2 x double> %out
618 define <vscale x 8 x half> @fnmls_h(<vscale x 8 x i1> %pg, <vscale x 8 x half> %a, <vscale x 8 x half> %b, <vscale x 8 x half> %c) {
619 ; CHECK-LABEL: fnmls_h:
621 ; CHECK-NEXT: fnmls z0.h, p0/m, z1.h, z2.h
623 %out = call <vscale x 8 x half> @llvm.aarch64.sve.fnmls.u.nxv8f16(<vscale x 8 x i1> %pg,
624 <vscale x 8 x half> %a,
625 <vscale x 8 x half> %b,
626 <vscale x 8 x half> %c)
627 ret <vscale x 8 x half> %out
630 define <vscale x 4 x float> @fnmls_s(<vscale x 4 x i1> %pg, <vscale x 4 x float> %a, <vscale x 4 x float> %b, <vscale x 4 x float> %c) {
631 ; CHECK-LABEL: fnmls_s:
633 ; CHECK-NEXT: fnmls z0.s, p0/m, z1.s, z2.s
635 %out = call <vscale x 4 x float> @llvm.aarch64.sve.fnmls.u.nxv4f32(<vscale x 4 x i1> %pg,
636 <vscale x 4 x float> %a,
637 <vscale x 4 x float> %b,
638 <vscale x 4 x float> %c)
639 ret <vscale x 4 x float> %out
642 define <vscale x 2 x double> @fnmls_d(<vscale x 2 x i1> %pg, <vscale x 2 x double> %a, <vscale x 2 x double> %b, <vscale x 2 x double> %c) {
643 ; CHECK-LABEL: fnmls_d:
645 ; CHECK-NEXT: fnmls z0.d, p0/m, z1.d, z2.d
647 %out = call <vscale x 2 x double> @llvm.aarch64.sve.fnmls.u.nxv2f64(<vscale x 2 x i1> %pg,
648 <vscale x 2 x double> %a,
649 <vscale x 2 x double> %b,
650 <vscale x 2 x double> %c)
651 ret <vscale x 2 x double> %out
658 define <vscale x 8 x half> @fnmsb_h(<vscale x 8 x i1> %pg, <vscale x 8 x half> %a, <vscale x 8 x half> %b, <vscale x 8 x half> %c) {
659 ; CHECK-LABEL: fnmsb_h:
661 ; CHECK-NEXT: fnmsb z0.h, p0/m, z1.h, z2.h
663 %out = call <vscale x 8 x half> @llvm.aarch64.sve.fnmls.u.nxv8f16(<vscale x 8 x i1> %pg,
664 <vscale x 8 x half> %c,
665 <vscale x 8 x half> %a,
666 <vscale x 8 x half> %b)
667 ret <vscale x 8 x half> %out
670 define <vscale x 4 x float> @fnmsb_s(<vscale x 4 x i1> %pg, <vscale x 4 x float> %a, <vscale x 4 x float> %b, <vscale x 4 x float> %c) {
671 ; CHECK-LABEL: fnmsb_s:
673 ; CHECK-NEXT: fnmsb z0.s, p0/m, z1.s, z2.s
675 %out = call <vscale x 4 x float> @llvm.aarch64.sve.fnmls.u.nxv4f32(<vscale x 4 x i1> %pg,
676 <vscale x 4 x float> %c,
677 <vscale x 4 x float> %a,
678 <vscale x 4 x float> %b)
679 ret <vscale x 4 x float> %out
682 define <vscale x 2 x double> @fnmsb_d(<vscale x 2 x i1> %pg, <vscale x 2 x double> %a, <vscale x 2 x double> %b, <vscale x 2 x double> %c) {
683 ; CHECK-LABEL: fnmsb_d:
685 ; CHECK-NEXT: fnmsb z0.d, p0/m, z1.d, z2.d
687 %out = call <vscale x 2 x double> @llvm.aarch64.sve.fnmls.u.nxv2f64(<vscale x 2 x i1> %pg,
688 <vscale x 2 x double> %c,
689 <vscale x 2 x double> %a,
690 <vscale x 2 x double> %b)
691 ret <vscale x 2 x double> %out
698 define <vscale x 8 x half> @fsub_h(<vscale x 8 x i1> %pg, <vscale x 8 x half> %a, <vscale x 8 x half> %b) {
699 ; CHECK-LABEL: fsub_h:
701 ; CHECK-NEXT: fsub z0.h, p0/m, z0.h, z1.h
703 %out = call <vscale x 8 x half> @llvm.aarch64.sve.fsub.u.nxv8f16(<vscale x 8 x i1> %pg,
704 <vscale x 8 x half> %a,
705 <vscale x 8 x half> %b)
706 ret <vscale x 8 x half> %out
709 define <vscale x 4 x float> @fsub_s(<vscale x 4 x i1> %pg, <vscale x 4 x float> %a, <vscale x 4 x float> %b) {
710 ; CHECK-LABEL: fsub_s:
712 ; CHECK-NEXT: fsub z0.s, p0/m, z0.s, z1.s
714 %out = call <vscale x 4 x float> @llvm.aarch64.sve.fsub.u.nxv4f32(<vscale x 4 x i1> %pg,
715 <vscale x 4 x float> %a,
716 <vscale x 4 x float> %b)
717 ret <vscale x 4 x float> %out
720 define <vscale x 2 x double> @fsub_d(<vscale x 2 x i1> %pg, <vscale x 2 x double> %a, <vscale x 2 x double> %b) {
721 ; CHECK-LABEL: fsub_d:
723 ; CHECK-NEXT: fsub z0.d, p0/m, z0.d, z1.d
725 %out = call <vscale x 2 x double> @llvm.aarch64.sve.fsub.u.nxv2f64(<vscale x 2 x i1> %pg,
726 <vscale x 2 x double> %a,
727 <vscale x 2 x double> %b)
728 ret <vscale x 2 x double> %out
735 define <vscale x 8 x half> @fsubr_h(<vscale x 8 x i1> %pg, <vscale x 8 x half> %a, <vscale x 8 x half> %b) {
736 ; CHECK-LABEL: fsubr_h:
738 ; CHECK-NEXT: fsubr z0.h, p0/m, z0.h, z1.h
740 %out = call <vscale x 8 x half> @llvm.aarch64.sve.fsub.u.nxv8f16(<vscale x 8 x i1> %pg,
741 <vscale x 8 x half> %b,
742 <vscale x 8 x half> %a)
743 ret <vscale x 8 x half> %out
746 define <vscale x 4 x float> @fsubr_s(<vscale x 4 x i1> %pg, <vscale x 4 x float> %a, <vscale x 4 x float> %b) {
747 ; CHECK-LABEL: fsubr_s:
749 ; CHECK-NEXT: fsubr z0.s, p0/m, z0.s, z1.s
751 %out = call <vscale x 4 x float> @llvm.aarch64.sve.fsub.u.nxv4f32(<vscale x 4 x i1> %pg,
752 <vscale x 4 x float> %b,
753 <vscale x 4 x float> %a)
754 ret <vscale x 4 x float> %out
757 define <vscale x 2 x double> @fsubr_d(<vscale x 2 x i1> %pg, <vscale x 2 x double> %a, <vscale x 2 x double> %b) {
758 ; CHECK-LABEL: fsubr_d:
760 ; CHECK-NEXT: fsubr z0.d, p0/m, z0.d, z1.d
762 %out = call <vscale x 2 x double> @llvm.aarch64.sve.fsub.u.nxv2f64(<vscale x 2 x i1> %pg,
763 <vscale x 2 x double> %b,
764 <vscale x 2 x double> %a)
765 ret <vscale x 2 x double> %out
768 declare <vscale x 8 x half> @llvm.aarch64.sve.fabd.u.nxv8f16(<vscale x 8 x i1>, <vscale x 8 x half>, <vscale x 8 x half>)
769 declare <vscale x 4 x float> @llvm.aarch64.sve.fabd.u.nxv4f32(<vscale x 4 x i1>, <vscale x 4 x float>, <vscale x 4 x float>)
770 declare <vscale x 2 x double> @llvm.aarch64.sve.fabd.u.nxv2f64(<vscale x 2 x i1>, <vscale x 2 x double>, <vscale x 2 x double>)
772 declare <vscale x 8 x half> @llvm.aarch64.sve.fadd.u.nxv8f16(<vscale x 8 x i1>, <vscale x 8 x half>, <vscale x 8 x half>)
773 declare <vscale x 4 x float> @llvm.aarch64.sve.fadd.u.nxv4f32(<vscale x 4 x i1>, <vscale x 4 x float>, <vscale x 4 x float>)
774 declare <vscale x 2 x double> @llvm.aarch64.sve.fadd.u.nxv2f64(<vscale x 2 x i1>, <vscale x 2 x double>, <vscale x 2 x double>)
776 declare <vscale x 8 x half> @llvm.aarch64.sve.fdiv.u.nxv8f16(<vscale x 8 x i1>, <vscale x 8 x half>, <vscale x 8 x half>)
777 declare <vscale x 4 x float> @llvm.aarch64.sve.fdiv.u.nxv4f32(<vscale x 4 x i1>, <vscale x 4 x float>, <vscale x 4 x float>)
778 declare <vscale x 2 x double> @llvm.aarch64.sve.fdiv.u.nxv2f64(<vscale x 2 x i1>, <vscale x 2 x double>, <vscale x 2 x double>)
780 declare <vscale x 8 x half> @llvm.aarch64.sve.fmax.u.nxv8f16(<vscale x 8 x i1>, <vscale x 8 x half>, <vscale x 8 x half>)
781 declare <vscale x 4 x float> @llvm.aarch64.sve.fmax.u.nxv4f32(<vscale x 4 x i1>, <vscale x 4 x float>, <vscale x 4 x float>)
782 declare <vscale x 2 x double> @llvm.aarch64.sve.fmax.u.nxv2f64(<vscale x 2 x i1>, <vscale x 2 x double>, <vscale x 2 x double>)
784 declare <vscale x 8 x half> @llvm.aarch64.sve.fmaxnm.u.nxv8f16(<vscale x 8 x i1>, <vscale x 8 x half>, <vscale x 8 x half>)
785 declare <vscale x 4 x float> @llvm.aarch64.sve.fmaxnm.u.nxv4f32(<vscale x 4 x i1>, <vscale x 4 x float>, <vscale x 4 x float>)
786 declare <vscale x 2 x double> @llvm.aarch64.sve.fmaxnm.u.nxv2f64(<vscale x 2 x i1>, <vscale x 2 x double>, <vscale x 2 x double>)
788 declare <vscale x 8 x half> @llvm.aarch64.sve.fmin.u.nxv8f16(<vscale x 8 x i1>, <vscale x 8 x half>, <vscale x 8 x half>)
789 declare <vscale x 4 x float> @llvm.aarch64.sve.fmin.u.nxv4f32(<vscale x 4 x i1>, <vscale x 4 x float>, <vscale x 4 x float>)
790 declare <vscale x 2 x double> @llvm.aarch64.sve.fmin.u.nxv2f64(<vscale x 2 x i1>, <vscale x 2 x double>, <vscale x 2 x double>)
792 declare <vscale x 8 x half> @llvm.aarch64.sve.fminnm.u.nxv8f16(<vscale x 8 x i1>, <vscale x 8 x half>, <vscale x 8 x half>)
793 declare <vscale x 4 x float> @llvm.aarch64.sve.fminnm.u.nxv4f32(<vscale x 4 x i1>, <vscale x 4 x float>, <vscale x 4 x float>)
794 declare <vscale x 2 x double> @llvm.aarch64.sve.fminnm.u.nxv2f64(<vscale x 2 x i1>, <vscale x 2 x double>, <vscale x 2 x double>)
796 declare <vscale x 8 x half> @llvm.aarch64.sve.fmla.u.nxv8f16(<vscale x 8 x i1>, <vscale x 8 x half>, <vscale x 8 x half>, <vscale x 8 x half>)
797 declare <vscale x 4 x float> @llvm.aarch64.sve.fmla.u.nxv4f32(<vscale x 4 x i1>, <vscale x 4 x float>, <vscale x 4 x float>, <vscale x 4 x float>)
798 declare <vscale x 2 x double> @llvm.aarch64.sve.fmla.u.nxv2f64(<vscale x 2 x i1>, <vscale x 2 x double>, <vscale x 2 x double>, <vscale x 2 x double>)
800 declare <vscale x 8 x half> @llvm.aarch64.sve.fmls.u.nxv8f16(<vscale x 8 x i1>, <vscale x 8 x half>, <vscale x 8 x half>, <vscale x 8 x half>)
801 declare <vscale x 4 x float> @llvm.aarch64.sve.fmls.u.nxv4f32(<vscale x 4 x i1>, <vscale x 4 x float>, <vscale x 4 x float>, <vscale x 4 x float>)
802 declare <vscale x 2 x double> @llvm.aarch64.sve.fmls.u.nxv2f64(<vscale x 2 x i1>, <vscale x 2 x double>, <vscale x 2 x double>, <vscale x 2 x double>)
804 declare <vscale x 8 x half> @llvm.aarch64.sve.fmul.u.nxv8f16(<vscale x 8 x i1>, <vscale x 8 x half>, <vscale x 8 x half>)
805 declare <vscale x 4 x float> @llvm.aarch64.sve.fmul.u.nxv4f32(<vscale x 4 x i1>, <vscale x 4 x float>, <vscale x 4 x float>)
806 declare <vscale x 2 x double> @llvm.aarch64.sve.fmul.u.nxv2f64(<vscale x 2 x i1>, <vscale x 2 x double>, <vscale x 2 x double>)
808 declare <vscale x 8 x half> @llvm.aarch64.sve.fmulx.u.nxv8f16(<vscale x 8 x i1>, <vscale x 8 x half>, <vscale x 8 x half>)
809 declare <vscale x 4 x float> @llvm.aarch64.sve.fmulx.u.nxv4f32(<vscale x 4 x i1>, <vscale x 4 x float>, <vscale x 4 x float>)
810 declare <vscale x 2 x double> @llvm.aarch64.sve.fmulx.u.nxv2f64(<vscale x 2 x i1>, <vscale x 2 x double>, <vscale x 2 x double>)
812 declare <vscale x 8 x half> @llvm.aarch64.sve.fnmla.u.nxv8f16(<vscale x 8 x i1>, <vscale x 8 x half>, <vscale x 8 x half>, <vscale x 8 x half>)
813 declare <vscale x 4 x float> @llvm.aarch64.sve.fnmla.u.nxv4f32(<vscale x 4 x i1>, <vscale x 4 x float>, <vscale x 4 x float>, <vscale x 4 x float>)
814 declare <vscale x 2 x double> @llvm.aarch64.sve.fnmla.u.nxv2f64(<vscale x 2 x i1>, <vscale x 2 x double>, <vscale x 2 x double>, <vscale x 2 x double>)
816 declare <vscale x 8 x half> @llvm.aarch64.sve.fnmls.u.nxv8f16(<vscale x 8 x i1>, <vscale x 8 x half>, <vscale x 8 x half>, <vscale x 8 x half>)
817 declare <vscale x 4 x float> @llvm.aarch64.sve.fnmls.u.nxv4f32(<vscale x 4 x i1>, <vscale x 4 x float>, <vscale x 4 x float>, <vscale x 4 x float>)
818 declare <vscale x 2 x double> @llvm.aarch64.sve.fnmls.u.nxv2f64(<vscale x 2 x i1>, <vscale x 2 x double>, <vscale x 2 x double>, <vscale x 2 x double>)
820 declare <vscale x 8 x half> @llvm.aarch64.sve.fsub.u.nxv8f16(<vscale x 8 x i1>, <vscale x 8 x half>, <vscale x 8 x half>)
821 declare <vscale x 4 x float> @llvm.aarch64.sve.fsub.u.nxv4f32(<vscale x 4 x i1>, <vscale x 4 x float>, <vscale x 4 x float>)
822 declare <vscale x 2 x double> @llvm.aarch64.sve.fsub.u.nxv2f64(<vscale x 2 x i1>, <vscale x 2 x double>, <vscale x 2 x double>)