[ORC] Add std::tuple support to SimplePackedSerialization.
[llvm-project.git] / llvm / test / CodeGen / AArch64 / sve-intrinsics-fp-arith.ll
blob16c8529a87be721d5599c21a8c1a200ded861de8
1 ; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve < %s | FileCheck %s
4 ; FABD
7 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) {
8 ; CHECK-LABEL: fabd_h:
9 ; CHECK: fabd z0.h, p0/m, z0.h, z1.h
10 ; CHECK-NEXT: ret
11   %out = call <vscale x 8 x half> @llvm.aarch64.sve.fabd.nxv8f16(<vscale x 8 x i1> %pg,
12                                                                  <vscale x 8 x half> %a,
13                                                                  <vscale x 8 x half> %b)
14   ret <vscale x 8 x half> %out
17 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) {
18 ; CHECK-LABEL: fabd_s:
19 ; CHECK: fabd z0.s, p0/m, z0.s, z1.s
20 ; CHECK-NEXT: ret
21   %out = call <vscale x 4 x float> @llvm.aarch64.sve.fabd.nxv4f32(<vscale x 4 x i1> %pg,
22                                                                   <vscale x 4 x float> %a,
23                                                                   <vscale x 4 x float> %b)
24   ret <vscale x 4 x float> %out
27 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) {
28 ; CHECK-LABEL: fabd_d:
29 ; CHECK: fabd z0.d, p0/m, z0.d, z1.d
30 ; CHECK-NEXT: ret
31   %out = call <vscale x 2 x double> @llvm.aarch64.sve.fabd.nxv2f64(<vscale x 2 x i1> %pg,
32                                                                    <vscale x 2 x double> %a,
33                                                                    <vscale x 2 x double> %b)
34   ret <vscale x 2 x double> %out
38 ; FABS
41 define <vscale x 8 x half> @fabs_h(<vscale x 8 x half> %a, <vscale x 8 x i1> %pg, <vscale x 8 x half> %b) {
42 ; CHECK-LABEL: fabs_h:
43 ; CHECK: fabs z0.h, p0/m, z1.h
44 ; CHECK-NEXT: ret
45   %out = call <vscale x 8 x half> @llvm.aarch64.sve.fabs.nxv8f16(<vscale x 8 x half> %a,
46                                                                  <vscale x 8 x i1> %pg,
47                                                                  <vscale x 8 x half> %b)
48   ret <vscale x 8 x half> %out
51 define <vscale x 4 x float> @fabs_s(<vscale x 4 x float> %a, <vscale x 4 x i1> %pg, <vscale x 4 x float> %b) {
52 ; CHECK-LABEL: fabs_s:
53 ; CHECK: fabs z0.s, p0/m, z1.s
54 ; CHECK-NEXT: ret
55   %out = call <vscale x 4 x float> @llvm.aarch64.sve.fabs.nxv4f32(<vscale x 4 x float> %a,
56                                                                   <vscale x 4 x i1> %pg,
57                                                                   <vscale x 4 x float> %b)
58   ret <vscale x 4 x float> %out
61 define <vscale x 2 x double> @fabs_d(<vscale x 2 x double> %a, <vscale x 2 x i1> %pg, <vscale x 2 x double> %b) {
62 ; CHECK-LABEL: fabs_d:
63 ; CHECK: fabs z0.d, p0/m, z1.d
64 ; CHECK-NEXT: ret
65   %out = call <vscale x 2 x double> @llvm.aarch64.sve.fabs.nxv2f64(<vscale x 2 x double> %a,
66                                                                    <vscale x 2 x i1> %pg,
67                                                                    <vscale x 2 x double> %b)
68   ret <vscale x 2 x double> %out
72 ; FADD
75 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) {
76 ; CHECK-LABEL: fadd_h:
77 ; CHECK: fadd z0.h, p0/m, z0.h, z1.h
78 ; CHECK-NEXT: ret
79   %out = call <vscale x 8 x half> @llvm.aarch64.sve.fadd.nxv8f16(<vscale x 8 x i1> %pg,
80                                                                  <vscale x 8 x half> %a,
81                                                                  <vscale x 8 x half> %b)
82   ret <vscale x 8 x half> %out
85 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) {
86 ; CHECK-LABEL: fadd_s:
87 ; CHECK: fadd z0.s, p0/m, z0.s, z1.s
88 ; CHECK-NEXT: ret
89   %out = call <vscale x 4 x float> @llvm.aarch64.sve.fadd.nxv4f32(<vscale x 4 x i1> %pg,
90                                                                   <vscale x 4 x float> %a,
91                                                                   <vscale x 4 x float> %b)
92   ret <vscale x 4 x float> %out
95 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) {
96 ; CHECK-LABEL: fadd_d:
97 ; CHECK: fadd z0.d, p0/m, z0.d, z1.d
98 ; CHECK-NEXT: ret
99   %out = call <vscale x 2 x double> @llvm.aarch64.sve.fadd.nxv2f64(<vscale x 2 x i1> %pg,
100                                                                    <vscale x 2 x double> %a,
101                                                                    <vscale x 2 x double> %b)
102   ret <vscale x 2 x double> %out
106 ; FCADD
109 define <vscale x 8 x half> @fcadd_h(<vscale x 8 x i1> %pg, <vscale x 8 x half> %a, <vscale x 8 x half> %b) {
110 ; CHECK-LABEL: fcadd_h:
111 ; CHECK: fcadd z0.h, p0/m, z0.h, z1.h, #90
112 ; CHECK-NEXT: ret
113   %out = call <vscale x 8 x half> @llvm.aarch64.sve.fcadd.nxv8f16(<vscale x 8 x i1> %pg,
114                                                                   <vscale x 8 x half> %a,
115                                                                   <vscale x 8 x half> %b,
116                                                                   i32 90)
117   ret <vscale x 8 x half> %out
120 define <vscale x 4 x float> @fcadd_s(<vscale x 4 x i1> %pg, <vscale x 4 x float> %a, <vscale x 4 x float> %b) {
121 ; CHECK-LABEL: fcadd_s:
122 ; CHECK: fcadd z0.s, p0/m, z0.s, z1.s, #270
123 ; CHECK-NEXT: ret
124   %out = call <vscale x 4 x float> @llvm.aarch64.sve.fcadd.nxv4f32(<vscale x 4 x i1> %pg,
125                                                                    <vscale x 4 x float> %a,
126                                                                    <vscale x 4 x float> %b,
127                                                                    i32 270)
128   ret <vscale x 4 x float> %out
131 define <vscale x 2 x double> @fcadd_d(<vscale x 2 x i1> %pg, <vscale x 2 x double> %a, <vscale x 2 x double> %b) {
132 ; CHECK-LABEL: fcadd_d:
133 ; CHECK: fcadd z0.d, p0/m, z0.d, z1.d, #90
134 ; CHECK-NEXT: ret
135   %out = call <vscale x 2 x double> @llvm.aarch64.sve.fcadd.nxv2f64(<vscale x 2 x i1> %pg,
136                                                                     <vscale x 2 x double> %a,
137                                                                     <vscale x 2 x double> %b,
138                                                                     i32 90)
139   ret <vscale x 2 x double> %out
143 ; FCMLA
146 define <vscale x 8 x half> @fcmla_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) {
147 ; CHECK-LABEL: fcmla_h:
148 ; CHECK: fcmla z0.h, p0/m, z1.h, z2.h, #90
149 ; CHECK-NEXT: ret
150   %out = call <vscale x 8 x half> @llvm.aarch64.sve.fcmla.nxv8f16(<vscale x 8 x i1> %pg,
151                                                                   <vscale x 8 x half> %a,
152                                                                   <vscale x 8 x half> %b,
153                                                                   <vscale x 8 x half> %c,
154                                                                   i32 90)
155   ret <vscale x 8 x half> %out
158 define <vscale x 4 x float> @fcmla_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) {
159 ; CHECK-LABEL: fcmla_s:
160 ; CHECK: fcmla z0.s, p0/m, z1.s, z2.s, #180
161 ; CHECK-NEXT: ret
162   %out = call <vscale x 4 x float> @llvm.aarch64.sve.fcmla.nxv4f32(<vscale x 4 x i1> %pg,
163                                                                    <vscale x 4 x float> %a,
164                                                                    <vscale x 4 x float> %b,
165                                                                    <vscale x 4 x float> %c,
166                                                                    i32 180)
167   ret <vscale x 4 x float> %out
170 define <vscale x 2 x double> @fcmla_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) {
171 ; CHECK-LABEL: fcmla_d:
172 ; CHECK: fcmla z0.d, p0/m, z1.d, z2.d, #270
173 ; CHECK-NEXT: ret
174   %out = call <vscale x 2 x double> @llvm.aarch64.sve.fcmla.nxv2f64(<vscale x 2 x i1> %pg,
175                                                                     <vscale x 2 x double> %a,
176                                                                     <vscale x 2 x double> %b,
177                                                                     <vscale x 2 x double> %c,
178                                                                     i32 270)
179   ret <vscale x 2 x double> %out
183 ; FCMLA (Indexed)
186 define <vscale x 8 x half> @fcmla_lane_h(<vscale x 8 x half> %a, <vscale x 8 x half> %b, <vscale x 8 x half> %c) {
187 ; CHECK-LABEL: fcmla_lane_h:
188 ; CHECK: fcmla z0.h, z1.h, z2.h[3], #0
189 ; CHECK-NEXT: ret
190   %out = call <vscale x 8 x half> @llvm.aarch64.sve.fcmla.lane.nxv8f16(<vscale x 8 x half> %a,
191                                                                        <vscale x 8 x half> %b,
192                                                                        <vscale x 8 x half> %c,
193                                                                        i32 3,
194                                                                        i32 0)
195   ret <vscale x 8 x half> %out
198 define <vscale x 4 x float> @fcmla_lane_s(<vscale x 4 x float> %a, <vscale x 4 x float> %b, <vscale x 4 x float> %c) {
199 ; CHECK-LABEL: fcmla_lane_s:
200 ; CHECK: fcmla z0.s, z1.s, z2.s[1], #90
201 ; CHECK-NEXT: ret
202   %out = call <vscale x 4 x float> @llvm.aarch64.sve.fcmla.lane.nxv4f32(<vscale x 4 x float> %a,
203                                                                         <vscale x 4 x float> %b,
204                                                                         <vscale x 4 x float> %c,
205                                                                         i32 1,
206                                                                         i32 90)
207   ret <vscale x 4 x float> %out
211 ; FDIV
214 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) {
215 ; CHECK-LABEL: fdiv_h:
216 ; CHECK: fdiv z0.h, p0/m, z0.h, z1.h
217 ; CHECK-NEXT: ret
218   %out = call <vscale x 8 x half> @llvm.aarch64.sve.fdiv.nxv8f16(<vscale x 8 x i1> %pg,
219                                                                  <vscale x 8 x half> %a,
220                                                                  <vscale x 8 x half> %b)
221   ret <vscale x 8 x half> %out
224 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) {
225 ; CHECK-LABEL: fdiv_s:
226 ; CHECK: fdiv z0.s, p0/m, z0.s, z1.s
227 ; CHECK-NEXT: ret
228   %out = call <vscale x 4 x float> @llvm.aarch64.sve.fdiv.nxv4f32(<vscale x 4 x i1> %pg,
229                                                                   <vscale x 4 x float> %a,
230                                                                   <vscale x 4 x float> %b)
231   ret <vscale x 4 x float> %out
234 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) {
235 ; CHECK-LABEL: fdiv_d:
236 ; CHECK: fdiv z0.d, p0/m, z0.d, z1.d
237 ; CHECK-NEXT: ret
238   %out = call <vscale x 2 x double> @llvm.aarch64.sve.fdiv.nxv2f64(<vscale x 2 x i1> %pg,
239                                                                    <vscale x 2 x double> %a,
240                                                                    <vscale x 2 x double> %b)
241   ret <vscale x 2 x double> %out
245 ; FDIVR
248 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) {
249 ; CHECK-LABEL: fdivr_h:
250 ; CHECK: fdivr z0.h, p0/m, z0.h, z1.h
251 ; CHECK-NEXT: ret
252   %out = call <vscale x 8 x half> @llvm.aarch64.sve.fdivr.nxv8f16(<vscale x 8 x i1> %pg,
253                                                                   <vscale x 8 x half> %a,
254                                                                   <vscale x 8 x half> %b)
255   ret <vscale x 8 x half> %out
258 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) {
259 ; CHECK-LABEL: fdivr_s:
260 ; CHECK: fdivr z0.s, p0/m, z0.s, z1.s
261 ; CHECK-NEXT: ret
262   %out = call <vscale x 4 x float> @llvm.aarch64.sve.fdivr.nxv4f32(<vscale x 4 x i1> %pg,
263                                                                    <vscale x 4 x float> %a,
264                                                                    <vscale x 4 x float> %b)
265   ret <vscale x 4 x float> %out
268 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) {
269 ; CHECK-LABEL: fdivr_d:
270 ; CHECK: fdivr z0.d, p0/m, z0.d, z1.d
271 ; CHECK-NEXT: ret
272   %out = call <vscale x 2 x double> @llvm.aarch64.sve.fdivr.nxv2f64(<vscale x 2 x i1> %pg,
273                                                                     <vscale x 2 x double> %a,
274                                                                     <vscale x 2 x double> %b)
275   ret <vscale x 2 x double> %out
279 ; FEXPA
282 define <vscale x 8 x half> @fexpa_h(<vscale x 8 x i16> %a) {
283 ; CHECK-LABEL: fexpa_h:
284 ; CHECK: fexpa z0.h, z0.h
285 ; CHECK-NEXT: ret
286   %out = call <vscale x 8 x half> @llvm.aarch64.sve.fexpa.x.nxv8f16(<vscale x 8 x i16> %a)
287   ret <vscale x 8 x half> %out
290 define <vscale x 4 x float> @fexpa_s(<vscale x 4 x i32> %a) {
291 ; CHECK-LABEL: fexpa_s:
292 ; CHECK: fexpa z0.s, z0.s
293 ; CHECK-NEXT: ret
294   %out = call <vscale x 4 x float> @llvm.aarch64.sve.fexpa.x.nxv4f32(<vscale x 4 x i32> %a)
295   ret <vscale x 4 x float> %out
298 define <vscale x 2 x double> @fexpa_d(<vscale x 2 x i1> %pg, <vscale x 2 x i64> %a) {
299 ; CHECK-LABEL: fexpa_d:
300 ; CHECK: fexpa z0.d, z0.d
301 ; CHECK-NEXT: ret
302   %out = call <vscale x 2 x double> @llvm.aarch64.sve.fexpa.x.nxv2f64(<vscale x 2 x i64> %a)
303   ret <vscale x 2 x double> %out
307 ; FMAD
310 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) {
311 ; CHECK-LABEL: fmad_h:
312 ; CHECK: fmad z0.h, p0/m, z1.h, z2.h
313 ; CHECK-NEXT: ret
314   %out = call <vscale x 8 x half> @llvm.aarch64.sve.fmad.nxv8f16(<vscale x 8 x i1> %pg,
315                                                                  <vscale x 8 x half> %a,
316                                                                  <vscale x 8 x half> %b,
317                                                                  <vscale x 8 x half> %c)
318   ret <vscale x 8 x half> %out
321 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) {
322 ; CHECK-LABEL: fmad_s:
323 ; CHECK: fmad z0.s, p0/m, z1.s, z2.s
324 ; CHECK-NEXT: ret
325   %out = call <vscale x 4 x float> @llvm.aarch64.sve.fmad.nxv4f32(<vscale x 4 x i1> %pg,
326                                                                   <vscale x 4 x float> %a,
327                                                                   <vscale x 4 x float> %b,
328                                                                   <vscale x 4 x float> %c)
329   ret <vscale x 4 x float> %out
332 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) {
333 ; CHECK-LABEL: fmad_d:
334 ; CHECK: fmad z0.d, p0/m, z1.d, z2.d
335 ; CHECK-NEXT: ret
336   %out = call <vscale x 2 x double> @llvm.aarch64.sve.fmad.nxv2f64(<vscale x 2 x i1> %pg,
337                                                                    <vscale x 2 x double> %a,
338                                                                    <vscale x 2 x double> %b,
339                                                                    <vscale x 2 x double> %c)
340   ret <vscale x 2 x double> %out
344 ; FMAX
347 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) {
348 ; CHECK-LABEL: fmax_h:
349 ; CHECK: fmax z0.h, p0/m, z0.h, z1.h
350 ; CHECK-NEXT: ret
351   %out = call <vscale x 8 x half> @llvm.aarch64.sve.fmax.nxv8f16(<vscale x 8 x i1> %pg,
352                                                                  <vscale x 8 x half> %a,
353                                                                  <vscale x 8 x half> %b)
354   ret <vscale x 8 x half> %out
357 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) {
358 ; CHECK-LABEL: fmax_s:
359 ; CHECK: fmax z0.s, p0/m, z0.s, z1.s
360 ; CHECK-NEXT: ret
361   %out = call <vscale x 4 x float> @llvm.aarch64.sve.fmax.nxv4f32(<vscale x 4 x i1> %pg,
362                                                                   <vscale x 4 x float> %a,
363                                                                   <vscale x 4 x float> %b)
364   ret <vscale x 4 x float> %out
367 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) {
368 ; CHECK-LABEL: fmax_d:
369 ; CHECK: fmax z0.d, p0/m, z0.d, z1.d
370 ; CHECK-NEXT: ret
371   %out = call <vscale x 2 x double> @llvm.aarch64.sve.fmax.nxv2f64(<vscale x 2 x i1> %pg,
372                                                                    <vscale x 2 x double> %a,
373                                                                    <vscale x 2 x double> %b)
374   ret <vscale x 2 x double> %out
378 ; FMAXNM
381 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) {
382 ; CHECK-LABEL: fmaxnm_h:
383 ; CHECK: fmaxnm z0.h, p0/m, z0.h, z1.h
384 ; CHECK-NEXT: ret
385   %out = call <vscale x 8 x half> @llvm.aarch64.sve.fmaxnm.nxv8f16(<vscale x 8 x i1> %pg,
386                                                                    <vscale x 8 x half> %a,
387                                                                    <vscale x 8 x half> %b)
388   ret <vscale x 8 x half> %out
391 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) {
392 ; CHECK-LABEL: fmaxnm_s:
393 ; CHECK: fmaxnm z0.s, p0/m, z0.s, z1.s
394 ; CHECK-NEXT: ret
395   %out = call <vscale x 4 x float> @llvm.aarch64.sve.fmaxnm.nxv4f32(<vscale x 4 x i1> %pg,
396                                                                     <vscale x 4 x float> %a,
397                                                                     <vscale x 4 x float> %b)
398   ret <vscale x 4 x float> %out
401 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) {
402 ; CHECK-LABEL: fmaxnm_d:
403 ; CHECK: fmaxnm z0.d, p0/m, z0.d, z1.d
404 ; CHECK-NEXT: ret
405   %out = call <vscale x 2 x double> @llvm.aarch64.sve.fmaxnm.nxv2f64(<vscale x 2 x i1> %pg,
406                                                                      <vscale x 2 x double> %a,
407                                                                      <vscale x 2 x double> %b)
408   ret <vscale x 2 x double> %out
412 ; FMIN
415 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) {
416 ; CHECK-LABEL: fmin_h:
417 ; CHECK: fmin z0.h, p0/m, z0.h, z1.h
418 ; CHECK-NEXT: ret
419   %out = call <vscale x 8 x half> @llvm.aarch64.sve.fmin.nxv8f16(<vscale x 8 x i1> %pg,
420                                                                  <vscale x 8 x half> %a,
421                                                                  <vscale x 8 x half> %b)
422   ret <vscale x 8 x half> %out
425 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) {
426 ; CHECK-LABEL: fmin_s:
427 ; CHECK: fmin z0.s, p0/m, z0.s, z1.s
428 ; CHECK-NEXT: ret
429   %out = call <vscale x 4 x float> @llvm.aarch64.sve.fmin.nxv4f32(<vscale x 4 x i1> %pg,
430                                                                   <vscale x 4 x float> %a,
431                                                                   <vscale x 4 x float> %b)
432   ret <vscale x 4 x float> %out
435 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) {
436 ; CHECK-LABEL: fmin_d:
437 ; CHECK: fmin z0.d, p0/m, z0.d, z1.d
438 ; CHECK-NEXT: ret
439   %out = call <vscale x 2 x double> @llvm.aarch64.sve.fmin.nxv2f64(<vscale x 2 x i1> %pg,
440                                                                    <vscale x 2 x double> %a,
441                                                                    <vscale x 2 x double> %b)
442   ret <vscale x 2 x double> %out
446 ; FMINNM
449 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) {
450 ; CHECK-LABEL: fminnm_h:
451 ; CHECK: fminnm z0.h, p0/m, z0.h, z1.h
452 ; CHECK-NEXT: ret
453   %out = call <vscale x 8 x half> @llvm.aarch64.sve.fminnm.nxv8f16(<vscale x 8 x i1> %pg,
454                                                                    <vscale x 8 x half> %a,
455                                                                    <vscale x 8 x half> %b)
456   ret <vscale x 8 x half> %out
459 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) {
460 ; CHECK-LABEL: fminnm_s:
461 ; CHECK: fminnm z0.s, p0/m, z0.s, z1.s
462 ; CHECK-NEXT: ret
463   %out = call <vscale x 4 x float> @llvm.aarch64.sve.fminnm.nxv4f32(<vscale x 4 x i1> %pg,
464                                                                     <vscale x 4 x float> %a,
465                                                                     <vscale x 4 x float> %b)
466   ret <vscale x 4 x float> %out
469 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) {
470 ; CHECK-LABEL: fminnm_d:
471 ; CHECK: fminnm z0.d, p0/m, z0.d, z1.d
472 ; CHECK-NEXT: ret
473   %out = call <vscale x 2 x double> @llvm.aarch64.sve.fminnm.nxv2f64(<vscale x 2 x i1> %pg,
474                                                                      <vscale x 2 x double> %a,
475                                                                      <vscale x 2 x double> %b)
476   ret <vscale x 2 x double> %out
480 ; FMLA
483 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) {
484 ; CHECK-LABEL: fmla_h:
485 ; CHECK: fmla z0.h, p0/m, z1.h, z2.h
486 ; CHECK-NEXT: ret
487   %out = call <vscale x 8 x half> @llvm.aarch64.sve.fmla.nxv8f16(<vscale x 8 x i1> %pg,
488                                                                  <vscale x 8 x half> %a,
489                                                                  <vscale x 8 x half> %b,
490                                                                  <vscale x 8 x half> %c)
491   ret <vscale x 8 x half> %out
494 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) {
495 ; CHECK-LABEL: fmla_s:
496 ; CHECK: fmla z0.s, p0/m, z1.s, z2.s
497 ; CHECK-NEXT: ret
498   %out = call <vscale x 4 x float> @llvm.aarch64.sve.fmla.nxv4f32(<vscale x 4 x i1> %pg,
499                                                                   <vscale x 4 x float> %a,
500                                                                   <vscale x 4 x float> %b,
501                                                                   <vscale x 4 x float> %c)
502   ret <vscale x 4 x float> %out
505 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) {
506 ; CHECK-LABEL: fmla_d:
507 ; CHECK: fmla z0.d, p0/m, z1.d, z2.d
508 ; CHECK-NEXT: ret
509   %out = call <vscale x 2 x double> @llvm.aarch64.sve.fmla.nxv2f64(<vscale x 2 x i1> %pg,
510                                                                    <vscale x 2 x double> %a,
511                                                                    <vscale x 2 x double> %b,
512                                                                    <vscale x 2 x double> %c)
513   ret <vscale x 2 x double> %out
517 ; FMLA (Indexed)
520 define <vscale x 8 x half> @fmla_lane_h(<vscale x 8 x half> %a, <vscale x 8 x half> %b, <vscale x 8 x half> %c) {
521 ; CHECK-LABEL: fmla_lane_h:
522 ; CHECK: fmla z0.h, z1.h, z2.h[3]
523 ; CHECK-NEXT: ret
524   %out = call <vscale x 8 x half> @llvm.aarch64.sve.fmla.lane.nxv8f16(<vscale x 8 x half> %a,
525                                                                       <vscale x 8 x half> %b,
526                                                                       <vscale x 8 x half> %c,
527                                                                       i32 3)
528   ret <vscale x 8 x half> %out
531 define <vscale x 4 x float> @fmla_lane_s(<vscale x 4 x float> %a, <vscale x 4 x float> %b, <vscale x 4 x float> %c) {
532 ; CHECK-LABEL: fmla_lane_s:
533 ; CHECK: fmla z0.s, z1.s, z2.s[2]
534 ; CHECK-NEXT: ret
535   %out = call <vscale x 4 x float> @llvm.aarch64.sve.fmla.lane.nxv4f32(<vscale x 4 x float> %a,
536                                                                        <vscale x 4 x float> %b,
537                                                                        <vscale x 4 x float> %c,
538                                                                        i32 2)
539   ret <vscale x 4 x float> %out
542 define <vscale x 2 x double> @fmla_lane_d(<vscale x 2 x double> %a, <vscale x 2 x double> %b, <vscale x 2 x double> %c) {
543 ; CHECK-LABEL: fmla_lane_d:
544 ; CHECK: fmla z0.d, z1.d, z2.d[1]
545 ; CHECK-NEXT: ret
546   %out = call <vscale x 2 x double> @llvm.aarch64.sve.fmla.lane.nxv2f64(<vscale x 2 x double> %a,
547                                                                         <vscale x 2 x double> %b,
548                                                                         <vscale x 2 x double> %c,
549                                                                         i32 1)
550   ret <vscale x 2 x double> %out
554 ; FMLS
557 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) {
558 ; CHECK-LABEL: fmls_h:
559 ; CHECK: fmls z0.h, p0/m, z1.h, z2.h
560 ; CHECK-NEXT: ret
561   %out = call <vscale x 8 x half> @llvm.aarch64.sve.fmls.nxv8f16(<vscale x 8 x i1> %pg,
562                                                                  <vscale x 8 x half> %a,
563                                                                  <vscale x 8 x half> %b,
564                                                                  <vscale x 8 x half> %c)
565   ret <vscale x 8 x half> %out
568 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) {
569 ; CHECK-LABEL: fmls_s:
570 ; CHECK: fmls z0.s, p0/m, z1.s, z2.s
571 ; CHECK-NEXT: ret
572   %out = call <vscale x 4 x float> @llvm.aarch64.sve.fmls.nxv4f32(<vscale x 4 x i1> %pg,
573                                                                   <vscale x 4 x float> %a,
574                                                                   <vscale x 4 x float> %b,
575                                                                   <vscale x 4 x float> %c)
576   ret <vscale x 4 x float> %out
579 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) {
580 ; CHECK-LABEL: fmls_d:
581 ; CHECK: fmls z0.d, p0/m, z1.d, z2.d
582 ; CHECK-NEXT: ret
583   %out = call <vscale x 2 x double> @llvm.aarch64.sve.fmls.nxv2f64(<vscale x 2 x i1> %pg,
584                                                                    <vscale x 2 x double> %a,
585                                                                    <vscale x 2 x double> %b,
586                                                                    <vscale x 2 x double> %c)
587   ret <vscale x 2 x double> %out
591 ; FMLS (Indexed)
594 define <vscale x 8 x half> @fmls_lane_h(<vscale x 8 x half> %a, <vscale x 8 x half> %b, <vscale x 8 x half> %c) {
595 ; CHECK-LABEL: fmls_lane_h:
596 ; CHECK: fmls z0.h, z1.h, z2.h[3]
597 ; CHECK-NEXT: ret
598   %out = call <vscale x 8 x half> @llvm.aarch64.sve.fmls.lane.nxv8f16(<vscale x 8 x half> %a,
599                                                                  <vscale x 8 x half> %b,
600                                                                  <vscale x 8 x half> %c,
601                                                                  i32 3)
602   ret <vscale x 8 x half> %out
605 define <vscale x 4 x float> @fmls_lane_s(<vscale x 4 x float> %a, <vscale x 4 x float> %b, <vscale x 4 x float> %c) {
606 ; CHECK-LABEL: fmls_lane_s:
607 ; CHECK: fmls z0.s, z1.s, z2.s[2]
608 ; CHECK-NEXT: ret
609   %out = call <vscale x 4 x float> @llvm.aarch64.sve.fmls.lane.nxv4f32(<vscale x 4 x float> %a,
610                                                                   <vscale x 4 x float> %b,
611                                                                   <vscale x 4 x float> %c,
612                                                                   i32 2)
613   ret <vscale x 4 x float> %out
616 define <vscale x 2 x double> @fmls_lane_d(<vscale x 2 x double> %a, <vscale x 2 x double> %b, <vscale x 2 x double> %c) {
617 ; CHECK-LABEL: fmls_lane_d:
618 ; CHECK: fmls z0.d, z1.d, z2.d[1]
619 ; CHECK-NEXT: ret
620   %out = call <vscale x 2 x double> @llvm.aarch64.sve.fmls.lane.nxv2f64(<vscale x 2 x double> %a,
621                                                                    <vscale x 2 x double> %b,
622                                                                    <vscale x 2 x double> %c,
623                                                                    i32 1)
624   ret <vscale x 2 x double> %out
628 ; FMSB
631 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) {
632 ; CHECK-LABEL: fmsb_h:
633 ; CHECK: fmsb z0.h, p0/m, z1.h, z2.h
634 ; CHECK-NEXT: ret
635   %out = call <vscale x 8 x half> @llvm.aarch64.sve.fmsb.nxv8f16(<vscale x 8 x i1> %pg,
636                                                                  <vscale x 8 x half> %a,
637                                                                  <vscale x 8 x half> %b,
638                                                                  <vscale x 8 x half> %c)
639   ret <vscale x 8 x half> %out
642 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) {
643 ; CHECK-LABEL: fmsb_s:
644 ; CHECK: fmsb z0.s, p0/m, z1.s, z2.s
645 ; CHECK-NEXT: ret
646   %out = call <vscale x 4 x float> @llvm.aarch64.sve.fmsb.nxv4f32(<vscale x 4 x i1> %pg,
647                                                                   <vscale x 4 x float> %a,
648                                                                   <vscale x 4 x float> %b,
649                                                                   <vscale x 4 x float> %c)
650   ret <vscale x 4 x float> %out
653 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) {
654 ; CHECK-LABEL: fmsb_d:
655 ; CHECK: fmsb z0.d, p0/m, z1.d, z2.d
656 ; CHECK-NEXT: ret
657   %out = call <vscale x 2 x double> @llvm.aarch64.sve.fmsb.nxv2f64(<vscale x 2 x i1> %pg,
658                                                                    <vscale x 2 x double> %a,
659                                                                    <vscale x 2 x double> %b,
660                                                                    <vscale x 2 x double> %c)
661   ret <vscale x 2 x double> %out
665 ; FMUL
668 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) {
669 ; CHECK-LABEL: fmul_h:
670 ; CHECK: fmul z0.h, p0/m, z0.h, z1.h
671 ; CHECK-NEXT: ret
672   %out = call <vscale x 8 x half> @llvm.aarch64.sve.fmul.nxv8f16(<vscale x 8 x i1> %pg,
673                                                                  <vscale x 8 x half> %a,
674                                                                  <vscale x 8 x half> %b)
675   ret <vscale x 8 x half> %out
678 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) {
679 ; CHECK-LABEL: fmul_s:
680 ; CHECK: fmul z0.s, p0/m, z0.s, z1.s
681 ; CHECK-NEXT: ret
682   %out = call <vscale x 4 x float> @llvm.aarch64.sve.fmul.nxv4f32(<vscale x 4 x i1> %pg,
683                                                                   <vscale x 4 x float> %a,
684                                                                   <vscale x 4 x float> %b)
685   ret <vscale x 4 x float> %out
688 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) {
689 ; CHECK-LABEL: fmul_d:
690 ; CHECK: fmul z0.d, p0/m, z0.d, z1.d
691 ; CHECK-NEXT: ret
692   %out = call <vscale x 2 x double> @llvm.aarch64.sve.fmul.nxv2f64(<vscale x 2 x i1> %pg,
693                                                                    <vscale x 2 x double> %a,
694                                                                    <vscale x 2 x double> %b)
695   ret <vscale x 2 x double> %out
699 ; FMUL (Indexed)
702 define <vscale x 8 x half> @fmul_lane_h(<vscale x 8 x half> %a, <vscale x 8 x half> %b) {
703 ; CHECK-LABEL: fmul_lane_h:
704 ; CHECK: fmul z0.h, z0.h, z1.h[3]
705 ; CHECK-NEXT: ret
706   %out = call <vscale x 8 x half> @llvm.aarch64.sve.fmul.lane.nxv8f16(<vscale x 8 x half> %a,
707                                                                       <vscale x 8 x half> %b,
708                                                                       i32 3)
709   ret <vscale x 8 x half> %out
712 define <vscale x 4 x float> @fmul_lane_s(<vscale x 4 x float> %a, <vscale x 4 x float> %b) {
713 ; CHECK-LABEL: fmul_lane_s:
714 ; CHECK: fmul z0.s, z0.s, z1.s[2]
715 ; CHECK-NEXT: ret
716   %out = call <vscale x 4 x float> @llvm.aarch64.sve.fmul.lane.nxv4f32(<vscale x 4 x float> %a,
717                                                                        <vscale x 4 x float> %b,
718                                                                        i32 2)
719   ret <vscale x 4 x float> %out
722 define <vscale x 2 x double> @fmul_lane_d(<vscale x 2 x double> %a, <vscale x 2 x double> %b) {
723 ; CHECK-LABEL: fmul_lane_d:
724 ; CHECK: fmul z0.d, z0.d, z1.d[1]
725 ; CHECK-NEXT: ret
726   %out = call <vscale x 2 x double> @llvm.aarch64.sve.fmul.lane.nxv2f64(<vscale x 2 x double> %a,
727                                                                         <vscale x 2 x double> %b,
728                                                                         i32 1)
729   ret <vscale x 2 x double> %out
733 ; FMULX
736 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) {
737 ; CHECK-LABEL: fmulx_h:
738 ; CHECK: fmulx z0.h, p0/m, z0.h, z1.h
739 ; CHECK-NEXT: ret
740   %out = call <vscale x 8 x half> @llvm.aarch64.sve.fmulx.nxv8f16(<vscale x 8 x i1> %pg,
741                                                                   <vscale x 8 x half> %a,
742                                                                   <vscale x 8 x half> %b)
743   ret <vscale x 8 x half> %out
746 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) {
747 ; CHECK-LABEL: fmulx_s:
748 ; CHECK: fmulx z0.s, p0/m, z0.s, z1.s
749 ; CHECK-NEXT: ret
750   %out = call <vscale x 4 x float> @llvm.aarch64.sve.fmulx.nxv4f32(<vscale x 4 x i1> %pg,
751                                                                    <vscale x 4 x float> %a,
752                                                                    <vscale x 4 x float> %b)
753   ret <vscale x 4 x float> %out
756 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) {
757 ; CHECK-LABEL: fmulx_d:
758 ; CHECK: fmulx z0.d, p0/m, z0.d, z1.d
759 ; CHECK-NEXT: ret
760   %out = call <vscale x 2 x double> @llvm.aarch64.sve.fmulx.nxv2f64(<vscale x 2 x i1> %pg,
761                                                                     <vscale x 2 x double> %a,
762                                                                     <vscale x 2 x double> %b)
763   ret <vscale x 2 x double> %out
767 ; FNEG
770 define <vscale x 8 x half> @fneg_h(<vscale x 8 x half> %a, <vscale x 8 x i1> %pg, <vscale x 8 x half> %b) {
771 ; CHECK-LABEL: fneg_h:
772 ; CHECK: fneg z0.h, p0/m, z1.h
773 ; CHECK-NEXT: ret
774   %out = call <vscale x 8 x half> @llvm.aarch64.sve.fneg.nxv8f16(<vscale x 8 x half> %a,
775                                                                  <vscale x 8 x i1> %pg,
776                                                                  <vscale x 8 x half> %b)
777   ret <vscale x 8 x half> %out
780 define <vscale x 4 x float> @fneg_s(<vscale x 4 x float> %a, <vscale x 4 x i1> %pg, <vscale x 4 x float> %b) {
781 ; CHECK-LABEL: fneg_s:
782 ; CHECK: fneg z0.s, p0/m, z1.s
783 ; CHECK-NEXT: ret
784   %out = call <vscale x 4 x float> @llvm.aarch64.sve.fneg.nxv4f32(<vscale x 4 x float> %a,
785                                                                   <vscale x 4 x i1> %pg,
786                                                                   <vscale x 4 x float> %b)
787   ret <vscale x 4 x float> %out
790 define <vscale x 2 x double> @fneg_d(<vscale x 2 x double> %a, <vscale x 2 x i1> %pg, <vscale x 2 x double> %b) {
791 ; CHECK-LABEL: fneg_d:
792 ; CHECK: fneg z0.d, p0/m, z1.d
793 ; CHECK-NEXT: ret
794   %out = call <vscale x 2 x double> @llvm.aarch64.sve.fneg.nxv2f64(<vscale x 2 x double> %a,
795                                                                    <vscale x 2 x i1> %pg,
796                                                                    <vscale x 2 x double> %b)
797   ret <vscale x 2 x double> %out
801 ; FNMAD
804 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) {
805 ; CHECK-LABEL: fnmad_h:
806 ; CHECK: fnmad z0.h, p0/m, z1.h, z2.h
807 ; CHECK-NEXT: ret
808   %out = call <vscale x 8 x half> @llvm.aarch64.sve.fnmad.nxv8f16(<vscale x 8 x i1> %pg,
809                                                                   <vscale x 8 x half> %a,
810                                                                   <vscale x 8 x half> %b,
811                                                                   <vscale x 8 x half> %c)
812   ret <vscale x 8 x half> %out
815 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) {
816 ; CHECK-LABEL: fnmad_s:
817 ; CHECK: fnmad z0.s, p0/m, z1.s, z2.s
818 ; CHECK-NEXT: ret
819   %out = call <vscale x 4 x float> @llvm.aarch64.sve.fnmad.nxv4f32(<vscale x 4 x i1> %pg,
820                                                                    <vscale x 4 x float> %a,
821                                                                    <vscale x 4 x float> %b,
822                                                                    <vscale x 4 x float> %c)
823   ret <vscale x 4 x float> %out
826 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) {
827 ; CHECK-LABEL: fnmad_d:
828 ; CHECK: fnmad z0.d, p0/m, z1.d, z2.d
829 ; CHECK-NEXT: ret
830   %out = call <vscale x 2 x double> @llvm.aarch64.sve.fnmad.nxv2f64(<vscale x 2 x i1> %pg,
831                                                                     <vscale x 2 x double> %a,
832                                                                     <vscale x 2 x double> %b,
833                                                                     <vscale x 2 x double> %c)
834   ret <vscale x 2 x double> %out
838 ; FNMLA
841 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) {
842 ; CHECK-LABEL: fnmla_h:
843 ; CHECK: fnmla z0.h, p0/m, z1.h, z2.h
844 ; CHECK-NEXT: ret
845   %out = call <vscale x 8 x half> @llvm.aarch64.sve.fnmla.nxv8f16(<vscale x 8 x i1> %pg,
846                                                                   <vscale x 8 x half> %a,
847                                                                   <vscale x 8 x half> %b,
848                                                                   <vscale x 8 x half> %c)
849   ret <vscale x 8 x half> %out
852 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) {
853 ; CHECK-LABEL: fnmla_s:
854 ; CHECK: fnmla z0.s, p0/m, z1.s, z2.s
855 ; CHECK-NEXT: ret
856   %out = call <vscale x 4 x float> @llvm.aarch64.sve.fnmla.nxv4f32(<vscale x 4 x i1> %pg,
857                                                                    <vscale x 4 x float> %a,
858                                                                    <vscale x 4 x float> %b,
859                                                                    <vscale x 4 x float> %c)
860   ret <vscale x 4 x float> %out
863 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) {
864 ; CHECK-LABEL: fnmla_d:
865 ; CHECK: fnmla z0.d, p0/m, z1.d, z2.d
866 ; CHECK-NEXT: ret
867   %out = call <vscale x 2 x double> @llvm.aarch64.sve.fnmla.nxv2f64(<vscale x 2 x i1> %pg,
868                                                                     <vscale x 2 x double> %a,
869                                                                     <vscale x 2 x double> %b,
870                                                                     <vscale x 2 x double> %c)
871   ret <vscale x 2 x double> %out
875 ; FNMLS
878 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) {
879 ; CHECK-LABEL: fnmls_h:
880 ; CHECK: fnmls z0.h, p0/m, z1.h, z2.h
881 ; CHECK-NEXT: ret
882   %out = call <vscale x 8 x half> @llvm.aarch64.sve.fnmls.nxv8f16(<vscale x 8 x i1> %pg,
883                                                                   <vscale x 8 x half> %a,
884                                                                   <vscale x 8 x half> %b,
885                                                                   <vscale x 8 x half> %c)
886   ret <vscale x 8 x half> %out
889 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) {
890 ; CHECK-LABEL: fnmls_s:
891 ; CHECK: fnmls z0.s, p0/m, z1.s, z2.s
892 ; CHECK-NEXT: ret
893   %out = call <vscale x 4 x float> @llvm.aarch64.sve.fnmls.nxv4f32(<vscale x 4 x i1> %pg,
894                                                                    <vscale x 4 x float> %a,
895                                                                    <vscale x 4 x float> %b,
896                                                                    <vscale x 4 x float> %c)
897   ret <vscale x 4 x float> %out
900 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) {
901 ; CHECK-LABEL: fnmls_d:
902 ; CHECK: fnmls z0.d, p0/m, z1.d, z2.d
903 ; CHECK-NEXT: ret
904   %out = call <vscale x 2 x double> @llvm.aarch64.sve.fnmls.nxv2f64(<vscale x 2 x i1> %pg,
905                                                                     <vscale x 2 x double> %a,
906                                                                     <vscale x 2 x double> %b,
907                                                                     <vscale x 2 x double> %c)
908   ret <vscale x 2 x double> %out
912 ; FNMSB
915 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) {
916 ; CHECK-LABEL: fnmsb_h:
917 ; CHECK: fnmsb z0.h, p0/m, z1.h, z2.h
918 ; CHECK-NEXT: ret
919   %out = call <vscale x 8 x half> @llvm.aarch64.sve.fnmsb.nxv8f16(<vscale x 8 x i1> %pg,
920                                                                   <vscale x 8 x half> %a,
921                                                                   <vscale x 8 x half> %b,
922                                                                   <vscale x 8 x half> %c)
923   ret <vscale x 8 x half> %out
926 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) {
927 ; CHECK-LABEL: fnmsb_s:
928 ; CHECK: fnmsb z0.s, p0/m, z1.s, z2.s
929 ; CHECK-NEXT: ret
930   %out = call <vscale x 4 x float> @llvm.aarch64.sve.fnmsb.nxv4f32(<vscale x 4 x i1> %pg,
931                                                                    <vscale x 4 x float> %a,
932                                                                    <vscale x 4 x float> %b,
933                                                                    <vscale x 4 x float> %c)
934   ret <vscale x 4 x float> %out
937 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) {
938 ; CHECK-LABEL: fnmsb_d:
939 ; CHECK: fnmsb z0.d, p0/m, z1.d, z2.d
940 ; CHECK-NEXT: ret
941   %out = call <vscale x 2 x double> @llvm.aarch64.sve.fnmsb.nxv2f64(<vscale x 2 x i1> %pg,
942                                                                     <vscale x 2 x double> %a,
943                                                                     <vscale x 2 x double> %b,
944                                                                     <vscale x 2 x double> %c)
945   ret <vscale x 2 x double> %out
949 ; FRECPE
952 define <vscale x 8 x half> @frecpe_h(<vscale x 8 x half> %a) {
953 ; CHECK-LABEL: frecpe_h:
954 ; CHECK: frecpe z0.h, z0.h
955 ; CHECK-NEXT: ret
956   %out = call <vscale x 8 x half> @llvm.aarch64.sve.frecpe.x.nxv8f16(<vscale x 8 x half> %a)
957   ret <vscale x 8 x half> %out
960 define <vscale x 4 x float> @frecpe_s(<vscale x 4 x float> %a) {
961 ; CHECK-LABEL: frecpe_s:
962 ; CHECK: frecpe z0.s, z0.s
963 ; CHECK-NEXT: ret
964   %out = call <vscale x 4 x float> @llvm.aarch64.sve.frecpe.x.nxv4f32(<vscale x 4 x float> %a)
965   ret <vscale x 4 x float> %out
968 define <vscale x 2 x double> @frecpe_d(<vscale x 2 x i1> %pg, <vscale x 2 x double> %a) {
969 ; CHECK-LABEL: frecpe_d:
970 ; CHECK: frecpe z0.d, z0.d
971 ; CHECK-NEXT: ret
972   %out = call <vscale x 2 x double> @llvm.aarch64.sve.frecpe.x.nxv2f64(<vscale x 2 x double> %a)
973   ret <vscale x 2 x double> %out
977 ; FRECPX
980 define <vscale x 8 x half> @frecpx_h(<vscale x 8 x half> %a, <vscale x 8 x i1> %pg, <vscale x 8 x half> %b) {
981 ; CHECK-LABEL: frecpx_h:
982 ; CHECK: frecpx z0.h, p0/m, z1.h
983 ; CHECK-NEXT: ret
984   %out = call <vscale x 8 x half> @llvm.aarch64.sve.frecpx.nxv8f16(<vscale x 8 x half> %a,
985                                                                   <vscale x 8 x i1> %pg,
986                                                                   <vscale x 8 x half> %b)
987   ret <vscale x 8 x half> %out
990 define <vscale x 4 x float> @frecpx_s(<vscale x 4 x float> %a, <vscale x 4 x i1> %pg, <vscale x 4 x float> %b) {
991 ; CHECK-LABEL: frecpx_s:
992 ; CHECK: frecpx z0.s, p0/m, z1.s
993 ; CHECK-NEXT: ret
994   %out = call <vscale x 4 x float> @llvm.aarch64.sve.frecpx.nxv4f32(<vscale x 4 x float> %a,
995                                                                    <vscale x 4 x i1> %pg,
996                                                                    <vscale x 4 x float> %b)
997   ret <vscale x 4 x float> %out
1000 define <vscale x 2 x double> @frecpx_d(<vscale x 2 x double> %a, <vscale x 2 x i1> %pg, <vscale x 2 x double> %b) {
1001 ; CHECK-LABEL: frecpx_d:
1002 ; CHECK: frecpx z0.d, p0/m, z1.d
1003 ; CHECK-NEXT: ret
1004   %out = call <vscale x 2 x double> @llvm.aarch64.sve.frecpx.nxv2f64(<vscale x 2 x double> %a,
1005                                                                     <vscale x 2 x i1> %pg,
1006                                                                     <vscale x 2 x double> %b)
1007   ret <vscale x 2 x double> %out
1011 ; FRINTA
1014 define <vscale x 8 x half> @frinta_h(<vscale x 8 x half> %a, <vscale x 8 x i1> %pg, <vscale x 8 x half> %b) {
1015 ; CHECK-LABEL: frinta_h:
1016 ; CHECK: frinta z0.h, p0/m, z1.h
1017 ; CHECK-NEXT: ret
1018   %out = call <vscale x 8 x half> @llvm.aarch64.sve.frinta.nxv8f16(<vscale x 8 x half> %a,
1019                                                                    <vscale x 8 x i1> %pg,
1020                                                                    <vscale x 8 x half> %b)
1021   ret <vscale x 8 x half> %out
1024 define <vscale x 4 x float> @frinta_s(<vscale x 4 x float> %a, <vscale x 4 x i1> %pg, <vscale x 4 x float> %b) {
1025 ; CHECK-LABEL: frinta_s:
1026 ; CHECK: frinta z0.s, p0/m, z1.s
1027 ; CHECK-NEXT: ret
1028   %out = call <vscale x 4 x float> @llvm.aarch64.sve.frinta.nxv4f32(<vscale x 4 x float> %a,
1029                                                                     <vscale x 4 x i1> %pg,
1030                                                                     <vscale x 4 x float> %b)
1031   ret <vscale x 4 x float> %out
1034 define <vscale x 2 x double> @frinta_d(<vscale x 2 x double> %a, <vscale x 2 x i1> %pg, <vscale x 2 x double> %b) {
1035 ; CHECK-LABEL: frinta_d:
1036 ; CHECK: frinta z0.d, p0/m, z1.d
1037 ; CHECK-NEXT: ret
1038   %out = call <vscale x 2 x double> @llvm.aarch64.sve.frinta.nxv2f64(<vscale x 2 x double> %a,
1039                                                                      <vscale x 2 x i1> %pg,
1040                                                                      <vscale x 2 x double> %b)
1041   ret <vscale x 2 x double> %out
1045 ; FRINTI
1048 define <vscale x 8 x half> @frinti_h(<vscale x 8 x half> %a, <vscale x 8 x i1> %pg, <vscale x 8 x half> %b) {
1049 ; CHECK-LABEL: frinti_h:
1050 ; CHECK: frinti z0.h, p0/m, z1.h
1051 ; CHECK-NEXT: ret
1052   %out = call <vscale x 8 x half> @llvm.aarch64.sve.frinti.nxv8f16(<vscale x 8 x half> %a,
1053                                                                    <vscale x 8 x i1> %pg,
1054                                                                    <vscale x 8 x half> %b)
1055   ret <vscale x 8 x half> %out
1058 define <vscale x 4 x float> @frinti_s(<vscale x 4 x float> %a, <vscale x 4 x i1> %pg, <vscale x 4 x float> %b) {
1059 ; CHECK-LABEL: frinti_s:
1060 ; CHECK: frinti z0.s, p0/m, z1.s
1061 ; CHECK-NEXT: ret
1062   %out = call <vscale x 4 x float> @llvm.aarch64.sve.frinti.nxv4f32(<vscale x 4 x float> %a,
1063                                                                     <vscale x 4 x i1> %pg,
1064                                                                     <vscale x 4 x float> %b)
1065   ret <vscale x 4 x float> %out
1068 define <vscale x 2 x double> @frinti_d(<vscale x 2 x double> %a, <vscale x 2 x i1> %pg, <vscale x 2 x double> %b) {
1069 ; CHECK-LABEL: frinti_d:
1070 ; CHECK: frinti z0.d, p0/m, z1.d
1071 ; CHECK-NEXT: ret
1072   %out = call <vscale x 2 x double> @llvm.aarch64.sve.frinti.nxv2f64(<vscale x 2 x double> %a,
1073                                                                      <vscale x 2 x i1> %pg,
1074                                                                      <vscale x 2 x double> %b)
1075   ret <vscale x 2 x double> %out
1079 ; FRINTM
1082 define <vscale x 8 x half> @frintm_h(<vscale x 8 x half> %a, <vscale x 8 x i1> %pg, <vscale x 8 x half> %b) {
1083 ; CHECK-LABEL: frintm_h:
1084 ; CHECK: frintm z0.h, p0/m, z1.h
1085 ; CHECK-NEXT: ret
1086   %out = call <vscale x 8 x half> @llvm.aarch64.sve.frintm.nxv8f16(<vscale x 8 x half> %a,
1087                                                                    <vscale x 8 x i1> %pg,
1088                                                                    <vscale x 8 x half> %b)
1089   ret <vscale x 8 x half> %out
1092 define <vscale x 4 x float> @frintm_s(<vscale x 4 x float> %a, <vscale x 4 x i1> %pg, <vscale x 4 x float> %b) {
1093 ; CHECK-LABEL: frintm_s:
1094 ; CHECK: frintm z0.s, p0/m, z1.s
1095 ; CHECK-NEXT: ret
1096   %out = call <vscale x 4 x float> @llvm.aarch64.sve.frintm.nxv4f32(<vscale x 4 x float> %a,
1097                                                                     <vscale x 4 x i1> %pg,
1098                                                                     <vscale x 4 x float> %b)
1099   ret <vscale x 4 x float> %out
1102 define <vscale x 2 x double> @frintm_d(<vscale x 2 x double> %a, <vscale x 2 x i1> %pg, <vscale x 2 x double> %b) {
1103 ; CHECK-LABEL: frintm_d:
1104 ; CHECK: frintm z0.d, p0/m, z1.d
1105 ; CHECK-NEXT: ret
1106   %out = call <vscale x 2 x double> @llvm.aarch64.sve.frintm.nxv2f64(<vscale x 2 x double> %a,
1107                                                                      <vscale x 2 x i1> %pg,
1108                                                                      <vscale x 2 x double> %b)
1109   ret <vscale x 2 x double> %out
1113 ; FRINTN
1116 define <vscale x 8 x half> @frintn_h(<vscale x 8 x half> %a, <vscale x 8 x i1> %pg, <vscale x 8 x half> %b) {
1117 ; CHECK-LABEL: frintn_h:
1118 ; CHECK: frintn z0.h, p0/m, z1.h
1119 ; CHECK-NEXT: ret
1120   %out = call <vscale x 8 x half> @llvm.aarch64.sve.frintn.nxv8f16(<vscale x 8 x half> %a,
1121                                                                    <vscale x 8 x i1> %pg,
1122                                                                    <vscale x 8 x half> %b)
1123   ret <vscale x 8 x half> %out
1126 define <vscale x 4 x float> @frintn_s(<vscale x 4 x float> %a, <vscale x 4 x i1> %pg, <vscale x 4 x float> %b) {
1127 ; CHECK-LABEL: frintn_s:
1128 ; CHECK: frintn z0.s, p0/m, z1.s
1129 ; CHECK-NEXT: ret
1130   %out = call <vscale x 4 x float> @llvm.aarch64.sve.frintn.nxv4f32(<vscale x 4 x float> %a,
1131                                                                     <vscale x 4 x i1> %pg,
1132                                                                     <vscale x 4 x float> %b)
1133   ret <vscale x 4 x float> %out
1136 define <vscale x 2 x double> @frintn_d(<vscale x 2 x double> %a, <vscale x 2 x i1> %pg, <vscale x 2 x double> %b) {
1137 ; CHECK-LABEL: frintn_d:
1138 ; CHECK: frintn z0.d, p0/m, z1.d
1139 ; CHECK-NEXT: ret
1140   %out = call <vscale x 2 x double> @llvm.aarch64.sve.frintn.nxv2f64(<vscale x 2 x double> %a,
1141                                                                      <vscale x 2 x i1> %pg,
1142                                                                      <vscale x 2 x double> %b)
1143   ret <vscale x 2 x double> %out
1147 ; FRINTP
1150 define <vscale x 8 x half> @frintp_h(<vscale x 8 x half> %a, <vscale x 8 x i1> %pg, <vscale x 8 x half> %b) {
1151 ; CHECK-LABEL: frintp_h:
1152 ; CHECK: frintp z0.h, p0/m, z1.h
1153 ; CHECK-NEXT: ret
1154   %out = call <vscale x 8 x half> @llvm.aarch64.sve.frintp.nxv8f16(<vscale x 8 x half> %a,
1155                                                                    <vscale x 8 x i1> %pg,
1156                                                                    <vscale x 8 x half> %b)
1157   ret <vscale x 8 x half> %out
1160 define <vscale x 4 x float> @frintp_s(<vscale x 4 x float> %a, <vscale x 4 x i1> %pg, <vscale x 4 x float> %b) {
1161 ; CHECK-LABEL: frintp_s:
1162 ; CHECK: frintp z0.s, p0/m, z1.s
1163 ; CHECK-NEXT: ret
1164   %out = call <vscale x 4 x float> @llvm.aarch64.sve.frintp.nxv4f32(<vscale x 4 x float> %a,
1165                                                                     <vscale x 4 x i1> %pg,
1166                                                                     <vscale x 4 x float> %b)
1167   ret <vscale x 4 x float> %out
1170 define <vscale x 2 x double> @frintp_d(<vscale x 2 x double> %a, <vscale x 2 x i1> %pg, <vscale x 2 x double> %b) {
1171 ; CHECK-LABEL: frintp_d:
1172 ; CHECK: frintp z0.d, p0/m, z1.d
1173 ; CHECK-NEXT: ret
1174   %out = call <vscale x 2 x double> @llvm.aarch64.sve.frintp.nxv2f64(<vscale x 2 x double> %a,
1175                                                                      <vscale x 2 x i1> %pg,
1176                                                                      <vscale x 2 x double> %b)
1177   ret <vscale x 2 x double> %out
1181 ; FRINTX
1184 define <vscale x 8 x half> @frintx_h(<vscale x 8 x half> %a, <vscale x 8 x i1> %pg, <vscale x 8 x half> %b) {
1185 ; CHECK-LABEL: frintx_h:
1186 ; CHECK: frintx z0.h, p0/m, z1.h
1187 ; CHECK-NEXT: ret
1188   %out = call <vscale x 8 x half> @llvm.aarch64.sve.frintx.nxv8f16(<vscale x 8 x half> %a,
1189                                                                    <vscale x 8 x i1> %pg,
1190                                                                    <vscale x 8 x half> %b)
1191   ret <vscale x 8 x half> %out
1194 define <vscale x 4 x float> @frintx_s(<vscale x 4 x float> %a, <vscale x 4 x i1> %pg, <vscale x 4 x float> %b) {
1195 ; CHECK-LABEL: frintx_s:
1196 ; CHECK: frintx z0.s, p0/m, z1.s
1197 ; CHECK-NEXT: ret
1198   %out = call <vscale x 4 x float> @llvm.aarch64.sve.frintx.nxv4f32(<vscale x 4 x float> %a,
1199                                                                     <vscale x 4 x i1> %pg,
1200                                                                     <vscale x 4 x float> %b)
1201   ret <vscale x 4 x float> %out
1204 define <vscale x 2 x double> @frintx_d(<vscale x 2 x double> %a, <vscale x 2 x i1> %pg, <vscale x 2 x double> %b) {
1205 ; CHECK-LABEL: frintx_d:
1206 ; CHECK: frintx z0.d, p0/m, z1.d
1207 ; CHECK-NEXT: ret
1208   %out = call <vscale x 2 x double> @llvm.aarch64.sve.frintx.nxv2f64(<vscale x 2 x double> %a,
1209                                                                      <vscale x 2 x i1> %pg,
1210                                                                      <vscale x 2 x double> %b)
1211   ret <vscale x 2 x double> %out
1215 ; FRINTZ
1218 define <vscale x 8 x half> @frintz_h(<vscale x 8 x half> %a, <vscale x 8 x i1> %pg, <vscale x 8 x half> %b) {
1219 ; CHECK-LABEL: frintz_h:
1220 ; CHECK: frintz z0.h, p0/m, z1.h
1221 ; CHECK-NEXT: ret
1222   %out = call <vscale x 8 x half> @llvm.aarch64.sve.frintz.nxv8f16(<vscale x 8 x half> %a,
1223                                                                    <vscale x 8 x i1> %pg,
1224                                                                    <vscale x 8 x half> %b)
1225   ret <vscale x 8 x half> %out
1228 define <vscale x 4 x float> @frintz_s(<vscale x 4 x float> %a, <vscale x 4 x i1> %pg, <vscale x 4 x float> %b) {
1229 ; CHECK-LABEL: frintz_s:
1230 ; CHECK: frintz z0.s, p0/m, z1.s
1231 ; CHECK-NEXT: ret
1232   %out = call <vscale x 4 x float> @llvm.aarch64.sve.frintz.nxv4f32(<vscale x 4 x float> %a,
1233                                                                     <vscale x 4 x i1> %pg,
1234                                                                     <vscale x 4 x float> %b)
1235   ret <vscale x 4 x float> %out
1238 define <vscale x 2 x double> @frintz_d(<vscale x 2 x double> %a, <vscale x 2 x i1> %pg, <vscale x 2 x double> %b) {
1239 ; CHECK-LABEL: frintz_d:
1240 ; CHECK: frintz z0.d, p0/m, z1.d
1241 ; CHECK-NEXT: ret
1242   %out = call <vscale x 2 x double> @llvm.aarch64.sve.frintz.nxv2f64(<vscale x 2 x double> %a,
1243                                                                      <vscale x 2 x i1> %pg,
1244                                                                      <vscale x 2 x double> %b)
1245   ret <vscale x 2 x double> %out
1249 ; FRSQRTE
1252 define <vscale x 8 x half> @frsqrte_h(<vscale x 8 x half> %a) {
1253 ; CHECK-LABEL: frsqrte_h:
1254 ; CHECK: frsqrte z0.h, z0.h
1255 ; CHECK-NEXT: ret
1256   %out = call <vscale x 8 x half> @llvm.aarch64.sve.frsqrte.x.nxv8f16(<vscale x 8 x half> %a)
1257   ret <vscale x 8 x half> %out
1260 define <vscale x 4 x float> @frsqrte_s(<vscale x 4 x float> %a) {
1261 ; CHECK-LABEL: frsqrte_s:
1262 ; CHECK: frsqrte z0.s, z0.s
1263 ; CHECK-NEXT: ret
1264   %out = call <vscale x 4 x float> @llvm.aarch64.sve.frsqrte.x.nxv4f32(<vscale x 4 x float> %a)
1265   ret <vscale x 4 x float> %out
1268 define <vscale x 2 x double> @frsqrte_d(<vscale x 2 x i1> %pg, <vscale x 2 x double> %a) {
1269 ; CHECK-LABEL: frsqrte_d:
1270 ; CHECK: frsqrte z0.d, z0.d
1271 ; CHECK-NEXT: ret
1272   %out = call <vscale x 2 x double> @llvm.aarch64.sve.frsqrte.x.nxv2f64(<vscale x 2 x double> %a)
1273   ret <vscale x 2 x double> %out
1277 ; FSCALE
1280 define <vscale x 8 x half> @fscale_h(<vscale x 8 x i1> %pg, <vscale x 8 x half> %a, <vscale x 8 x i16> %b) {
1281 ; CHECK-LABEL: fscale_h:
1282 ; CHECK: fscale z0.h, p0/m, z0.h, z1.h
1283 ; CHECK-NEXT: ret
1284   %out = call <vscale x 8 x half> @llvm.aarch64.sve.fscale.nxv8f16(<vscale x 8 x i1> %pg,
1285                                                                    <vscale x 8 x half> %a,
1286                                                                    <vscale x 8 x i16> %b)
1287   ret <vscale x 8 x half> %out
1290 define <vscale x 4 x float> @fscale_s(<vscale x 4 x i1> %pg, <vscale x 4 x float> %a, <vscale x 4 x i32> %b) {
1291 ; CHECK-LABEL: fscale_s:
1292 ; CHECK: fscale z0.s, p0/m, z0.s, z1.s
1293 ; CHECK-NEXT: ret
1294   %out = call <vscale x 4 x float> @llvm.aarch64.sve.fscale.nxv4f32(<vscale x 4 x i1> %pg,
1295                                                                     <vscale x 4 x float> %a,
1296                                                                     <vscale x 4 x i32> %b)
1297   ret <vscale x 4 x float> %out
1300 define <vscale x 2 x double> @fscale_d(<vscale x 2 x i1> %pg, <vscale x 2 x double> %a, <vscale x 2 x i64> %b) {
1301 ; CHECK-LABEL: fscale_d:
1302 ; CHECK: fscale z0.d, p0/m, z0.d, z1.d
1303 ; CHECK-NEXT: ret
1304   %out = call <vscale x 2 x double> @llvm.aarch64.sve.fscale.nxv2f64(<vscale x 2 x i1> %pg,
1305                                                                      <vscale x 2 x double> %a,
1306                                                                      <vscale x 2 x i64> %b)
1307   ret <vscale x 2 x double> %out
1311 ; FSQRT
1314 define <vscale x 8 x half> @fsqrt_h(<vscale x 8 x half> %a, <vscale x 8 x i1> %pg, <vscale x 8 x half> %b) {
1315 ; CHECK-LABEL: fsqrt_h:
1316 ; CHECK: fsqrt z0.h, p0/m, z1.h
1317 ; CHECK-NEXT: ret
1318   %out = call <vscale x 8 x half> @llvm.aarch64.sve.fsqrt.nxv8f16(<vscale x 8 x half> %a,
1319                                                                   <vscale x 8 x i1> %pg,
1320                                                                   <vscale x 8 x half> %b)
1321   ret <vscale x 8 x half> %out
1324 define <vscale x 4 x float> @fsqrt_s(<vscale x 4 x float> %a, <vscale x 4 x i1> %pg, <vscale x 4 x float> %b) {
1325 ; CHECK-LABEL: fsqrt_s:
1326 ; CHECK: fsqrt z0.s, p0/m, z1.s
1327 ; CHECK-NEXT: ret
1328   %out = call <vscale x 4 x float> @llvm.aarch64.sve.fsqrt.nxv4f32(<vscale x 4 x float> %a,
1329                                                                    <vscale x 4 x i1> %pg,
1330                                                                    <vscale x 4 x float> %b)
1331   ret <vscale x 4 x float> %out
1334 define <vscale x 2 x double> @fsqrt_d(<vscale x 2 x double> %a, <vscale x 2 x i1> %pg, <vscale x 2 x double> %b) {
1335 ; CHECK-LABEL: fsqrt_d:
1336 ; CHECK: fsqrt z0.d, p0/m, z1.d
1337 ; CHECK-NEXT: ret
1338   %out = call <vscale x 2 x double> @llvm.aarch64.sve.fsqrt.nxv2f64(<vscale x 2 x double> %a,
1339                                                                     <vscale x 2 x i1> %pg,
1340                                                                     <vscale x 2 x double> %b)
1341   ret <vscale x 2 x double> %out
1345 ; FSUB
1348 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) {
1349 ; CHECK-LABEL: fsub_h:
1350 ; CHECK: fsub z0.h, p0/m, z0.h, z1.h
1351 ; CHECK-NEXT: ret
1352   %out = call <vscale x 8 x half> @llvm.aarch64.sve.fsub.nxv8f16(<vscale x 8 x i1> %pg,
1353                                                                  <vscale x 8 x half> %a,
1354                                                                  <vscale x 8 x half> %b)
1355   ret <vscale x 8 x half> %out
1358 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) {
1359 ; CHECK-LABEL: fsub_s:
1360 ; CHECK: fsub z0.s, p0/m, z0.s, z1.s
1361 ; CHECK-NEXT: ret
1362   %out = call <vscale x 4 x float> @llvm.aarch64.sve.fsub.nxv4f32(<vscale x 4 x i1> %pg,
1363                                                                   <vscale x 4 x float> %a,
1364                                                                   <vscale x 4 x float> %b)
1365   ret <vscale x 4 x float> %out
1368 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) {
1369 ; CHECK-LABEL: fsub_d:
1370 ; CHECK: fsub z0.d, p0/m, z0.d, z1.d
1371 ; CHECK-NEXT: ret
1372   %out = call <vscale x 2 x double> @llvm.aarch64.sve.fsub.nxv2f64(<vscale x 2 x i1> %pg,
1373                                                                    <vscale x 2 x double> %a,
1374                                                                    <vscale x 2 x double> %b)
1375   ret <vscale x 2 x double> %out
1379 ; FSUBR
1382 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) {
1383 ; CHECK-LABEL: fsubr_h:
1384 ; CHECK: fsubr z0.h, p0/m, z0.h, z1.h
1385 ; CHECK-NEXT: ret
1386   %out = call <vscale x 8 x half> @llvm.aarch64.sve.fsubr.nxv8f16(<vscale x 8 x i1> %pg,
1387                                                                   <vscale x 8 x half> %a,
1388                                                                   <vscale x 8 x half> %b)
1389   ret <vscale x 8 x half> %out
1392 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) {
1393 ; CHECK-LABEL: fsubr_s:
1394 ; CHECK: fsubr z0.s, p0/m, z0.s, z1.s
1395 ; CHECK-NEXT: ret
1396   %out = call <vscale x 4 x float> @llvm.aarch64.sve.fsubr.nxv4f32(<vscale x 4 x i1> %pg,
1397                                                                    <vscale x 4 x float> %a,
1398                                                                    <vscale x 4 x float> %b)
1399   ret <vscale x 4 x float> %out
1402 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) {
1403 ; CHECK-LABEL: fsubr_d:
1404 ; CHECK: fsubr z0.d, p0/m, z0.d, z1.d
1405 ; CHECK-NEXT: ret
1406   %out = call <vscale x 2 x double> @llvm.aarch64.sve.fsubr.nxv2f64(<vscale x 2 x i1> %pg,
1407                                                                     <vscale x 2 x double> %a,
1408                                                                     <vscale x 2 x double> %b)
1409   ret <vscale x 2 x double> %out
1413 ; FTMAD
1416 define <vscale x 8 x half> @ftmad_h(<vscale x 8 x half> %a, <vscale x 8 x half> %b) {
1417 ; CHECK-LABEL: ftmad_h:
1418 ; CHECK: ftmad z0.h, z0.h, z1.h, #0
1419 ; CHECK-NEXT: ret
1420   %out = call <vscale x 8 x half> @llvm.aarch64.sve.ftmad.x.nxv8f16(<vscale x 8 x half> %a,
1421                                                                     <vscale x 8 x half> %b,
1422                                                                     i32 0)
1423   ret <vscale x 8 x half> %out
1426 define <vscale x 4 x float> @ftmad_s(<vscale x 4 x float> %a, <vscale x 4 x float> %b) {
1427 ; CHECK-LABEL: ftmad_s:
1428 ; CHECK: ftmad z0.s, z0.s, z1.s, #0
1429 ; CHECK-NEXT: ret
1430   %out = call <vscale x 4 x float> @llvm.aarch64.sve.ftmad.x.nxv4f32(<vscale x 4 x float> %a,
1431                                                                      <vscale x 4 x float> %b,
1432                                                                      i32 0)
1433   ret <vscale x 4 x float> %out
1436 define <vscale x 2 x double> @ftmad_d(<vscale x 2 x double> %a, <vscale x 2 x double> %b) {
1437 ; CHECK-LABEL: ftmad_d:
1438 ; CHECK: ftmad z0.d, z0.d, z1.d, #7
1439 ; CHECK-NEXT: ret
1440   %out = call <vscale x 2 x double> @llvm.aarch64.sve.ftmad.x.nxv2f64(<vscale x 2 x double> %a,
1441                                                                       <vscale x 2 x double> %b,
1442                                                                       i32 7)
1443   ret <vscale x 2 x double> %out
1447 ; FTSMUL
1450 define <vscale x 8 x half> @ftsmul_h(<vscale x 8 x half> %a, <vscale x 8 x i16> %b) {
1451 ; CHECK-LABEL: ftsmul_h:
1452 ; CHECK: ftsmul z0.h, z0.h, z1.h
1453 ; CHECK-NEXT: ret
1454   %out = call <vscale x 8 x half> @llvm.aarch64.sve.ftsmul.x.nxv8f16(<vscale x 8 x half> %a,
1455                                                                      <vscale x 8 x i16> %b)
1456   ret <vscale x 8 x half> %out
1459 define <vscale x 4 x float> @ftsmul_s(<vscale x 4 x float> %a, <vscale x 4 x i32> %b) {
1460 ; CHECK-LABEL: ftsmul_s:
1461 ; CHECK: ftsmul z0.s, z0.s, z1.s
1462 ; CHECK-NEXT: ret
1463   %out = call <vscale x 4 x float> @llvm.aarch64.sve.ftsmul.x.nxv4f32(<vscale x 4 x float> %a,
1464                                                                       <vscale x 4 x i32> %b)
1465   ret <vscale x 4 x float> %out
1468 define <vscale x 2 x double> @ftsmul_d(<vscale x 2 x double> %a, <vscale x 2 x i64> %b) {
1469 ; CHECK-LABEL: ftsmul_d:
1470 ; CHECK: ftsmul z0.d, z0.d, z1.d
1471 ; CHECK-NEXT: ret
1472   %out = call <vscale x 2 x double> @llvm.aarch64.sve.ftsmul.x.nxv2f64(<vscale x 2 x double> %a,
1473                                                                        <vscale x 2 x i64> %b)
1474   ret <vscale x 2 x double> %out
1478 ; FTSSEL
1481 define <vscale x 8 x half> @ftssel_h(<vscale x 8 x half> %a, <vscale x 8 x i16> %b) {
1482 ; CHECK-LABEL: ftssel_h:
1483 ; CHECK: ftssel z0.h, z0.h, z1.h
1484 ; CHECK-NEXT: ret
1485   %out = call <vscale x 8 x half> @llvm.aarch64.sve.ftssel.x.nxv8f16(<vscale x 8 x half> %a,
1486                                                                      <vscale x 8 x i16> %b)
1487   ret <vscale x 8 x half> %out
1490 define <vscale x 4 x float> @ftssel_s(<vscale x 4 x float> %a, <vscale x 4 x i32> %b) {
1491 ; CHECK-LABEL: ftssel_s:
1492 ; CHECK: ftssel z0.s, z0.s, z1.s
1493 ; CHECK-NEXT: ret
1494   %out = call <vscale x 4 x float> @llvm.aarch64.sve.ftssel.x.nxv4f32(<vscale x 4 x float> %a,
1495                                                                       <vscale x 4 x i32> %b)
1496   ret <vscale x 4 x float> %out
1499 define <vscale x 2 x double> @ftssel_d(<vscale x 2 x double> %a, <vscale x 2 x i64> %b) {
1500 ; CHECK-LABEL: ftssel_d:
1501 ; CHECK: ftssel z0.d, z0.d, z1.d
1502 ; CHECK-NEXT: ret
1503   %out = call <vscale x 2 x double> @llvm.aarch64.sve.ftssel.x.nxv2f64(<vscale x 2 x double> %a,
1504                                                                        <vscale x 2 x i64> %b)
1505   ret <vscale x 2 x double> %out
1508 declare <vscale x 8 x half> @llvm.aarch64.sve.fabd.nxv8f16(<vscale x 8 x i1>, <vscale x 8 x half>, <vscale x 8 x half>)
1509 declare <vscale x 4 x float> @llvm.aarch64.sve.fabd.nxv4f32(<vscale x 4 x i1>, <vscale x 4 x float>, <vscale x 4 x float>)
1510 declare <vscale x 2 x double> @llvm.aarch64.sve.fabd.nxv2f64(<vscale x 2 x i1>, <vscale x 2 x double>, <vscale x 2 x double>)
1512 declare <vscale x 8 x half> @llvm.aarch64.sve.fabs.nxv8f16(<vscale x 8 x half>, <vscale x 8 x i1>, <vscale x 8 x half>)
1513 declare <vscale x 4 x float> @llvm.aarch64.sve.fabs.nxv4f32(<vscale x 4 x float>, <vscale x 4 x i1>, <vscale x 4 x float>)
1514 declare <vscale x 2 x double> @llvm.aarch64.sve.fabs.nxv2f64(<vscale x 2 x double>, <vscale x 2 x i1>, <vscale x 2 x double>)
1516 declare <vscale x 8 x half> @llvm.aarch64.sve.fadd.nxv8f16(<vscale x 8 x i1>, <vscale x 8 x half>, <vscale x 8 x half>)
1517 declare <vscale x 4 x float> @llvm.aarch64.sve.fadd.nxv4f32(<vscale x 4 x i1>, <vscale x 4 x float>, <vscale x 4 x float>)
1518 declare <vscale x 2 x double> @llvm.aarch64.sve.fadd.nxv2f64(<vscale x 2 x i1>, <vscale x 2 x double>, <vscale x 2 x double>)
1520 declare <vscale x 8 x half> @llvm.aarch64.sve.fcadd.nxv8f16(<vscale x 8 x i1>, <vscale x 8 x half>, <vscale x 8 x half>, i32)
1521 declare <vscale x 4 x float> @llvm.aarch64.sve.fcadd.nxv4f32(<vscale x 4 x i1>, <vscale x 4 x float>, <vscale x 4 x float>, i32)
1522 declare <vscale x 2 x double> @llvm.aarch64.sve.fcadd.nxv2f64(<vscale x 2 x i1>, <vscale x 2 x double>, <vscale x 2 x double>, i32)
1524 declare <vscale x 8 x half> @llvm.aarch64.sve.fcmla.nxv8f16(<vscale x 8 x i1>, <vscale x 8 x half>, <vscale x 8 x half>, <vscale x 8 x half>, i32)
1525 declare <vscale x 4 x float> @llvm.aarch64.sve.fcmla.nxv4f32(<vscale x 4 x i1>, <vscale x 4 x float>, <vscale x 4 x float>, <vscale x 4 x float>, i32)
1526 declare <vscale x 2 x double> @llvm.aarch64.sve.fcmla.nxv2f64(<vscale x 2 x i1>, <vscale x 2 x double>, <vscale x 2 x double>, <vscale x 2 x double>, i32)
1528 declare <vscale x 8 x half> @llvm.aarch64.sve.fcmla.lane.nxv8f16(<vscale x 8 x half>, <vscale x 8 x half>, <vscale x 8 x half>, i32, i32)
1529 declare <vscale x 4 x float> @llvm.aarch64.sve.fcmla.lane.nxv4f32(<vscale x 4 x float>, <vscale x 4 x float>, <vscale x 4 x float>, i32, i32)
1531 declare <vscale x 8 x half> @llvm.aarch64.sve.fdiv.nxv8f16(<vscale x 8 x i1>, <vscale x 8 x half>, <vscale x 8 x half>)
1532 declare <vscale x 4 x float> @llvm.aarch64.sve.fdiv.nxv4f32(<vscale x 4 x i1>, <vscale x 4 x float>, <vscale x 4 x float>)
1533 declare <vscale x 2 x double> @llvm.aarch64.sve.fdiv.nxv2f64(<vscale x 2 x i1>, <vscale x 2 x double>, <vscale x 2 x double>)
1535 declare <vscale x 8 x half> @llvm.aarch64.sve.fdivr.nxv8f16(<vscale x 8 x i1>, <vscale x 8 x half>, <vscale x 8 x half>)
1536 declare <vscale x 4 x float> @llvm.aarch64.sve.fdivr.nxv4f32(<vscale x 4 x i1>, <vscale x 4 x float>, <vscale x 4 x float>)
1537 declare <vscale x 2 x double> @llvm.aarch64.sve.fdivr.nxv2f64(<vscale x 2 x i1>, <vscale x 2 x double>, <vscale x 2 x double>)
1539 declare <vscale x 8 x half> @llvm.aarch64.sve.fexpa.x.nxv8f16(<vscale x 8 x i16>)
1540 declare <vscale x 4 x float> @llvm.aarch64.sve.fexpa.x.nxv4f32(<vscale x 4 x i32>)
1541 declare <vscale x 2 x double> @llvm.aarch64.sve.fexpa.x.nxv2f64(<vscale x 2 x i64>)
1543 declare <vscale x 8 x half> @llvm.aarch64.sve.fmad.nxv8f16(<vscale x 8 x i1>, <vscale x 8 x half>, <vscale x 8 x half>, <vscale x 8 x half>)
1544 declare <vscale x 4 x float> @llvm.aarch64.sve.fmad.nxv4f32(<vscale x 4 x i1>, <vscale x 4 x float>, <vscale x 4 x float>, <vscale x 4 x float>)
1545 declare <vscale x 2 x double> @llvm.aarch64.sve.fmad.nxv2f64(<vscale x 2 x i1>, <vscale x 2 x double>, <vscale x 2 x double>, <vscale x 2 x double>)
1547 declare <vscale x 8 x half> @llvm.aarch64.sve.fmax.nxv8f16(<vscale x 8 x i1>, <vscale x 8 x half>, <vscale x 8 x half>)
1548 declare <vscale x 4 x float> @llvm.aarch64.sve.fmax.nxv4f32(<vscale x 4 x i1>, <vscale x 4 x float>, <vscale x 4 x float>)
1549 declare <vscale x 2 x double> @llvm.aarch64.sve.fmax.nxv2f64(<vscale x 2 x i1>, <vscale x 2 x double>, <vscale x 2 x double>)
1551 declare <vscale x 8 x half> @llvm.aarch64.sve.fmaxnm.nxv8f16(<vscale x 8 x i1>, <vscale x 8 x half>, <vscale x 8 x half>)
1552 declare <vscale x 4 x float> @llvm.aarch64.sve.fmaxnm.nxv4f32(<vscale x 4 x i1>, <vscale x 4 x float>, <vscale x 4 x float>)
1553 declare <vscale x 2 x double> @llvm.aarch64.sve.fmaxnm.nxv2f64(<vscale x 2 x i1>, <vscale x 2 x double>, <vscale x 2 x double>)
1555 declare <vscale x 8 x half> @llvm.aarch64.sve.fmin.nxv8f16(<vscale x 8 x i1>, <vscale x 8 x half>, <vscale x 8 x half>)
1556 declare <vscale x 4 x float> @llvm.aarch64.sve.fmin.nxv4f32(<vscale x 4 x i1>, <vscale x 4 x float>, <vscale x 4 x float>)
1557 declare <vscale x 2 x double> @llvm.aarch64.sve.fmin.nxv2f64(<vscale x 2 x i1>, <vscale x 2 x double>, <vscale x 2 x double>)
1559 declare <vscale x 8 x half> @llvm.aarch64.sve.fminnm.nxv8f16(<vscale x 8 x i1>, <vscale x 8 x half>, <vscale x 8 x half>)
1560 declare <vscale x 4 x float> @llvm.aarch64.sve.fminnm.nxv4f32(<vscale x 4 x i1>, <vscale x 4 x float>, <vscale x 4 x float>)
1561 declare <vscale x 2 x double> @llvm.aarch64.sve.fminnm.nxv2f64(<vscale x 2 x i1>, <vscale x 2 x double>, <vscale x 2 x double>)
1563 declare <vscale x 8 x half> @llvm.aarch64.sve.fmla.nxv8f16(<vscale x 8 x i1>, <vscale x 8 x half>, <vscale x 8 x half>, <vscale x 8 x half>)
1564 declare <vscale x 4 x float> @llvm.aarch64.sve.fmla.nxv4f32(<vscale x 4 x i1>, <vscale x 4 x float>, <vscale x 4 x float>, <vscale x 4 x float>)
1565 declare <vscale x 2 x double> @llvm.aarch64.sve.fmla.nxv2f64(<vscale x 2 x i1>, <vscale x 2 x double>, <vscale x 2 x double>, <vscale x 2 x double>)
1567 declare <vscale x 8 x half> @llvm.aarch64.sve.fmla.lane.nxv8f16(<vscale x 8 x half>, <vscale x 8 x half>, <vscale x 8 x half>, i32)
1568 declare <vscale x 4 x float> @llvm.aarch64.sve.fmla.lane.nxv4f32(<vscale x 4 x float>, <vscale x 4 x float>, <vscale x 4 x float>, i32)
1569 declare <vscale x 2 x double> @llvm.aarch64.sve.fmla.lane.nxv2f64(<vscale x 2 x double>, <vscale x 2 x double>, <vscale x 2 x double>, i32)
1571 declare <vscale x 8 x half> @llvm.aarch64.sve.fmls.nxv8f16(<vscale x 8 x i1>, <vscale x 8 x half>, <vscale x 8 x half>, <vscale x 8 x half>)
1572 declare <vscale x 4 x float> @llvm.aarch64.sve.fmls.nxv4f32(<vscale x 4 x i1>, <vscale x 4 x float>, <vscale x 4 x float>, <vscale x 4 x float>)
1573 declare <vscale x 2 x double> @llvm.aarch64.sve.fmls.nxv2f64(<vscale x 2 x i1>, <vscale x 2 x double>, <vscale x 2 x double>, <vscale x 2 x double>)
1575 declare <vscale x 8 x half> @llvm.aarch64.sve.fmls.lane.nxv8f16(<vscale x 8 x half>, <vscale x 8 x half>, <vscale x 8 x half>, i32)
1576 declare <vscale x 4 x float> @llvm.aarch64.sve.fmls.lane.nxv4f32(<vscale x 4 x float>, <vscale x 4 x float>, <vscale x 4 x float>, i32)
1577 declare <vscale x 2 x double> @llvm.aarch64.sve.fmls.lane.nxv2f64(<vscale x 2 x double>, <vscale x 2 x double>, <vscale x 2 x double>, i32)
1579 declare <vscale x 8 x half> @llvm.aarch64.sve.fmsb.nxv8f16(<vscale x 8 x i1>, <vscale x 8 x half>, <vscale x 8 x half>, <vscale x 8 x half>)
1580 declare <vscale x 4 x float> @llvm.aarch64.sve.fmsb.nxv4f32(<vscale x 4 x i1>, <vscale x 4 x float>, <vscale x 4 x float>, <vscale x 4 x float>)
1581 declare <vscale x 2 x double> @llvm.aarch64.sve.fmsb.nxv2f64(<vscale x 2 x i1>, <vscale x 2 x double>, <vscale x 2 x double>, <vscale x 2 x double>)
1583 declare <vscale x 8 x half> @llvm.aarch64.sve.fmul.nxv8f16(<vscale x 8 x i1>, <vscale x 8 x half>, <vscale x 8 x half>)
1584 declare <vscale x 4 x float> @llvm.aarch64.sve.fmul.nxv4f32(<vscale x 4 x i1>, <vscale x 4 x float>, <vscale x 4 x float>)
1585 declare <vscale x 2 x double> @llvm.aarch64.sve.fmul.nxv2f64(<vscale x 2 x i1>, <vscale x 2 x double>, <vscale x 2 x double>)
1587 declare <vscale x 8 x half> @llvm.aarch64.sve.fmul.lane.nxv8f16(<vscale x 8 x half>, <vscale x 8 x half>, i32)
1588 declare <vscale x 4 x float> @llvm.aarch64.sve.fmul.lane.nxv4f32(<vscale x 4 x float>, <vscale x 4 x float>, i32)
1589 declare <vscale x 2 x double> @llvm.aarch64.sve.fmul.lane.nxv2f64(<vscale x 2 x double>, <vscale x 2 x double>, i32)
1591 declare <vscale x 8 x half> @llvm.aarch64.sve.fmulx.nxv8f16(<vscale x 8 x i1>, <vscale x 8 x half>, <vscale x 8 x half>)
1592 declare <vscale x 4 x float> @llvm.aarch64.sve.fmulx.nxv4f32(<vscale x 4 x i1>, <vscale x 4 x float>, <vscale x 4 x float>)
1593 declare <vscale x 2 x double> @llvm.aarch64.sve.fmulx.nxv2f64(<vscale x 2 x i1>, <vscale x 2 x double>, <vscale x 2 x double>)
1595 declare <vscale x 8 x half> @llvm.aarch64.sve.fneg.nxv8f16(<vscale x 8 x half>, <vscale x 8 x i1>, <vscale x 8 x half>)
1596 declare <vscale x 4 x float> @llvm.aarch64.sve.fneg.nxv4f32(<vscale x 4 x float>, <vscale x 4 x i1>, <vscale x 4 x float>)
1597 declare <vscale x 2 x double> @llvm.aarch64.sve.fneg.nxv2f64(<vscale x 2 x double>, <vscale x 2 x i1>, <vscale x 2 x double>)
1599 declare <vscale x 8 x half> @llvm.aarch64.sve.fnmad.nxv8f16(<vscale x 8 x i1>, <vscale x 8 x half>, <vscale x 8 x half>, <vscale x 8 x half>)
1600 declare <vscale x 4 x float> @llvm.aarch64.sve.fnmad.nxv4f32(<vscale x 4 x i1>, <vscale x 4 x float>, <vscale x 4 x float>, <vscale x 4 x float>)
1601 declare <vscale x 2 x double> @llvm.aarch64.sve.fnmad.nxv2f64(<vscale x 2 x i1>, <vscale x 2 x double>, <vscale x 2 x double>, <vscale x 2 x double>)
1603 declare <vscale x 8 x half> @llvm.aarch64.sve.fnmla.nxv8f16(<vscale x 8 x i1>, <vscale x 8 x half>, <vscale x 8 x half>, <vscale x 8 x half>)
1604 declare <vscale x 4 x float> @llvm.aarch64.sve.fnmla.nxv4f32(<vscale x 4 x i1>, <vscale x 4 x float>, <vscale x 4 x float>, <vscale x 4 x float>)
1605 declare <vscale x 2 x double> @llvm.aarch64.sve.fnmla.nxv2f64(<vscale x 2 x i1>, <vscale x 2 x double>, <vscale x 2 x double>, <vscale x 2 x double>)
1607 declare <vscale x 8 x half> @llvm.aarch64.sve.fnmls.nxv8f16(<vscale x 8 x i1>, <vscale x 8 x half>, <vscale x 8 x half>, <vscale x 8 x half>)
1608 declare <vscale x 4 x float> @llvm.aarch64.sve.fnmls.nxv4f32(<vscale x 4 x i1>, <vscale x 4 x float>, <vscale x 4 x float>, <vscale x 4 x float>)
1609 declare <vscale x 2 x double> @llvm.aarch64.sve.fnmls.nxv2f64(<vscale x 2 x i1>, <vscale x 2 x double>, <vscale x 2 x double>, <vscale x 2 x double>)
1611 declare <vscale x 8 x half> @llvm.aarch64.sve.fnmsb.nxv8f16(<vscale x 8 x i1>, <vscale x 8 x half>, <vscale x 8 x half>, <vscale x 8 x half>)
1612 declare <vscale x 4 x float> @llvm.aarch64.sve.fnmsb.nxv4f32(<vscale x 4 x i1>, <vscale x 4 x float>, <vscale x 4 x float>, <vscale x 4 x float>)
1613 declare <vscale x 2 x double> @llvm.aarch64.sve.fnmsb.nxv2f64(<vscale x 2 x i1>, <vscale x 2 x double>, <vscale x 2 x double>, <vscale x 2 x double>)
1615 declare <vscale x 8 x half> @llvm.aarch64.sve.frecpe.x.nxv8f16(<vscale x 8 x half>)
1616 declare <vscale x 4 x float> @llvm.aarch64.sve.frecpe.x.nxv4f32(<vscale x 4 x float>)
1617 declare <vscale x 2 x double> @llvm.aarch64.sve.frecpe.x.nxv2f64(<vscale x 2 x double>)
1619 declare <vscale x 8 x half> @llvm.aarch64.sve.frecpx.nxv8f16(<vscale x 8 x half>, <vscale x 8 x i1>, <vscale x 8 x half>)
1620 declare <vscale x 4 x float> @llvm.aarch64.sve.frecpx.nxv4f32(<vscale x 4 x float>, <vscale x 4 x i1>, <vscale x 4 x float>)
1621 declare <vscale x 2 x double> @llvm.aarch64.sve.frecpx.nxv2f64(<vscale x 2 x double>, <vscale x 2 x i1>, <vscale x 2 x double>)
1623 declare <vscale x 8 x half> @llvm.aarch64.sve.frinta.nxv8f16(<vscale x 8 x half>, <vscale x 8 x i1>, <vscale x 8 x half>)
1624 declare <vscale x 4 x float> @llvm.aarch64.sve.frinta.nxv4f32(<vscale x 4 x float>, <vscale x 4 x i1>, <vscale x 4 x float>)
1625 declare <vscale x 2 x double> @llvm.aarch64.sve.frinta.nxv2f64(<vscale x 2 x double>, <vscale x 2 x i1>, <vscale x 2 x double>)
1627 declare <vscale x 8 x half> @llvm.aarch64.sve.frinti.nxv8f16(<vscale x 8 x half>, <vscale x 8 x i1>, <vscale x 8 x half>)
1628 declare <vscale x 4 x float> @llvm.aarch64.sve.frinti.nxv4f32(<vscale x 4 x float>, <vscale x 4 x i1>, <vscale x 4 x float>)
1629 declare <vscale x 2 x double> @llvm.aarch64.sve.frinti.nxv2f64(<vscale x 2 x double>, <vscale x 2 x i1>, <vscale x 2 x double>)
1631 declare <vscale x 8 x half> @llvm.aarch64.sve.frintm.nxv8f16(<vscale x 8 x half>, <vscale x 8 x i1>, <vscale x 8 x half>)
1632 declare <vscale x 4 x float> @llvm.aarch64.sve.frintm.nxv4f32(<vscale x 4 x float>, <vscale x 4 x i1>, <vscale x 4 x float>)
1633 declare <vscale x 2 x double> @llvm.aarch64.sve.frintm.nxv2f64(<vscale x 2 x double>, <vscale x 2 x i1>, <vscale x 2 x double>)
1635 declare <vscale x 8 x half> @llvm.aarch64.sve.frintn.nxv8f16(<vscale x 8 x half>, <vscale x 8 x i1>, <vscale x 8 x half>)
1636 declare <vscale x 4 x float> @llvm.aarch64.sve.frintn.nxv4f32(<vscale x 4 x float>, <vscale x 4 x i1>, <vscale x 4 x float>)
1637 declare <vscale x 2 x double> @llvm.aarch64.sve.frintn.nxv2f64(<vscale x 2 x double>, <vscale x 2 x i1>, <vscale x 2 x double>)
1639 declare <vscale x 8 x half> @llvm.aarch64.sve.frintp.nxv8f16(<vscale x 8 x half>, <vscale x 8 x i1>, <vscale x 8 x half>)
1640 declare <vscale x 4 x float> @llvm.aarch64.sve.frintp.nxv4f32(<vscale x 4 x float>, <vscale x 4 x i1>, <vscale x 4 x float>)
1641 declare <vscale x 2 x double> @llvm.aarch64.sve.frintp.nxv2f64(<vscale x 2 x double>, <vscale x 2 x i1>, <vscale x 2 x double>)
1643 declare <vscale x 8 x half> @llvm.aarch64.sve.frintx.nxv8f16(<vscale x 8 x half>, <vscale x 8 x i1>, <vscale x 8 x half>)
1644 declare <vscale x 4 x float> @llvm.aarch64.sve.frintx.nxv4f32(<vscale x 4 x float>, <vscale x 4 x i1>, <vscale x 4 x float>)
1645 declare <vscale x 2 x double> @llvm.aarch64.sve.frintx.nxv2f64(<vscale x 2 x double>, <vscale x 2 x i1>, <vscale x 2 x double>)
1647 declare <vscale x 8 x half> @llvm.aarch64.sve.frintz.nxv8f16(<vscale x 8 x half>, <vscale x 8 x i1>, <vscale x 8 x half>)
1648 declare <vscale x 4 x float> @llvm.aarch64.sve.frintz.nxv4f32(<vscale x 4 x float>, <vscale x 4 x i1>, <vscale x 4 x float>)
1649 declare <vscale x 2 x double> @llvm.aarch64.sve.frintz.nxv2f64(<vscale x 2 x double>, <vscale x 2 x i1>, <vscale x 2 x double>)
1651 declare <vscale x 8 x half> @llvm.aarch64.sve.frsqrte.x.nxv8f16(<vscale x 8 x half>)
1652 declare <vscale x 4 x float> @llvm.aarch64.sve.frsqrte.x.nxv4f32(<vscale x 4 x float>)
1653 declare <vscale x 2 x double> @llvm.aarch64.sve.frsqrte.x.nxv2f64(<vscale x 2 x double>)
1655 declare <vscale x 8 x half> @llvm.aarch64.sve.fscale.nxv8f16(<vscale x 8 x i1>, <vscale x 8 x half>, <vscale x 8 x i16>)
1656 declare <vscale x 4 x float> @llvm.aarch64.sve.fscale.nxv4f32(<vscale x 4 x i1>, <vscale x 4 x float>, <vscale x 4 x i32>)
1657 declare <vscale x 2 x double> @llvm.aarch64.sve.fscale.nxv2f64(<vscale x 2 x i1>, <vscale x 2 x double>, <vscale x 2 x i64>)
1659 declare <vscale x 8 x half> @llvm.aarch64.sve.fsqrt.nxv8f16(<vscale x 8 x half>, <vscale x 8 x i1>, <vscale x 8 x half>)
1660 declare <vscale x 4 x float> @llvm.aarch64.sve.fsqrt.nxv4f32(<vscale x 4 x float>, <vscale x 4 x i1>, <vscale x 4 x float>)
1661 declare <vscale x 2 x double> @llvm.aarch64.sve.fsqrt.nxv2f64(<vscale x 2 x double>, <vscale x 2 x i1>, <vscale x 2 x double>)
1663 declare <vscale x 8 x half> @llvm.aarch64.sve.fsub.nxv8f16(<vscale x 8 x i1>, <vscale x 8 x half>, <vscale x 8 x half>)
1664 declare <vscale x 4 x float> @llvm.aarch64.sve.fsub.nxv4f32(<vscale x 4 x i1>, <vscale x 4 x float>, <vscale x 4 x float>)
1665 declare <vscale x 2 x double> @llvm.aarch64.sve.fsub.nxv2f64(<vscale x 2 x i1>, <vscale x 2 x double>, <vscale x 2 x double>)
1667 declare <vscale x 8 x half> @llvm.aarch64.sve.fsubr.nxv8f16(<vscale x 8 x i1>, <vscale x 8 x half>, <vscale x 8 x half>)
1668 declare <vscale x 4 x float> @llvm.aarch64.sve.fsubr.nxv4f32(<vscale x 4 x i1>, <vscale x 4 x float>, <vscale x 4 x float>)
1669 declare <vscale x 2 x double> @llvm.aarch64.sve.fsubr.nxv2f64(<vscale x 2 x i1>, <vscale x 2 x double>, <vscale x 2 x double>)
1671 declare <vscale x 8 x half> @llvm.aarch64.sve.ftmad.x.nxv8f16(<vscale x 8 x half>, <vscale x 8 x half>, i32)
1672 declare <vscale x 4 x float> @llvm.aarch64.sve.ftmad.x.nxv4f32(<vscale x 4 x float>, <vscale x 4 x float>, i32)
1673 declare <vscale x 2 x double> @llvm.aarch64.sve.ftmad.x.nxv2f64(<vscale x 2 x double>, <vscale x 2 x double>, i32)
1675 declare <vscale x 8 x half> @llvm.aarch64.sve.ftsmul.x.nxv8f16(<vscale x 8 x half>, <vscale x 8 x i16>)
1676 declare <vscale x 4 x float> @llvm.aarch64.sve.ftsmul.x.nxv4f32(<vscale x 4 x float>, <vscale x 4 x i32>)
1677 declare <vscale x 2 x double> @llvm.aarch64.sve.ftsmul.x.nxv2f64(<vscale x 2 x double>, <vscale x 2 x i64>)
1679 declare <vscale x 8 x half> @llvm.aarch64.sve.ftssel.x.nxv8f16(<vscale x 8 x half>, <vscale x 8 x i16>)
1680 declare <vscale x 4 x float> @llvm.aarch64.sve.ftssel.x.nxv4f32(<vscale x 4 x float>, <vscale x 4 x i32>)
1681 declare <vscale x 2 x double> @llvm.aarch64.sve.ftssel.x.nxv2f64(<vscale x 2 x double>, <vscale x 2 x i64>)