1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mattr=+sve -force-streaming-compatible-sve < %s | FileCheck %s
3 ; RUN: llc -mattr=+sme -force-streaming-compatible-sve < %s | FileCheck %s
5 target triple = "aarch64-unknown-linux-gnu"
11 define <2 x half> @fadd_v2f16(<2 x half> %op1, <2 x half> %op2) {
12 ; CHECK-LABEL: fadd_v2f16:
14 ; CHECK-NEXT: ptrue p0.h, vl4
15 ; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0
16 ; CHECK-NEXT: // kill: def $d1 killed $d1 def $z1
17 ; CHECK-NEXT: fadd z0.h, p0/m, z0.h, z1.h
18 ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z0
20 %res = fadd <2 x half> %op1, %op2
24 define <4 x half> @fadd_v4f16(<4 x half> %op1, <4 x half> %op2) {
25 ; CHECK-LABEL: fadd_v4f16:
27 ; CHECK-NEXT: ptrue p0.h, vl4
28 ; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0
29 ; CHECK-NEXT: // kill: def $d1 killed $d1 def $z1
30 ; CHECK-NEXT: fadd z0.h, p0/m, z0.h, z1.h
31 ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z0
33 %res = fadd <4 x half> %op1, %op2
37 define <8 x half> @fadd_v8f16(<8 x half> %op1, <8 x half> %op2) {
38 ; CHECK-LABEL: fadd_v8f16:
40 ; CHECK-NEXT: ptrue p0.h, vl8
41 ; CHECK-NEXT: // kill: def $q0 killed $q0 def $z0
42 ; CHECK-NEXT: // kill: def $q1 killed $q1 def $z1
43 ; CHECK-NEXT: fadd z0.h, p0/m, z0.h, z1.h
44 ; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0
46 %res = fadd <8 x half> %op1, %op2
50 define void @fadd_v16f16(ptr %a, ptr %b) {
51 ; CHECK-LABEL: fadd_v16f16:
53 ; CHECK-NEXT: ptrue p0.h, vl8
54 ; CHECK-NEXT: ldp q0, q3, [x1]
55 ; CHECK-NEXT: ldp q1, q2, [x0]
56 ; CHECK-NEXT: fadd z0.h, p0/m, z0.h, z1.h
57 ; CHECK-NEXT: movprfx z1, z2
58 ; CHECK-NEXT: fadd z1.h, p0/m, z1.h, z3.h
59 ; CHECK-NEXT: stp q0, q1, [x0]
61 %op1 = load <16 x half>, ptr %a
62 %op2 = load <16 x half>, ptr %b
63 %res = fadd <16 x half> %op1, %op2
64 store <16 x half> %res, ptr %a
68 define <2 x float> @fadd_v2f32(<2 x float> %op1, <2 x float> %op2) {
69 ; CHECK-LABEL: fadd_v2f32:
71 ; CHECK-NEXT: ptrue p0.s, vl2
72 ; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0
73 ; CHECK-NEXT: // kill: def $d1 killed $d1 def $z1
74 ; CHECK-NEXT: fadd z0.s, p0/m, z0.s, z1.s
75 ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z0
77 %res = fadd <2 x float> %op1, %op2
81 define <4 x float> @fadd_v4f32(<4 x float> %op1, <4 x float> %op2) {
82 ; CHECK-LABEL: fadd_v4f32:
84 ; CHECK-NEXT: ptrue p0.s, vl4
85 ; CHECK-NEXT: // kill: def $q0 killed $q0 def $z0
86 ; CHECK-NEXT: // kill: def $q1 killed $q1 def $z1
87 ; CHECK-NEXT: fadd z0.s, p0/m, z0.s, z1.s
88 ; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0
90 %res = fadd <4 x float> %op1, %op2
94 define void @fadd_v8f32(ptr %a, ptr %b) {
95 ; CHECK-LABEL: fadd_v8f32:
97 ; CHECK-NEXT: ptrue p0.s, vl4
98 ; CHECK-NEXT: ldp q0, q3, [x1]
99 ; CHECK-NEXT: ldp q1, q2, [x0]
100 ; CHECK-NEXT: fadd z0.s, p0/m, z0.s, z1.s
101 ; CHECK-NEXT: movprfx z1, z2
102 ; CHECK-NEXT: fadd z1.s, p0/m, z1.s, z3.s
103 ; CHECK-NEXT: stp q0, q1, [x0]
105 %op1 = load <8 x float>, ptr %a
106 %op2 = load <8 x float>, ptr %b
107 %res = fadd <8 x float> %op1, %op2
108 store <8 x float> %res, ptr %a
112 define <2 x double> @fadd_v2f64(<2 x double> %op1, <2 x double> %op2) {
113 ; CHECK-LABEL: fadd_v2f64:
115 ; CHECK-NEXT: ptrue p0.d, vl2
116 ; CHECK-NEXT: // kill: def $q0 killed $q0 def $z0
117 ; CHECK-NEXT: // kill: def $q1 killed $q1 def $z1
118 ; CHECK-NEXT: fadd z0.d, p0/m, z0.d, z1.d
119 ; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0
121 %res = fadd <2 x double> %op1, %op2
122 ret <2 x double> %res
125 define void @fadd_v4f64(ptr %a, ptr %b) {
126 ; CHECK-LABEL: fadd_v4f64:
128 ; CHECK-NEXT: ptrue p0.d, vl2
129 ; CHECK-NEXT: ldp q0, q3, [x1]
130 ; CHECK-NEXT: ldp q1, q2, [x0]
131 ; CHECK-NEXT: fadd z0.d, p0/m, z0.d, z1.d
132 ; CHECK-NEXT: movprfx z1, z2
133 ; CHECK-NEXT: fadd z1.d, p0/m, z1.d, z3.d
134 ; CHECK-NEXT: stp q0, q1, [x0]
136 %op1 = load <4 x double>, ptr %a
137 %op2 = load <4 x double>, ptr %b
138 %res = fadd <4 x double> %op1, %op2
139 store <4 x double> %res, ptr %a
147 define <2 x half> @fdiv_v2f16(<2 x half> %op1, <2 x half> %op2) {
148 ; CHECK-LABEL: fdiv_v2f16:
150 ; CHECK-NEXT: ptrue p0.h, vl4
151 ; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0
152 ; CHECK-NEXT: // kill: def $d1 killed $d1 def $z1
153 ; CHECK-NEXT: fdiv z0.h, p0/m, z0.h, z1.h
154 ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z0
156 %res = fdiv <2 x half> %op1, %op2
160 define <4 x half> @fdiv_v4f16(<4 x half> %op1, <4 x half> %op2) {
161 ; CHECK-LABEL: fdiv_v4f16:
163 ; CHECK-NEXT: ptrue p0.h, vl4
164 ; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0
165 ; CHECK-NEXT: // kill: def $d1 killed $d1 def $z1
166 ; CHECK-NEXT: fdiv z0.h, p0/m, z0.h, z1.h
167 ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z0
169 %res = fdiv <4 x half> %op1, %op2
173 define <8 x half> @fdiv_v8f16(<8 x half> %op1, <8 x half> %op2) {
174 ; CHECK-LABEL: fdiv_v8f16:
176 ; CHECK-NEXT: ptrue p0.h, vl8
177 ; CHECK-NEXT: // kill: def $q0 killed $q0 def $z0
178 ; CHECK-NEXT: // kill: def $q1 killed $q1 def $z1
179 ; CHECK-NEXT: fdiv z0.h, p0/m, z0.h, z1.h
180 ; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0
182 %res = fdiv <8 x half> %op1, %op2
186 define void @fdiv_v16f16(ptr %a, ptr %b) {
187 ; CHECK-LABEL: fdiv_v16f16:
189 ; CHECK-NEXT: ptrue p0.h, vl8
190 ; CHECK-NEXT: ldp q0, q3, [x1]
191 ; CHECK-NEXT: ldp q1, q2, [x0]
192 ; CHECK-NEXT: fdivr z0.h, p0/m, z0.h, z1.h
193 ; CHECK-NEXT: movprfx z1, z2
194 ; CHECK-NEXT: fdiv z1.h, p0/m, z1.h, z3.h
195 ; CHECK-NEXT: stp q0, q1, [x0]
197 %op1 = load <16 x half>, ptr %a
198 %op2 = load <16 x half>, ptr %b
199 %res = fdiv <16 x half> %op1, %op2
200 store <16 x half> %res, ptr %a
204 define <2 x float> @fdiv_v2f32(<2 x float> %op1, <2 x float> %op2) {
205 ; CHECK-LABEL: fdiv_v2f32:
207 ; CHECK-NEXT: ptrue p0.s, vl2
208 ; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0
209 ; CHECK-NEXT: // kill: def $d1 killed $d1 def $z1
210 ; CHECK-NEXT: fdiv z0.s, p0/m, z0.s, z1.s
211 ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z0
213 %res = fdiv <2 x float> %op1, %op2
217 define <4 x float> @fdiv_v4f32(<4 x float> %op1, <4 x float> %op2) {
218 ; CHECK-LABEL: fdiv_v4f32:
220 ; CHECK-NEXT: ptrue p0.s, vl4
221 ; CHECK-NEXT: // kill: def $q0 killed $q0 def $z0
222 ; CHECK-NEXT: // kill: def $q1 killed $q1 def $z1
223 ; CHECK-NEXT: fdiv z0.s, p0/m, z0.s, z1.s
224 ; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0
226 %res = fdiv <4 x float> %op1, %op2
230 define void @fdiv_v8f32(ptr %a, ptr %b) {
231 ; CHECK-LABEL: fdiv_v8f32:
233 ; CHECK-NEXT: ptrue p0.s, vl4
234 ; CHECK-NEXT: ldp q0, q3, [x1]
235 ; CHECK-NEXT: ldp q1, q2, [x0]
236 ; CHECK-NEXT: fdivr z0.s, p0/m, z0.s, z1.s
237 ; CHECK-NEXT: movprfx z1, z2
238 ; CHECK-NEXT: fdiv z1.s, p0/m, z1.s, z3.s
239 ; CHECK-NEXT: stp q0, q1, [x0]
241 %op1 = load <8 x float>, ptr %a
242 %op2 = load <8 x float>, ptr %b
243 %res = fdiv <8 x float> %op1, %op2
244 store <8 x float> %res, ptr %a
248 define <2 x double> @fdiv_v2f64(<2 x double> %op1, <2 x double> %op2) {
249 ; CHECK-LABEL: fdiv_v2f64:
251 ; CHECK-NEXT: ptrue p0.d, vl2
252 ; CHECK-NEXT: // kill: def $q0 killed $q0 def $z0
253 ; CHECK-NEXT: // kill: def $q1 killed $q1 def $z1
254 ; CHECK-NEXT: fdiv z0.d, p0/m, z0.d, z1.d
255 ; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0
257 %res = fdiv <2 x double> %op1, %op2
258 ret <2 x double> %res
261 define void @fdiv_v4f64(ptr %a, ptr %b) {
262 ; CHECK-LABEL: fdiv_v4f64:
264 ; CHECK-NEXT: ptrue p0.d, vl2
265 ; CHECK-NEXT: ldp q0, q3, [x1]
266 ; CHECK-NEXT: ldp q1, q2, [x0]
267 ; CHECK-NEXT: fdivr z0.d, p0/m, z0.d, z1.d
268 ; CHECK-NEXT: movprfx z1, z2
269 ; CHECK-NEXT: fdiv z1.d, p0/m, z1.d, z3.d
270 ; CHECK-NEXT: stp q0, q1, [x0]
272 %op1 = load <4 x double>, ptr %a
273 %op2 = load <4 x double>, ptr %b
274 %res = fdiv <4 x double> %op1, %op2
275 store <4 x double> %res, ptr %a
283 define <2 x half> @fma_v2f16(<2 x half> %op1, <2 x half> %op2, <2 x half> %op3) {
284 ; CHECK-LABEL: fma_v2f16:
286 ; CHECK-NEXT: ptrue p0.h, vl4
287 ; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0
288 ; CHECK-NEXT: // kill: def $d2 killed $d2 def $z2
289 ; CHECK-NEXT: // kill: def $d1 killed $d1 def $z1
290 ; CHECK-NEXT: fmad z0.h, p0/m, z1.h, z2.h
291 ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z0
293 %res = call <2 x half> @llvm.fma.v2f16(<2 x half> %op1, <2 x half> %op2, <2 x half> %op3)
297 define <4 x half> @fma_v4f16(<4 x half> %op1, <4 x half> %op2, <4 x half> %op3) {
298 ; CHECK-LABEL: fma_v4f16:
300 ; CHECK-NEXT: ptrue p0.h, vl4
301 ; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0
302 ; CHECK-NEXT: // kill: def $d2 killed $d2 def $z2
303 ; CHECK-NEXT: // kill: def $d1 killed $d1 def $z1
304 ; CHECK-NEXT: fmad z0.h, p0/m, z1.h, z2.h
305 ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z0
307 %res = call <4 x half> @llvm.fma.v4f16(<4 x half> %op1, <4 x half> %op2, <4 x half> %op3)
311 define <8 x half> @fma_v8f16(<8 x half> %op1, <8 x half> %op2, <8 x half> %op3) {
312 ; CHECK-LABEL: fma_v8f16:
314 ; CHECK-NEXT: ptrue p0.h, vl8
315 ; CHECK-NEXT: // kill: def $q0 killed $q0 def $z0
316 ; CHECK-NEXT: // kill: def $q2 killed $q2 def $z2
317 ; CHECK-NEXT: // kill: def $q1 killed $q1 def $z1
318 ; CHECK-NEXT: fmad z0.h, p0/m, z1.h, z2.h
319 ; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0
321 %res = call <8 x half> @llvm.fma.v8f16(<8 x half> %op1, <8 x half> %op2, <8 x half> %op3)
325 define void @fma_v16f16(ptr %a, ptr %b, ptr %c) {
326 ; CHECK-LABEL: fma_v16f16:
328 ; CHECK-NEXT: ptrue p0.h, vl8
329 ; CHECK-NEXT: ldp q0, q4, [x1]
330 ; CHECK-NEXT: ldp q1, q5, [x2]
331 ; CHECK-NEXT: ldp q2, q3, [x0]
332 ; CHECK-NEXT: fmad z0.h, p0/m, z2.h, z1.h
333 ; CHECK-NEXT: movprfx z1, z5
334 ; CHECK-NEXT: fmla z1.h, p0/m, z3.h, z4.h
335 ; CHECK-NEXT: stp q0, q1, [x0]
337 %op1 = load <16 x half>, ptr %a
338 %op2 = load <16 x half>, ptr %b
339 %op3 = load <16 x half>, ptr %c
340 %res = call <16 x half> @llvm.fma.v16f16(<16 x half> %op1, <16 x half> %op2, <16 x half> %op3)
341 store <16 x half> %res, ptr %a
345 define <2 x float> @fma_v2f32(<2 x float> %op1, <2 x float> %op2, <2 x float> %op3) {
346 ; CHECK-LABEL: fma_v2f32:
348 ; CHECK-NEXT: ptrue p0.s, vl2
349 ; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0
350 ; CHECK-NEXT: // kill: def $d2 killed $d2 def $z2
351 ; CHECK-NEXT: // kill: def $d1 killed $d1 def $z1
352 ; CHECK-NEXT: fmad z0.s, p0/m, z1.s, z2.s
353 ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z0
355 %res = call <2 x float> @llvm.fma.v2f32(<2 x float> %op1, <2 x float> %op2, <2 x float> %op3)
359 define <4 x float> @fma_v4f32(<4 x float> %op1, <4 x float> %op2, <4 x float> %op3) {
360 ; CHECK-LABEL: fma_v4f32:
362 ; CHECK-NEXT: ptrue p0.s, vl4
363 ; CHECK-NEXT: // kill: def $q0 killed $q0 def $z0
364 ; CHECK-NEXT: // kill: def $q2 killed $q2 def $z2
365 ; CHECK-NEXT: // kill: def $q1 killed $q1 def $z1
366 ; CHECK-NEXT: fmad z0.s, p0/m, z1.s, z2.s
367 ; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0
369 %res = call <4 x float> @llvm.fma.v4f32(<4 x float> %op1, <4 x float> %op2, <4 x float> %op3)
373 define void @fma_v8f32(ptr %a, ptr %b, ptr %c) {
374 ; CHECK-LABEL: fma_v8f32:
376 ; CHECK-NEXT: ptrue p0.s, vl4
377 ; CHECK-NEXT: ldp q0, q4, [x1]
378 ; CHECK-NEXT: ldp q1, q5, [x2]
379 ; CHECK-NEXT: ldp q2, q3, [x0]
380 ; CHECK-NEXT: fmad z0.s, p0/m, z2.s, z1.s
381 ; CHECK-NEXT: movprfx z1, z5
382 ; CHECK-NEXT: fmla z1.s, p0/m, z3.s, z4.s
383 ; CHECK-NEXT: stp q0, q1, [x0]
385 %op1 = load <8 x float>, ptr %a
386 %op2 = load <8 x float>, ptr %b
387 %op3 = load <8 x float>, ptr %c
388 %res = call <8 x float> @llvm.fma.v8f32(<8 x float> %op1, <8 x float> %op2, <8 x float> %op3)
389 store <8 x float> %res, ptr %a
393 define <2 x double> @fma_v2f64(<2 x double> %op1, <2 x double> %op2, <2 x double> %op3) {
394 ; CHECK-LABEL: fma_v2f64:
396 ; CHECK-NEXT: ptrue p0.d, vl2
397 ; CHECK-NEXT: // kill: def $q0 killed $q0 def $z0
398 ; CHECK-NEXT: // kill: def $q2 killed $q2 def $z2
399 ; CHECK-NEXT: // kill: def $q1 killed $q1 def $z1
400 ; CHECK-NEXT: fmad z0.d, p0/m, z1.d, z2.d
401 ; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0
403 %res = call <2 x double> @llvm.fma.v2f64(<2 x double> %op1, <2 x double> %op2, <2 x double> %op3)
404 ret <2 x double> %res
407 define void @fma_v4f64(ptr %a, ptr %b, ptr %c) {
408 ; CHECK-LABEL: fma_v4f64:
410 ; CHECK-NEXT: ptrue p0.d, vl2
411 ; CHECK-NEXT: ldp q0, q4, [x1]
412 ; CHECK-NEXT: ldp q1, q5, [x2]
413 ; CHECK-NEXT: ldp q2, q3, [x0]
414 ; CHECK-NEXT: fmad z0.d, p0/m, z2.d, z1.d
415 ; CHECK-NEXT: movprfx z1, z5
416 ; CHECK-NEXT: fmla z1.d, p0/m, z3.d, z4.d
417 ; CHECK-NEXT: stp q0, q1, [x0]
419 %op1 = load <4 x double>, ptr %a
420 %op2 = load <4 x double>, ptr %b
421 %op3 = load <4 x double>, ptr %c
422 %res = call <4 x double> @llvm.fma.v4f64(<4 x double> %op1, <4 x double> %op2, <4 x double> %op3)
423 store <4 x double> %res, ptr %a
431 define <2 x half> @fmul_v2f16(<2 x half> %op1, <2 x half> %op2) {
432 ; CHECK-LABEL: fmul_v2f16:
434 ; CHECK-NEXT: ptrue p0.h, vl4
435 ; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0
436 ; CHECK-NEXT: // kill: def $d1 killed $d1 def $z1
437 ; CHECK-NEXT: fmul z0.h, p0/m, z0.h, z1.h
438 ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z0
440 %res = fmul <2 x half> %op1, %op2
444 define <4 x half> @fmul_v4f16(<4 x half> %op1, <4 x half> %op2) {
445 ; CHECK-LABEL: fmul_v4f16:
447 ; CHECK-NEXT: ptrue p0.h, vl4
448 ; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0
449 ; CHECK-NEXT: // kill: def $d1 killed $d1 def $z1
450 ; CHECK-NEXT: fmul z0.h, p0/m, z0.h, z1.h
451 ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z0
453 %res = fmul <4 x half> %op1, %op2
457 define <8 x half> @fmul_v8f16(<8 x half> %op1, <8 x half> %op2) {
458 ; CHECK-LABEL: fmul_v8f16:
460 ; CHECK-NEXT: ptrue p0.h, vl8
461 ; CHECK-NEXT: // kill: def $q0 killed $q0 def $z0
462 ; CHECK-NEXT: // kill: def $q1 killed $q1 def $z1
463 ; CHECK-NEXT: fmul z0.h, p0/m, z0.h, z1.h
464 ; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0
466 %res = fmul <8 x half> %op1, %op2
470 define void @fmul_v16f16(ptr %a, ptr %b) {
471 ; CHECK-LABEL: fmul_v16f16:
473 ; CHECK-NEXT: ptrue p0.h, vl8
474 ; CHECK-NEXT: ldp q0, q3, [x1]
475 ; CHECK-NEXT: ldp q1, q2, [x0]
476 ; CHECK-NEXT: fmul z0.h, p0/m, z0.h, z1.h
477 ; CHECK-NEXT: movprfx z1, z2
478 ; CHECK-NEXT: fmul z1.h, p0/m, z1.h, z3.h
479 ; CHECK-NEXT: stp q0, q1, [x0]
481 %op1 = load <16 x half>, ptr %a
482 %op2 = load <16 x half>, ptr %b
483 %res = fmul <16 x half> %op1, %op2
484 store <16 x half> %res, ptr %a
488 define <2 x float> @fmul_v2f32(<2 x float> %op1, <2 x float> %op2) {
489 ; CHECK-LABEL: fmul_v2f32:
491 ; CHECK-NEXT: ptrue p0.s, vl2
492 ; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0
493 ; CHECK-NEXT: // kill: def $d1 killed $d1 def $z1
494 ; CHECK-NEXT: fmul z0.s, p0/m, z0.s, z1.s
495 ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z0
497 %res = fmul <2 x float> %op1, %op2
501 define <4 x float> @fmul_v4f32(<4 x float> %op1, <4 x float> %op2) {
502 ; CHECK-LABEL: fmul_v4f32:
504 ; CHECK-NEXT: ptrue p0.s, vl4
505 ; CHECK-NEXT: // kill: def $q0 killed $q0 def $z0
506 ; CHECK-NEXT: // kill: def $q1 killed $q1 def $z1
507 ; CHECK-NEXT: fmul z0.s, p0/m, z0.s, z1.s
508 ; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0
510 %res = fmul <4 x float> %op1, %op2
514 define void @fmul_v8f32(ptr %a, ptr %b) {
515 ; CHECK-LABEL: fmul_v8f32:
517 ; CHECK-NEXT: ptrue p0.s, vl4
518 ; CHECK-NEXT: ldp q0, q3, [x1]
519 ; CHECK-NEXT: ldp q1, q2, [x0]
520 ; CHECK-NEXT: fmul z0.s, p0/m, z0.s, z1.s
521 ; CHECK-NEXT: movprfx z1, z2
522 ; CHECK-NEXT: fmul z1.s, p0/m, z1.s, z3.s
523 ; CHECK-NEXT: stp q0, q1, [x0]
525 %op1 = load <8 x float>, ptr %a
526 %op2 = load <8 x float>, ptr %b
527 %res = fmul <8 x float> %op1, %op2
528 store <8 x float> %res, ptr %a
532 define <2 x double> @fmul_v2f64(<2 x double> %op1, <2 x double> %op2) {
533 ; CHECK-LABEL: fmul_v2f64:
535 ; CHECK-NEXT: ptrue p0.d, vl2
536 ; CHECK-NEXT: // kill: def $q0 killed $q0 def $z0
537 ; CHECK-NEXT: // kill: def $q1 killed $q1 def $z1
538 ; CHECK-NEXT: fmul z0.d, p0/m, z0.d, z1.d
539 ; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0
541 %res = fmul <2 x double> %op1, %op2
542 ret <2 x double> %res
545 define void @fmul_v4f64(ptr %a, ptr %b) {
546 ; CHECK-LABEL: fmul_v4f64:
548 ; CHECK-NEXT: ptrue p0.d, vl2
549 ; CHECK-NEXT: ldp q0, q3, [x1]
550 ; CHECK-NEXT: ldp q1, q2, [x0]
551 ; CHECK-NEXT: fmul z0.d, p0/m, z0.d, z1.d
552 ; CHECK-NEXT: movprfx z1, z2
553 ; CHECK-NEXT: fmul z1.d, p0/m, z1.d, z3.d
554 ; CHECK-NEXT: stp q0, q1, [x0]
556 %op1 = load <4 x double>, ptr %a
557 %op2 = load <4 x double>, ptr %b
558 %res = fmul <4 x double> %op1, %op2
559 store <4 x double> %res, ptr %a
567 define <2 x half> @fneg_v2f16(<2 x half> %op) {
568 ; CHECK-LABEL: fneg_v2f16:
570 ; CHECK-NEXT: ptrue p0.h, vl4
571 ; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0
572 ; CHECK-NEXT: fneg z0.h, p0/m, z0.h
573 ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z0
575 %res = fneg <2 x half> %op
579 define <4 x half> @fneg_v4f16(<4 x half> %op) {
580 ; CHECK-LABEL: fneg_v4f16:
582 ; CHECK-NEXT: ptrue p0.h, vl4
583 ; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0
584 ; CHECK-NEXT: fneg z0.h, p0/m, z0.h
585 ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z0
587 %res = fneg <4 x half> %op
591 define <8 x half> @fneg_v8f16(<8 x half> %op) {
592 ; CHECK-LABEL: fneg_v8f16:
594 ; CHECK-NEXT: ptrue p0.h, vl8
595 ; CHECK-NEXT: // kill: def $q0 killed $q0 def $z0
596 ; CHECK-NEXT: fneg z0.h, p0/m, z0.h
597 ; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0
599 %res = fneg <8 x half> %op
603 define void @fneg_v16f16(ptr %a, ptr %b) {
604 ; CHECK-LABEL: fneg_v16f16:
606 ; CHECK-NEXT: ptrue p0.h, vl8
607 ; CHECK-NEXT: ldp q0, q1, [x0]
608 ; CHECK-NEXT: fneg z0.h, p0/m, z0.h
609 ; CHECK-NEXT: fneg z1.h, p0/m, z1.h
610 ; CHECK-NEXT: stp q0, q1, [x0]
612 %op = load <16 x half>, ptr %a
613 %res = fneg <16 x half> %op
614 store <16 x half> %res, ptr %a
618 define <2 x float> @fneg_v2f32(<2 x float> %op) {
619 ; CHECK-LABEL: fneg_v2f32:
621 ; CHECK-NEXT: ptrue p0.s, vl2
622 ; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0
623 ; CHECK-NEXT: fneg z0.s, p0/m, z0.s
624 ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z0
626 %res = fneg <2 x float> %op
630 define <4 x float> @fneg_v4f32(<4 x float> %op) {
631 ; CHECK-LABEL: fneg_v4f32:
633 ; CHECK-NEXT: ptrue p0.s, vl4
634 ; CHECK-NEXT: // kill: def $q0 killed $q0 def $z0
635 ; CHECK-NEXT: fneg z0.s, p0/m, z0.s
636 ; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0
638 %res = fneg <4 x float> %op
642 define void @fneg_v8f32(ptr %a) {
643 ; CHECK-LABEL: fneg_v8f32:
645 ; CHECK-NEXT: ptrue p0.s, vl4
646 ; CHECK-NEXT: ldp q0, q1, [x0]
647 ; CHECK-NEXT: fneg z0.s, p0/m, z0.s
648 ; CHECK-NEXT: fneg z1.s, p0/m, z1.s
649 ; CHECK-NEXT: stp q0, q1, [x0]
651 %op = load <8 x float>, ptr %a
652 %res = fneg <8 x float> %op
653 store <8 x float> %res, ptr %a
657 define <2 x double> @fneg_v2f64(<2 x double> %op) {
658 ; CHECK-LABEL: fneg_v2f64:
660 ; CHECK-NEXT: ptrue p0.d, vl2
661 ; CHECK-NEXT: // kill: def $q0 killed $q0 def $z0
662 ; CHECK-NEXT: fneg z0.d, p0/m, z0.d
663 ; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0
665 %res = fneg <2 x double> %op
666 ret <2 x double> %res
669 define void @fneg_v4f64(ptr %a) {
670 ; CHECK-LABEL: fneg_v4f64:
672 ; CHECK-NEXT: ptrue p0.d, vl2
673 ; CHECK-NEXT: ldp q0, q1, [x0]
674 ; CHECK-NEXT: fneg z0.d, p0/m, z0.d
675 ; CHECK-NEXT: fneg z1.d, p0/m, z1.d
676 ; CHECK-NEXT: stp q0, q1, [x0]
678 %op = load <4 x double>, ptr %a
679 %res = fneg <4 x double> %op
680 store <4 x double> %res, ptr %a
688 define <2 x half> @fsqrt_v2f16(<2 x half> %op) {
689 ; CHECK-LABEL: fsqrt_v2f16:
691 ; CHECK-NEXT: ptrue p0.h, vl4
692 ; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0
693 ; CHECK-NEXT: fsqrt z0.h, p0/m, z0.h
694 ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z0
696 %res = call <2 x half> @llvm.sqrt.v2f16(<2 x half> %op)
700 define <4 x half> @fsqrt_v4f16(<4 x half> %op) {
701 ; CHECK-LABEL: fsqrt_v4f16:
703 ; CHECK-NEXT: ptrue p0.h, vl4
704 ; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0
705 ; CHECK-NEXT: fsqrt z0.h, p0/m, z0.h
706 ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z0
708 %res = call <4 x half> @llvm.sqrt.v4f16(<4 x half> %op)
712 define <8 x half> @fsqrt_v8f16(<8 x half> %op) {
713 ; CHECK-LABEL: fsqrt_v8f16:
715 ; CHECK-NEXT: ptrue p0.h, vl8
716 ; CHECK-NEXT: // kill: def $q0 killed $q0 def $z0
717 ; CHECK-NEXT: fsqrt z0.h, p0/m, z0.h
718 ; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0
720 %res = call <8 x half> @llvm.sqrt.v8f16(<8 x half> %op)
724 define void @fsqrt_v16f16(ptr %a, ptr %b) {
725 ; CHECK-LABEL: fsqrt_v16f16:
727 ; CHECK-NEXT: ptrue p0.h, vl8
728 ; CHECK-NEXT: ldp q0, q1, [x0]
729 ; CHECK-NEXT: fsqrt z0.h, p0/m, z0.h
730 ; CHECK-NEXT: fsqrt z1.h, p0/m, z1.h
731 ; CHECK-NEXT: stp q0, q1, [x0]
733 %op = load <16 x half>, ptr %a
734 %res = call <16 x half> @llvm.sqrt.v16f16(<16 x half> %op)
735 store <16 x half> %res, ptr %a
739 define <2 x float> @fsqrt_v2f32(<2 x float> %op) {
740 ; CHECK-LABEL: fsqrt_v2f32:
742 ; CHECK-NEXT: ptrue p0.s, vl2
743 ; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0
744 ; CHECK-NEXT: fsqrt z0.s, p0/m, z0.s
745 ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z0
747 %res = call <2 x float> @llvm.sqrt.v2f32(<2 x float> %op)
751 define <4 x float> @fsqrt_v4f32(<4 x float> %op) {
752 ; CHECK-LABEL: fsqrt_v4f32:
754 ; CHECK-NEXT: ptrue p0.s, vl4
755 ; CHECK-NEXT: // kill: def $q0 killed $q0 def $z0
756 ; CHECK-NEXT: fsqrt z0.s, p0/m, z0.s
757 ; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0
759 %res = call <4 x float> @llvm.sqrt.v4f32(<4 x float> %op)
763 define void @fsqrt_v8f32(ptr %a) {
764 ; CHECK-LABEL: fsqrt_v8f32:
766 ; CHECK-NEXT: ptrue p0.s, vl4
767 ; CHECK-NEXT: ldp q0, q1, [x0]
768 ; CHECK-NEXT: fsqrt z0.s, p0/m, z0.s
769 ; CHECK-NEXT: fsqrt z1.s, p0/m, z1.s
770 ; CHECK-NEXT: stp q0, q1, [x0]
772 %op = load <8 x float>, ptr %a
773 %res = call <8 x float> @llvm.sqrt.v8f32(<8 x float> %op)
774 store <8 x float> %res, ptr %a
778 define <2 x double> @fsqrt_v2f64(<2 x double> %op) {
779 ; CHECK-LABEL: fsqrt_v2f64:
781 ; CHECK-NEXT: ptrue p0.d, vl2
782 ; CHECK-NEXT: // kill: def $q0 killed $q0 def $z0
783 ; CHECK-NEXT: fsqrt z0.d, p0/m, z0.d
784 ; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0
786 %res = call <2 x double> @llvm.sqrt.v2f64(<2 x double> %op)
787 ret <2 x double> %res
790 define void @fsqrt_v4f64(ptr %a) {
791 ; CHECK-LABEL: fsqrt_v4f64:
793 ; CHECK-NEXT: ptrue p0.d, vl2
794 ; CHECK-NEXT: ldp q0, q1, [x0]
795 ; CHECK-NEXT: fsqrt z0.d, p0/m, z0.d
796 ; CHECK-NEXT: fsqrt z1.d, p0/m, z1.d
797 ; CHECK-NEXT: stp q0, q1, [x0]
799 %op = load <4 x double>, ptr %a
800 %res = call <4 x double> @llvm.sqrt.v4f64(<4 x double> %op)
801 store <4 x double> %res, ptr %a
809 define <2 x half> @fsub_v2f16(<2 x half> %op1, <2 x half> %op2) {
810 ; CHECK-LABEL: fsub_v2f16:
812 ; CHECK-NEXT: ptrue p0.h, vl4
813 ; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0
814 ; CHECK-NEXT: // kill: def $d1 killed $d1 def $z1
815 ; CHECK-NEXT: fsub z0.h, p0/m, z0.h, z1.h
816 ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z0
818 %res = fsub <2 x half> %op1, %op2
822 define <4 x half> @fsub_v4f16(<4 x half> %op1, <4 x half> %op2) {
823 ; CHECK-LABEL: fsub_v4f16:
825 ; CHECK-NEXT: ptrue p0.h, vl4
826 ; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0
827 ; CHECK-NEXT: // kill: def $d1 killed $d1 def $z1
828 ; CHECK-NEXT: fsub z0.h, p0/m, z0.h, z1.h
829 ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z0
831 %res = fsub <4 x half> %op1, %op2
835 define <8 x half> @fsub_v8f16(<8 x half> %op1, <8 x half> %op2) {
836 ; CHECK-LABEL: fsub_v8f16:
838 ; CHECK-NEXT: ptrue p0.h, vl8
839 ; CHECK-NEXT: // kill: def $q0 killed $q0 def $z0
840 ; CHECK-NEXT: // kill: def $q1 killed $q1 def $z1
841 ; CHECK-NEXT: fsub z0.h, p0/m, z0.h, z1.h
842 ; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0
844 %res = fsub <8 x half> %op1, %op2
848 define void @fsub_v16f16(ptr %a, ptr %b) {
849 ; CHECK-LABEL: fsub_v16f16:
851 ; CHECK-NEXT: ptrue p0.h, vl8
852 ; CHECK-NEXT: ldp q0, q3, [x1]
853 ; CHECK-NEXT: ldp q1, q2, [x0]
854 ; CHECK-NEXT: fsubr z0.h, p0/m, z0.h, z1.h
855 ; CHECK-NEXT: movprfx z1, z2
856 ; CHECK-NEXT: fsub z1.h, p0/m, z1.h, z3.h
857 ; CHECK-NEXT: stp q0, q1, [x0]
859 %op1 = load <16 x half>, ptr %a
860 %op2 = load <16 x half>, ptr %b
861 %res = fsub <16 x half> %op1, %op2
862 store <16 x half> %res, ptr %a
866 define <2 x float> @fsub_v2f32(<2 x float> %op1, <2 x float> %op2) {
867 ; CHECK-LABEL: fsub_v2f32:
869 ; CHECK-NEXT: ptrue p0.s, vl2
870 ; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0
871 ; CHECK-NEXT: // kill: def $d1 killed $d1 def $z1
872 ; CHECK-NEXT: fsub z0.s, p0/m, z0.s, z1.s
873 ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z0
875 %res = fsub <2 x float> %op1, %op2
879 define <4 x float> @fsub_v4f32(<4 x float> %op1, <4 x float> %op2) {
880 ; CHECK-LABEL: fsub_v4f32:
882 ; CHECK-NEXT: ptrue p0.s, vl4
883 ; CHECK-NEXT: // kill: def $q0 killed $q0 def $z0
884 ; CHECK-NEXT: // kill: def $q1 killed $q1 def $z1
885 ; CHECK-NEXT: fsub z0.s, p0/m, z0.s, z1.s
886 ; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0
888 %res = fsub <4 x float> %op1, %op2
892 define void @fsub_v8f32(ptr %a, ptr %b) {
893 ; CHECK-LABEL: fsub_v8f32:
895 ; CHECK-NEXT: ptrue p0.s, vl4
896 ; CHECK-NEXT: ldp q0, q3, [x1]
897 ; CHECK-NEXT: ldp q1, q2, [x0]
898 ; CHECK-NEXT: fsubr z0.s, p0/m, z0.s, z1.s
899 ; CHECK-NEXT: movprfx z1, z2
900 ; CHECK-NEXT: fsub z1.s, p0/m, z1.s, z3.s
901 ; CHECK-NEXT: stp q0, q1, [x0]
903 %op1 = load <8 x float>, ptr %a
904 %op2 = load <8 x float>, ptr %b
905 %res = fsub <8 x float> %op1, %op2
906 store <8 x float> %res, ptr %a
910 define <2 x double> @fsub_v2f64(<2 x double> %op1, <2 x double> %op2) {
911 ; CHECK-LABEL: fsub_v2f64:
913 ; CHECK-NEXT: ptrue p0.d, vl2
914 ; CHECK-NEXT: // kill: def $q0 killed $q0 def $z0
915 ; CHECK-NEXT: // kill: def $q1 killed $q1 def $z1
916 ; CHECK-NEXT: fsub z0.d, p0/m, z0.d, z1.d
917 ; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0
919 %res = fsub <2 x double> %op1, %op2
920 ret <2 x double> %res
923 define void @fsub_v4f64(ptr %a, ptr %b) {
924 ; CHECK-LABEL: fsub_v4f64:
926 ; CHECK-NEXT: ptrue p0.d, vl2
927 ; CHECK-NEXT: ldp q0, q3, [x1]
928 ; CHECK-NEXT: ldp q1, q2, [x0]
929 ; CHECK-NEXT: fsubr z0.d, p0/m, z0.d, z1.d
930 ; CHECK-NEXT: movprfx z1, z2
931 ; CHECK-NEXT: fsub z1.d, p0/m, z1.d, z3.d
932 ; CHECK-NEXT: stp q0, q1, [x0]
934 %op1 = load <4 x double>, ptr %a
935 %op2 = load <4 x double>, ptr %b
936 %res = fsub <4 x double> %op1, %op2
937 store <4 x double> %res, ptr %a
945 define <2 x half> @fabs_v2f16(<2 x half> %op) {
946 ; CHECK-LABEL: fabs_v2f16:
948 ; CHECK-NEXT: ptrue p0.h, vl4
949 ; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0
950 ; CHECK-NEXT: fabs z0.h, p0/m, z0.h
951 ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z0
953 %res = call <2 x half> @llvm.fabs.v2f16(<2 x half> %op)
957 define <4 x half> @fabs_v4f16(<4 x half> %op) {
958 ; CHECK-LABEL: fabs_v4f16:
960 ; CHECK-NEXT: ptrue p0.h, vl4
961 ; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0
962 ; CHECK-NEXT: fabs z0.h, p0/m, z0.h
963 ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z0
965 %res = call <4 x half> @llvm.fabs.v4f16(<4 x half> %op)
969 define <8 x half> @fabs_v8f16(<8 x half> %op) {
970 ; CHECK-LABEL: fabs_v8f16:
972 ; CHECK-NEXT: ptrue p0.h, vl8
973 ; CHECK-NEXT: // kill: def $q0 killed $q0 def $z0
974 ; CHECK-NEXT: fabs z0.h, p0/m, z0.h
975 ; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0
977 %res = call <8 x half> @llvm.fabs.v8f16(<8 x half> %op)
981 define void @fabs_v16f16(ptr %a) {
982 ; CHECK-LABEL: fabs_v16f16:
984 ; CHECK-NEXT: ptrue p0.h, vl8
985 ; CHECK-NEXT: ldp q0, q1, [x0]
986 ; CHECK-NEXT: fabs z0.h, p0/m, z0.h
987 ; CHECK-NEXT: fabs z1.h, p0/m, z1.h
988 ; CHECK-NEXT: stp q0, q1, [x0]
990 %op = load <16 x half>, ptr %a
991 %res = call <16 x half> @llvm.fabs.v16f16(<16 x half> %op)
992 store <16 x half> %res, ptr %a
996 define <2 x float> @fabs_v2f32(<2 x float> %op) {
997 ; CHECK-LABEL: fabs_v2f32:
999 ; CHECK-NEXT: ptrue p0.s, vl2
1000 ; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0
1001 ; CHECK-NEXT: fabs z0.s, p0/m, z0.s
1002 ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z0
1004 %res = call <2 x float> @llvm.fabs.v2f32(<2 x float> %op)
1005 ret <2 x float> %res
1008 define <4 x float> @fabs_v4f32(<4 x float> %op) {
1009 ; CHECK-LABEL: fabs_v4f32:
1011 ; CHECK-NEXT: ptrue p0.s, vl4
1012 ; CHECK-NEXT: // kill: def $q0 killed $q0 def $z0
1013 ; CHECK-NEXT: fabs z0.s, p0/m, z0.s
1014 ; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0
1016 %res = call <4 x float> @llvm.fabs.v4f32(<4 x float> %op)
1017 ret <4 x float> %res
1020 define void @fabs_v8f32(ptr %a) {
1021 ; CHECK-LABEL: fabs_v8f32:
1023 ; CHECK-NEXT: ptrue p0.s, vl4
1024 ; CHECK-NEXT: ldp q0, q1, [x0]
1025 ; CHECK-NEXT: fabs z0.s, p0/m, z0.s
1026 ; CHECK-NEXT: fabs z1.s, p0/m, z1.s
1027 ; CHECK-NEXT: stp q0, q1, [x0]
1029 %op = load <8 x float>, ptr %a
1030 %res = call <8 x float> @llvm.fabs.v8f32(<8 x float> %op)
1031 store <8 x float> %res, ptr %a
1035 define <2 x double> @fabs_v2f64(<2 x double> %op) {
1036 ; CHECK-LABEL: fabs_v2f64:
1038 ; CHECK-NEXT: ptrue p0.d, vl2
1039 ; CHECK-NEXT: // kill: def $q0 killed $q0 def $z0
1040 ; CHECK-NEXT: fabs z0.d, p0/m, z0.d
1041 ; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0
1043 %res = call <2 x double> @llvm.fabs.v2f64(<2 x double> %op)
1044 ret <2 x double> %res
1047 define void @fabs_v4f64(ptr %a) {
1048 ; CHECK-LABEL: fabs_v4f64:
1050 ; CHECK-NEXT: ptrue p0.d, vl2
1051 ; CHECK-NEXT: ldp q0, q1, [x0]
1052 ; CHECK-NEXT: fabs z0.d, p0/m, z0.d
1053 ; CHECK-NEXT: fabs z1.d, p0/m, z1.d
1054 ; CHECK-NEXT: stp q0, q1, [x0]
1056 %op = load <4 x double>, ptr %a
1057 %res = call <4 x double> @llvm.fabs.v4f64(<4 x double> %op)
1058 store <4 x double> %res, ptr %a
1062 declare <2 x half> @llvm.fma.v2f16(<2 x half>, <2 x half>, <2 x half>)
1063 declare <4 x half> @llvm.fma.v4f16(<4 x half>, <4 x half>, <4 x half>)
1064 declare <8 x half> @llvm.fma.v8f16(<8 x half>, <8 x half>, <8 x half>)
1065 declare <16 x half> @llvm.fma.v16f16(<16 x half>, <16 x half>, <16 x half>)
1066 declare <2 x float> @llvm.fma.v2f32(<2 x float>, <2 x float>, <2 x float>)
1067 declare <4 x float> @llvm.fma.v4f32(<4 x float>, <4 x float>, <4 x float>)
1068 declare <8 x float> @llvm.fma.v8f32(<8 x float>, <8 x float>, <8 x float>)
1069 declare <2 x double> @llvm.fma.v2f64(<2 x double>, <2 x double>, <2 x double>)
1070 declare <4 x double> @llvm.fma.v4f64(<4 x double>, <4 x double>, <4 x double>)
1072 declare <2 x half> @llvm.sqrt.v2f16(<2 x half>)
1073 declare <4 x half> @llvm.sqrt.v4f16(<4 x half>)
1074 declare <8 x half> @llvm.sqrt.v8f16(<8 x half>)
1075 declare <16 x half> @llvm.sqrt.v16f16(<16 x half>)
1076 declare <2 x float> @llvm.sqrt.v2f32(<2 x float>)
1077 declare <4 x float> @llvm.sqrt.v4f32(<4 x float>)
1078 declare <8 x float> @llvm.sqrt.v8f32(<8 x float>)
1079 declare <2 x double> @llvm.sqrt.v2f64(<2 x double>)
1080 declare <4 x double> @llvm.sqrt.v4f64(<4 x double>)
1082 declare <2 x half> @llvm.fabs.v2f16(<2 x half>)
1083 declare <4 x half> @llvm.fabs.v4f16(<4 x half>)
1084 declare <8 x half> @llvm.fabs.v8f16(<8 x half>)
1085 declare <16 x half> @llvm.fabs.v16f16(<16 x half>)
1086 declare <2 x float> @llvm.fabs.v2f32(<2 x float>)
1087 declare <4 x float> @llvm.fabs.v4f32(<4 x float>)
1088 declare <8 x float> @llvm.fabs.v8f32(<8 x float>)
1089 declare <2 x double> @llvm.fabs.v2f64(<2 x double>)
1090 declare <4 x double> @llvm.fabs.v4f64(<4 x double>)