4
4
; FADD
5
5
;
6
6
7
+ 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 ) {
8
+ ; CHECK-LABEL: fadd_h:
9
+ ; CHECK: movprfx z0.h, p0/z, z0.h
10
+ ; CHECK-NEXT: fadd z0.h, p0/m, z0.h, z1.h
11
+ ; CHECK-NEXT: ret
12
+ %a_z = select <vscale x 8 x i1 > %pg , <vscale x 8 x half > %a , <vscale x 8 x half > zeroinitializer
13
+ %out = call <vscale x 8 x half > @llvm.aarch64.sve.fadd.nxv8f16 (<vscale x 8 x i1 > %pg ,
14
+ <vscale x 8 x half > %a_z ,
15
+ <vscale x 8 x half > %b )
16
+ ret <vscale x 8 x half > %out
17
+ }
18
+
7
19
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 ) {
8
20
; CHECK-LABEL: fadd_s:
9
21
; CHECK: movprfx z0.s, p0/z, z0.s
@@ -32,6 +44,18 @@ define <vscale x 2 x double> @fadd_d(<vscale x 2 x i1> %pg, <vscale x 2 x double
32
44
; FMAX
33
45
;
34
46
47
+ 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 ) {
48
+ ; CHECK-LABEL: fmax_h:
49
+ ; CHECK: movprfx z0.h, p0/z, z0.h
50
+ ; CHECK-NEXT: fmax z0.h, p0/m, z0.h, z1.h
51
+ ; CHECK-NEXT: ret
52
+ %a_z = select <vscale x 8 x i1 > %pg , <vscale x 8 x half > %a , <vscale x 8 x half > zeroinitializer
53
+ %out = call <vscale x 8 x half > @llvm.aarch64.sve.fmax.nxv8f16 (<vscale x 8 x i1 > %pg ,
54
+ <vscale x 8 x half > %a_z ,
55
+ <vscale x 8 x half > %b )
56
+ ret <vscale x 8 x half > %out
57
+ }
58
+
35
59
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 ) {
36
60
; CHECK-LABEL: fmax_s:
37
61
; CHECK: movprfx z0.s, p0/z, z0.s
@@ -60,6 +84,18 @@ define <vscale x 2 x double> @fmax_d(<vscale x 2 x i1> %pg, <vscale x 2 x double
60
84
; FMAXNM
61
85
;
62
86
87
+ 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 ) {
88
+ ; CHECK-LABEL: fmaxnm_h:
89
+ ; CHECK: movprfx z0.h, p0/z, z0.h
90
+ ; CHECK-NEXT: fmaxnm z0.h, p0/m, z0.h, z1.h
91
+ ; CHECK-NEXT: ret
92
+ %a_z = select <vscale x 8 x i1 > %pg , <vscale x 8 x half > %a , <vscale x 8 x half > zeroinitializer
93
+ %out = call <vscale x 8 x half > @llvm.aarch64.sve.fmaxnm.nxv8f16 (<vscale x 8 x i1 > %pg ,
94
+ <vscale x 8 x half > %a_z ,
95
+ <vscale x 8 x half > %b )
96
+ ret <vscale x 8 x half > %out
97
+ }
98
+
63
99
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 ) {
64
100
; CHECK-LABEL: fmaxnm_s:
65
101
; CHECK: movprfx z0.s, p0/z, z0.s
@@ -88,6 +124,18 @@ define <vscale x 2 x double> @fmaxnm_d(<vscale x 2 x i1> %pg, <vscale x 2 x doub
88
124
; FMIN
89
125
;
90
126
127
+ 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 ) {
128
+ ; CHECK-LABEL: fmin_h:
129
+ ; CHECK: movprfx z0.h, p0/z, z0.h
130
+ ; CHECK-NEXT: fmin z0.h, p0/m, z0.h, z1.h
131
+ ; CHECK-NEXT: ret
132
+ %a_z = select <vscale x 8 x i1 > %pg , <vscale x 8 x half > %a , <vscale x 8 x half > zeroinitializer
133
+ %out = call <vscale x 8 x half > @llvm.aarch64.sve.fmin.nxv8f16 (<vscale x 8 x i1 > %pg ,
134
+ <vscale x 8 x half > %a_z ,
135
+ <vscale x 8 x half > %b )
136
+ ret <vscale x 8 x half > %out
137
+ }
138
+
91
139
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 ) {
92
140
; CHECK-LABEL: fmin_s:
93
141
; CHECK: movprfx z0.s, p0/z, z0.s
@@ -116,6 +164,18 @@ define <vscale x 2 x double> @fmin_d(<vscale x 2 x i1> %pg, <vscale x 2 x double
116
164
; FMINNM
117
165
;
118
166
167
+ 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 ) {
168
+ ; CHECK-LABEL: fminnm_h:
169
+ ; CHECK: movprfx z0.h, p0/z, z0.h
170
+ ; CHECK-NEXT: fminnm z0.h, p0/m, z0.h, z1.h
171
+ ; CHECK-NEXT: ret
172
+ %a_z = select <vscale x 8 x i1 > %pg , <vscale x 8 x half > %a , <vscale x 8 x half > zeroinitializer
173
+ %out = call <vscale x 8 x half > @llvm.aarch64.sve.fminnm.nxv8f16 (<vscale x 8 x i1 > %pg ,
174
+ <vscale x 8 x half > %a_z ,
175
+ <vscale x 8 x half > %b )
176
+ ret <vscale x 8 x half > %out
177
+ }
178
+
119
179
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 ) {
120
180
; CHECK-LABEL: fminnm_s:
121
181
; CHECK: movprfx z0.s, p0/z, z0.s
@@ -144,6 +204,18 @@ define <vscale x 2 x double> @fminnm_d(<vscale x 2 x i1> %pg, <vscale x 2 x doub
144
204
; FMUL
145
205
;
146
206
207
+ 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 ) {
208
+ ; CHECK-LABEL: fmul_h:
209
+ ; CHECK: movprfx z0.h, p0/z, z0.h
210
+ ; CHECK-NEXT: fmul z0.h, p0/m, z0.h, z1.h
211
+ ; CHECK-NEXT: ret
212
+ %a_z = select <vscale x 8 x i1 > %pg , <vscale x 8 x half > %a , <vscale x 8 x half > zeroinitializer
213
+ %out = call <vscale x 8 x half > @llvm.aarch64.sve.fmul.nxv8f16 (<vscale x 8 x i1 > %pg ,
214
+ <vscale x 8 x half > %a_z ,
215
+ <vscale x 8 x half > %b )
216
+ ret <vscale x 8 x half > %out
217
+ }
218
+
147
219
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 ) {
148
220
; CHECK-LABEL: fmul_s:
149
221
; CHECK: movprfx z0.s, p0/z, z0.s
@@ -172,6 +244,18 @@ define <vscale x 2 x double> @fmul_d(<vscale x 2 x i1> %pg, <vscale x 2 x double
172
244
; FSUB
173
245
;
174
246
247
+ 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 ) {
248
+ ; CHECK-LABEL: fsub_h:
249
+ ; CHECK: movprfx z0.h, p0/z, z0.h
250
+ ; CHECK-NEXT: fsub z0.h, p0/m, z0.h, z1.h
251
+ ; CHECK-NEXT: ret
252
+ %a_z = select <vscale x 8 x i1 > %pg , <vscale x 8 x half > %a , <vscale x 8 x half > zeroinitializer
253
+ %out = call <vscale x 8 x half > @llvm.aarch64.sve.fsub.nxv8f16 (<vscale x 8 x i1 > %pg ,
254
+ <vscale x 8 x half > %a_z ,
255
+ <vscale x 8 x half > %b )
256
+ ret <vscale x 8 x half > %out
257
+ }
258
+
175
259
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 ) {
176
260
; CHECK-LABEL: fsub_s:
177
261
; CHECK: movprfx z0.s, p0/z, z0.s
@@ -200,6 +284,18 @@ define <vscale x 2 x double> @fsub_d(<vscale x 2 x i1> %pg, <vscale x 2 x double
200
284
; FSUBR
201
285
;
202
286
287
+ 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 ) {
288
+ ; CHECK-LABEL: fsubr_h:
289
+ ; CHECK: movprfx z0.h, p0/z, z0.h
290
+ ; CHECK-NEXT: fsubr z0.h, p0/m, z0.h, z1.h
291
+ ; CHECK-NEXT: ret
292
+ %a_z = select <vscale x 8 x i1 > %pg , <vscale x 8 x half > %a , <vscale x 8 x half > zeroinitializer
293
+ %out = call <vscale x 8 x half > @llvm.aarch64.sve.fsubr.nxv8f16 (<vscale x 8 x i1 > %pg ,
294
+ <vscale x 8 x half > %a_z ,
295
+ <vscale x 8 x half > %b )
296
+ ret <vscale x 8 x half > %out
297
+ }
298
+
203
299
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 ) {
204
300
; CHECK-LABEL: fsubr_s:
205
301
; CHECK: movprfx z0.s, p0/z, z0.s
@@ -224,38 +320,50 @@ define <vscale x 2 x double> @fsubr_d(<vscale x 2 x i1> %pg, <vscale x 2 x doubl
224
320
ret <vscale x 2 x double > %out
225
321
}
226
322
323
+ 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 >)
227
324
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 >)
228
325
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 >)
229
326
327
+ 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 >)
230
328
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 >)
231
329
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 >)
232
330
331
+ 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 >)
233
332
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 >)
234
333
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 >)
235
334
335
+ 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 >)
236
336
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 >)
237
337
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 >)
238
338
339
+ 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 >)
239
340
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 >)
240
341
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 >)
241
342
343
+ 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 >)
242
344
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 >)
243
345
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 >)
244
346
347
+ 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 >)
245
348
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 >)
246
349
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 >)
247
350
351
+ 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 >)
248
352
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 >)
249
353
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 >)
250
354
355
+ 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 >)
251
356
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 >)
252
357
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 >)
253
358
359
+ 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 >)
254
360
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 >)
255
361
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 >)
256
362
363
+ 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 >)
257
364
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 >)
258
365
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 >)
259
366
367
+ 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 >)
260
368
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 >)
261
369
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 >)
0 commit comments