[flang][cuda] Do not register global constants (#118582)
[llvm-project.git] / llvm / test / CodeGen / AArch64 / sve-fp-immediates-merging.ll
blob905d110e001c853b3c169635cc3fd3d11b7577c8
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s | FileCheck %s
3 ; RUN: llc -use-constant-fp-for-scalable-splat < %s | FileCheck %s
5 target triple = "aarch64-unknown-linux-gnu"
8 ; FADD
11 define <vscale x 8 x half> @fadd_h_immhalf(<vscale x 8 x half> %a) #0 {
12 ; CHECK-LABEL: fadd_h_immhalf:
13 ; CHECK:       // %bb.0:
14 ; CHECK-NEXT:    ptrue p0.h
15 ; CHECK-NEXT:    fadd z0.h, p0/m, z0.h, #0.5
16 ; CHECK-NEXT:    ret
17   %out = fadd <vscale x 8 x half> %a, splat(half 0.500000e+00)
18   ret <vscale x 8 x half> %out
21 define <vscale x 8 x half> @fadd_h_immone(<vscale x 8 x half> %a) #0 {
22 ; CHECK-LABEL: fadd_h_immone:
23 ; CHECK:       // %bb.0:
24 ; CHECK-NEXT:    ptrue p0.h
25 ; CHECK-NEXT:    fadd z0.h, p0/m, z0.h, #1.0
26 ; CHECK-NEXT:    ret
27   %out = fadd <vscale x 8 x half> %a, splat(half 1.000000e+00)
28   ret <vscale x 8 x half> %out
31 define <vscale x 4 x half> @fadd_4h_immhalf(<vscale x 4 x half> %a) #0 {
32 ; CHECK-LABEL: fadd_4h_immhalf:
33 ; CHECK:       // %bb.0:
34 ; CHECK-NEXT:    ptrue p0.s
35 ; CHECK-NEXT:    fadd z0.h, p0/m, z0.h, #0.5
36 ; CHECK-NEXT:    ret
37   %out = fadd <vscale x 4 x half> %a, splat(half 0.500000e+00)
38   ret <vscale x 4 x half> %out
41 define <vscale x 4 x half> @fadd_4h_immone(<vscale x 4 x half> %a) #0 {
42 ; CHECK-LABEL: fadd_4h_immone:
43 ; CHECK:       // %bb.0:
44 ; CHECK-NEXT:    ptrue p0.s
45 ; CHECK-NEXT:    fadd z0.h, p0/m, z0.h, #1.0
46 ; CHECK-NEXT:    ret
47   %out = fadd <vscale x 4 x half> %a, splat(half 1.000000e+00)
48   ret <vscale x 4 x half> %out
51 define <vscale x 2 x half> @fadd_2h_immhalf(<vscale x 2 x half> %a) #0 {
52 ; CHECK-LABEL: fadd_2h_immhalf:
53 ; CHECK:       // %bb.0:
54 ; CHECK-NEXT:    ptrue p0.d
55 ; CHECK-NEXT:    fadd z0.h, p0/m, z0.h, #0.5
56 ; CHECK-NEXT:    ret
57   %out = fadd <vscale x 2 x half> %a, splat(half 0.500000e+00)
58   ret <vscale x 2 x half> %out
61 define <vscale x 2 x half> @fadd_2h_immone(<vscale x 2 x half> %a) #0 {
62 ; CHECK-LABEL: fadd_2h_immone:
63 ; CHECK:       // %bb.0:
64 ; CHECK-NEXT:    ptrue p0.d
65 ; CHECK-NEXT:    fadd z0.h, p0/m, z0.h, #1.0
66 ; CHECK-NEXT:    ret
67   %out = fadd <vscale x 2 x half> %a, splat(half 1.000000e+00)
68   ret <vscale x 2 x half> %out
71 define <vscale x 4 x float> @fadd_s_immhalf(<vscale x 4 x float> %a) #0 {
72 ; CHECK-LABEL: fadd_s_immhalf:
73 ; CHECK:       // %bb.0:
74 ; CHECK-NEXT:    ptrue p0.s
75 ; CHECK-NEXT:    fadd z0.s, p0/m, z0.s, #0.5
76 ; CHECK-NEXT:    ret
77   %out = fadd <vscale x 4 x float> %a, splat(float 0.500000e+00)
78   ret <vscale x 4 x float> %out
81 define <vscale x 4 x float> @fadd_s_immone(<vscale x 4 x float> %a) #0 {
82 ; CHECK-LABEL: fadd_s_immone:
83 ; CHECK:       // %bb.0:
84 ; CHECK-NEXT:    ptrue p0.s
85 ; CHECK-NEXT:    fadd z0.s, p0/m, z0.s, #1.0
86 ; CHECK-NEXT:    ret
87   %out = fadd <vscale x 4 x float> %a, splat(float 1.000000e+00)
88   ret <vscale x 4 x float> %out
91 define <vscale x 2 x float> @fadd_2s_immhalf(<vscale x 2 x float> %a) #0 {
92 ; CHECK-LABEL: fadd_2s_immhalf:
93 ; CHECK:       // %bb.0:
94 ; CHECK-NEXT:    ptrue p0.d
95 ; CHECK-NEXT:    fadd z0.s, p0/m, z0.s, #0.5
96 ; CHECK-NEXT:    ret
97   %out = fadd <vscale x 2 x float> %a, splat(float 0.500000e+00)
98   ret <vscale x 2 x float> %out
101 define <vscale x 2 x float> @fadd_2s_immone(<vscale x 2 x float> %a) #0 {
102 ; CHECK-LABEL: fadd_2s_immone:
103 ; CHECK:       // %bb.0:
104 ; CHECK-NEXT:    ptrue p0.d
105 ; CHECK-NEXT:    fadd z0.s, p0/m, z0.s, #1.0
106 ; CHECK-NEXT:    ret
107   %out = fadd <vscale x 2 x float> %a, splat(float 1.000000e+00)
108   ret <vscale x 2 x float> %out
112 define <vscale x 2 x double> @fadd_d_immhalf(<vscale x 2 x double> %a) #0 {
113 ; CHECK-LABEL: fadd_d_immhalf:
114 ; CHECK:       // %bb.0:
115 ; CHECK-NEXT:    ptrue p0.d
116 ; CHECK-NEXT:    fadd z0.d, p0/m, z0.d, #0.5
117 ; CHECK-NEXT:    ret
118   %out = fadd <vscale x 2 x double> %a, splat(double 0.500000e+00)
119   ret <vscale x 2 x double> %out
122 define <vscale x 2 x double> @fadd_d_immone(<vscale x 2 x double> %a) #0 {
123 ; CHECK-LABEL: fadd_d_immone:
124 ; CHECK:       // %bb.0:
125 ; CHECK-NEXT:    ptrue p0.d
126 ; CHECK-NEXT:    fadd z0.d, p0/m, z0.d, #1.0
127 ; CHECK-NEXT:    ret
128   %out = fadd <vscale x 2 x double> %a, splat(double 1.000000e+00)
129   ret <vscale x 2 x double> %out
133 ; FMAX
136 define <vscale x 8 x half> @fmax_h_immzero(<vscale x 8 x half> %a) #0 {
137 ; CHECK-LABEL: fmax_h_immzero:
138 ; CHECK:       // %bb.0:
139 ; CHECK-NEXT:    ptrue p0.h
140 ; CHECK-NEXT:    fmax z0.h, p0/m, z0.h, #0.0
141 ; CHECK-NEXT:    ret
142   %out = call <vscale x 8 x half> @llvm.maximum.nxv8f16(<vscale x 8 x half> %a, <vscale x 8 x half> zeroinitializer)
143   ret <vscale x 8 x half> %out
146 define <vscale x 8 x half> @fmax_h_immone(<vscale x 8 x half> %a) #0 {
147 ; CHECK-LABEL: fmax_h_immone:
148 ; CHECK:       // %bb.0:
149 ; CHECK-NEXT:    ptrue p0.h
150 ; CHECK-NEXT:    fmax z0.h, p0/m, z0.h, #1.0
151 ; CHECK-NEXT:    ret
152   %out = call <vscale x 8 x half> @llvm.maximum.nxv8f16(<vscale x 8 x half> %a, <vscale x 8 x half> splat(half 1.000000e+00))
153   ret <vscale x 8 x half> %out
156 define <vscale x 4 x half> @fmax_4h_immzero(<vscale x 4 x half> %a) #0 {
157 ; CHECK-LABEL: fmax_4h_immzero:
158 ; CHECK:       // %bb.0:
159 ; CHECK-NEXT:    ptrue p0.s
160 ; CHECK-NEXT:    fmax z0.h, p0/m, z0.h, #0.0
161 ; CHECK-NEXT:    ret
162   %out = call <vscale x 4 x half> @llvm.maximum.nxv4f16(<vscale x 4 x half> %a, <vscale x 4 x half> zeroinitializer)
163   ret <vscale x 4 x half> %out
166 define <vscale x 4 x half> @fmax_4h_immone(<vscale x 4 x half> %a) #0 {
167 ; CHECK-LABEL: fmax_4h_immone:
168 ; CHECK:       // %bb.0:
169 ; CHECK-NEXT:    ptrue p0.s
170 ; CHECK-NEXT:    fmax z0.h, p0/m, z0.h, #1.0
171 ; CHECK-NEXT:    ret
172   %out = call <vscale x 4 x half> @llvm.maximum.nxv4f16(<vscale x 4 x half> %a, <vscale x 4 x half> splat(half 1.000000e+00))
173   ret <vscale x 4 x half> %out
176 define <vscale x 2 x half> @fmax_2h_immzero(<vscale x 2 x half> %a) #0 {
177 ; CHECK-LABEL: fmax_2h_immzero:
178 ; CHECK:       // %bb.0:
179 ; CHECK-NEXT:    ptrue p0.d
180 ; CHECK-NEXT:    fmax z0.h, p0/m, z0.h, #0.0
181 ; CHECK-NEXT:    ret
182   %out = call <vscale x 2 x half> @llvm.maximum.nxv2f16(<vscale x 2 x half> %a, <vscale x 2 x half> zeroinitializer)
183   ret <vscale x 2 x half> %out
186 define <vscale x 2 x half> @fmax_2h_immone(<vscale x 2 x half> %a) #0 {
187 ; CHECK-LABEL: fmax_2h_immone:
188 ; CHECK:       // %bb.0:
189 ; CHECK-NEXT:    ptrue p0.d
190 ; CHECK-NEXT:    fmax z0.h, p0/m, z0.h, #1.0
191 ; CHECK-NEXT:    ret
192   %out = call <vscale x 2 x half> @llvm.maximum.nxv2f16(<vscale x 2 x half> %a, <vscale x 2 x half> splat(half 1.000000e+00))
193   ret <vscale x 2 x half> %out
196 define <vscale x 4 x float> @fmax_s_immzero(<vscale x 4 x float> %a) #0 {
197 ; CHECK-LABEL: fmax_s_immzero:
198 ; CHECK:       // %bb.0:
199 ; CHECK-NEXT:    ptrue p0.s
200 ; CHECK-NEXT:    fmax z0.s, p0/m, z0.s, #0.0
201 ; CHECK-NEXT:    ret
202   %out = call <vscale x 4 x float> @llvm.maximum.nxv4f32(<vscale x 4 x float> %a, <vscale x 4 x float> zeroinitializer)
203   ret <vscale x 4 x float> %out
206 define <vscale x 4 x float> @fmax_s_immone(<vscale x 4 x float> %a) #0 {
207 ; CHECK-LABEL: fmax_s_immone:
208 ; CHECK:       // %bb.0:
209 ; CHECK-NEXT:    ptrue p0.s
210 ; CHECK-NEXT:    fmax z0.s, p0/m, z0.s, #1.0
211 ; CHECK-NEXT:    ret
212   %out = call <vscale x 4 x float> @llvm.maximum.nxv4f32(<vscale x 4 x float> %a, <vscale x 4 x float> splat(float 1.000000e+00))
213   ret <vscale x 4 x float> %out
216 define <vscale x 2 x float> @fmax_2s_immzero(<vscale x 2 x float> %a) #0 {
217 ; CHECK-LABEL: fmax_2s_immzero:
218 ; CHECK:       // %bb.0:
219 ; CHECK-NEXT:    ptrue p0.d
220 ; CHECK-NEXT:    fmax z0.s, p0/m, z0.s, #0.0
221 ; CHECK-NEXT:    ret
222   %out = call <vscale x 2 x float> @llvm.maximum.nxv2f32(<vscale x 2 x float> %a, <vscale x 2 x float> zeroinitializer)
223   ret <vscale x 2 x float> %out
226 define <vscale x 2 x float> @fmax_2s_immone(<vscale x 2 x float> %a) #0 {
227 ; CHECK-LABEL: fmax_2s_immone:
228 ; CHECK:       // %bb.0:
229 ; CHECK-NEXT:    ptrue p0.d
230 ; CHECK-NEXT:    fmax z0.s, p0/m, z0.s, #1.0
231 ; CHECK-NEXT:    ret
232   %out = call <vscale x 2 x float> @llvm.maximum.nxv2f32(<vscale x 2 x float> %a, <vscale x 2 x float> splat(float 1.000000e+00))
233   ret <vscale x 2 x float> %out
236 define <vscale x 2 x double> @fmax_d_immzero(<vscale x 2 x double> %a) #0 {
237 ; CHECK-LABEL: fmax_d_immzero:
238 ; CHECK:       // %bb.0:
239 ; CHECK-NEXT:    ptrue p0.d
240 ; CHECK-NEXT:    fmax z0.d, p0/m, z0.d, #0.0
241 ; CHECK-NEXT:    ret
242   %out = call <vscale x 2 x double> @llvm.maximum.nxv2f64(<vscale x 2 x double> %a, <vscale x 2 x double> zeroinitializer)
243   ret <vscale x 2 x double> %out
246 define <vscale x 2 x double> @fmax_d_immone(<vscale x 2 x double> %a) #0 {
247 ; CHECK-LABEL: fmax_d_immone:
248 ; CHECK:       // %bb.0:
249 ; CHECK-NEXT:    ptrue p0.d
250 ; CHECK-NEXT:    fmax z0.d, p0/m, z0.d, #1.0
251 ; CHECK-NEXT:    ret
252   %out = call <vscale x 2 x double> @llvm.maximum.nxv2f64(<vscale x 2 x double> %a, <vscale x 2 x double> splat(double 1.000000e+00))
253   ret <vscale x 2 x double> %out
257 ; FMAXNM
260 define <vscale x 8 x half> @fmaxnm_h_immzero(<vscale x 8 x half> %a) #0 {
261 ; CHECK-LABEL: fmaxnm_h_immzero:
262 ; CHECK:       // %bb.0:
263 ; CHECK-NEXT:    ptrue p0.h
264 ; CHECK-NEXT:    fmaxnm z0.h, p0/m, z0.h, #0.0
265 ; CHECK-NEXT:    ret
266   %out = call <vscale x 8 x half> @llvm.maxnum.nxv8f16(<vscale x 8 x half> %a, <vscale x 8 x half> zeroinitializer)
267   ret <vscale x 8 x half> %out
270 define <vscale x 8 x half> @fmaxnm_h_immone(<vscale x 8 x half> %a) #0 {
271 ; CHECK-LABEL: fmaxnm_h_immone:
272 ; CHECK:       // %bb.0:
273 ; CHECK-NEXT:    ptrue p0.h
274 ; CHECK-NEXT:    fmaxnm z0.h, p0/m, z0.h, #1.0
275 ; CHECK-NEXT:    ret
276   %out = call <vscale x 8 x half> @llvm.maxnum.nxv8f16(<vscale x 8 x half> %a, <vscale x 8 x half> splat(half 1.000000e+00))
277   ret <vscale x 8 x half> %out
280 define <vscale x 4 x half> @fmaxnm_4h_immzero(<vscale x 4 x half> %a) #0 {
281 ; CHECK-LABEL: fmaxnm_4h_immzero:
282 ; CHECK:       // %bb.0:
283 ; CHECK-NEXT:    ptrue p0.s
284 ; CHECK-NEXT:    fmaxnm z0.h, p0/m, z0.h, #0.0
285 ; CHECK-NEXT:    ret
286   %out = call <vscale x 4 x half> @llvm.maxnum.nxv4f16(<vscale x 4 x half> %a, <vscale x 4 x half> zeroinitializer)
287   ret <vscale x 4 x half> %out
290 define <vscale x 4 x half> @fmaxnm_4h_immone(<vscale x 4 x half> %a) #0 {
291 ; CHECK-LABEL: fmaxnm_4h_immone:
292 ; CHECK:       // %bb.0:
293 ; CHECK-NEXT:    ptrue p0.s
294 ; CHECK-NEXT:    fmaxnm z0.h, p0/m, z0.h, #1.0
295 ; CHECK-NEXT:    ret
296   %out = call <vscale x 4 x half> @llvm.maxnum.nxv4f16(<vscale x 4 x half> %a, <vscale x 4 x half> splat(half 1.000000e+00))
297   ret <vscale x 4 x half> %out
300 define <vscale x 2 x half> @fmaxnm_2h_immzero(<vscale x 2 x half> %a) #0 {
301 ; CHECK-LABEL: fmaxnm_2h_immzero:
302 ; CHECK:       // %bb.0:
303 ; CHECK-NEXT:    ptrue p0.d
304 ; CHECK-NEXT:    fmaxnm z0.h, p0/m, z0.h, #0.0
305 ; CHECK-NEXT:    ret
306   %out = call <vscale x 2 x half> @llvm.maxnum.nxv2f16(<vscale x 2 x half> %a, <vscale x 2 x half> zeroinitializer)
307   ret <vscale x 2 x half> %out
310 define <vscale x 2 x half> @fmaxnm_2h_immone(<vscale x 2 x half> %a) #0 {
311 ; CHECK-LABEL: fmaxnm_2h_immone:
312 ; CHECK:       // %bb.0:
313 ; CHECK-NEXT:    ptrue p0.d
314 ; CHECK-NEXT:    fmaxnm z0.h, p0/m, z0.h, #1.0
315 ; CHECK-NEXT:    ret
316   %out = call <vscale x 2 x half> @llvm.maxnum.nxv2f16(<vscale x 2 x half> %a, <vscale x 2 x half> splat(half 1.000000e+00))
317   ret <vscale x 2 x half> %out
320 define <vscale x 4 x float> @fmaxnm_s_immzero(<vscale x 4 x float> %a) #0 {
321 ; CHECK-LABEL: fmaxnm_s_immzero:
322 ; CHECK:       // %bb.0:
323 ; CHECK-NEXT:    ptrue p0.s
324 ; CHECK-NEXT:    fmaxnm z0.s, p0/m, z0.s, #0.0
325 ; CHECK-NEXT:    ret
326   %out = call <vscale x 4 x float> @llvm.maxnum.nxv4f32(<vscale x 4 x float> %a, <vscale x 4 x float> zeroinitializer)
327   ret <vscale x 4 x float> %out
330 define <vscale x 4 x float> @fmaxnm_s_immone(<vscale x 4 x float> %a) #0 {
331 ; CHECK-LABEL: fmaxnm_s_immone:
332 ; CHECK:       // %bb.0:
333 ; CHECK-NEXT:    ptrue p0.s
334 ; CHECK-NEXT:    fmaxnm z0.s, p0/m, z0.s, #1.0
335 ; CHECK-NEXT:    ret
336   %out = call <vscale x 4 x float> @llvm.maxnum.nxv4f32(<vscale x 4 x float> %a, <vscale x 4 x float> splat(float 1.000000e+00))
337   ret <vscale x 4 x float> %out
340 define <vscale x 2 x float> @fmaxnm_2s_immzero(<vscale x 2 x float> %a) #0 {
341 ; CHECK-LABEL: fmaxnm_2s_immzero:
342 ; CHECK:       // %bb.0:
343 ; CHECK-NEXT:    ptrue p0.d
344 ; CHECK-NEXT:    fmaxnm z0.s, p0/m, z0.s, #0.0
345 ; CHECK-NEXT:    ret
346   %out = call <vscale x 2 x float> @llvm.maxnum.nxv2f32(<vscale x 2 x float> %a, <vscale x 2 x float> zeroinitializer)
347   ret <vscale x 2 x float> %out
350 define <vscale x 2 x float> @fmaxnm_2s_immone(<vscale x 2 x float> %a) #0 {
351 ; CHECK-LABEL: fmaxnm_2s_immone:
352 ; CHECK:       // %bb.0:
353 ; CHECK-NEXT:    ptrue p0.d
354 ; CHECK-NEXT:    fmaxnm z0.s, p0/m, z0.s, #1.0
355 ; CHECK-NEXT:    ret
356   %out = call <vscale x 2 x float> @llvm.maxnum.nxv2f32(<vscale x 2 x float> %a, <vscale x 2 x float> splat(float 1.000000e+00))
357   ret <vscale x 2 x float> %out
360 define <vscale x 2 x double> @fmaxnm_d_immzero(<vscale x 2 x double> %a) #0 {
361 ; CHECK-LABEL: fmaxnm_d_immzero:
362 ; CHECK:       // %bb.0:
363 ; CHECK-NEXT:    ptrue p0.d
364 ; CHECK-NEXT:    fmaxnm z0.d, p0/m, z0.d, #0.0
365 ; CHECK-NEXT:    ret
366   %out = call <vscale x 2 x double> @llvm.maxnum.nxv2f64(<vscale x 2 x double> %a, <vscale x 2 x double> zeroinitializer)
367   ret <vscale x 2 x double> %out
370 define <vscale x 2 x double> @fmaxnm_d_immone(<vscale x 2 x double> %a) #0 {
371 ; CHECK-LABEL: fmaxnm_d_immone:
372 ; CHECK:       // %bb.0:
373 ; CHECK-NEXT:    ptrue p0.d
374 ; CHECK-NEXT:    fmaxnm z0.d, p0/m, z0.d, #1.0
375 ; CHECK-NEXT:    ret
376   %out = call <vscale x 2 x double> @llvm.maxnum.nxv2f64(<vscale x 2 x double> %a, <vscale x 2 x double> splat(double 1.000000e+00))
377   ret <vscale x 2 x double> %out
381 ; FMIN
384 define <vscale x 8 x half> @fmin_h_immzero(<vscale x 8 x half> %a) #0 {
385 ; CHECK-LABEL: fmin_h_immzero:
386 ; CHECK:       // %bb.0:
387 ; CHECK-NEXT:    ptrue p0.h
388 ; CHECK-NEXT:    fmin z0.h, p0/m, z0.h, #0.0
389 ; CHECK-NEXT:    ret
390   %out = call <vscale x 8 x half> @llvm.minimum.nxv8f16(<vscale x 8 x half> %a, <vscale x 8 x half> zeroinitializer)
391   ret <vscale x 8 x half> %out
394 define <vscale x 8 x half> @fmin_h_immone(<vscale x 8 x half> %a) #0 {
395 ; CHECK-LABEL: fmin_h_immone:
396 ; CHECK:       // %bb.0:
397 ; CHECK-NEXT:    ptrue p0.h
398 ; CHECK-NEXT:    fmin z0.h, p0/m, z0.h, #1.0
399 ; CHECK-NEXT:    ret
400   %out = call <vscale x 8 x half> @llvm.minimum.nxv8f16(<vscale x 8 x half> %a, <vscale x 8 x half> splat(half 1.000000e+00))
401   ret <vscale x 8 x half> %out
404 define <vscale x 4 x half> @fmin_4h_immzero(<vscale x 4 x half> %a) #0 {
405 ; CHECK-LABEL: fmin_4h_immzero:
406 ; CHECK:       // %bb.0:
407 ; CHECK-NEXT:    ptrue p0.s
408 ; CHECK-NEXT:    fmin z0.h, p0/m, z0.h, #0.0
409 ; CHECK-NEXT:    ret
410   %out = call <vscale x 4 x half> @llvm.minimum.nxv4f16(<vscale x 4 x half> %a, <vscale x 4 x half> zeroinitializer)
411   ret <vscale x 4 x half> %out
414 define <vscale x 4 x half> @fmin_4h_immone(<vscale x 4 x half> %a) #0 {
415 ; CHECK-LABEL: fmin_4h_immone:
416 ; CHECK:       // %bb.0:
417 ; CHECK-NEXT:    ptrue p0.s
418 ; CHECK-NEXT:    fmin z0.h, p0/m, z0.h, #1.0
419 ; CHECK-NEXT:    ret
420   %out = call <vscale x 4 x half> @llvm.minimum.nxv4f16(<vscale x 4 x half> %a, <vscale x 4 x half> splat(half 1.000000e+00))
421   ret <vscale x 4 x half> %out
424 define <vscale x 2 x half> @fmin_2h_immzero(<vscale x 2 x half> %a) #0 {
425 ; CHECK-LABEL: fmin_2h_immzero:
426 ; CHECK:       // %bb.0:
427 ; CHECK-NEXT:    ptrue p0.d
428 ; CHECK-NEXT:    fmin z0.h, p0/m, z0.h, #0.0
429 ; CHECK-NEXT:    ret
430   %out = call <vscale x 2 x half> @llvm.minimum.nxv2f16(<vscale x 2 x half> %a, <vscale x 2 x half> zeroinitializer)
431   ret <vscale x 2 x half> %out
434 define <vscale x 2 x half> @fmin_2h_immone(<vscale x 2 x half> %a) #0 {
435 ; CHECK-LABEL: fmin_2h_immone:
436 ; CHECK:       // %bb.0:
437 ; CHECK-NEXT:    ptrue p0.d
438 ; CHECK-NEXT:    fmin z0.h, p0/m, z0.h, #1.0
439 ; CHECK-NEXT:    ret
440   %out = call <vscale x 2 x half> @llvm.minimum.nxv2f16(<vscale x 2 x half> %a, <vscale x 2 x half> splat(half 1.000000e+00))
441   ret <vscale x 2 x half> %out
444 define <vscale x 4 x float> @fmin_s_immzero(<vscale x 4 x float> %a) #0 {
445 ; CHECK-LABEL: fmin_s_immzero:
446 ; CHECK:       // %bb.0:
447 ; CHECK-NEXT:    ptrue p0.s
448 ; CHECK-NEXT:    fmin z0.s, p0/m, z0.s, #0.0
449 ; CHECK-NEXT:    ret
450   %out = call <vscale x 4 x float> @llvm.minimum.nxv4f32(<vscale x 4 x float> %a, <vscale x 4 x float> zeroinitializer)
451   ret <vscale x 4 x float> %out
454 define <vscale x 4 x float> @fmin_s_immone(<vscale x 4 x float> %a) #0 {
455 ; CHECK-LABEL: fmin_s_immone:
456 ; CHECK:       // %bb.0:
457 ; CHECK-NEXT:    ptrue p0.s
458 ; CHECK-NEXT:    fmin z0.s, p0/m, z0.s, #1.0
459 ; CHECK-NEXT:    ret
460   %out = call <vscale x 4 x float> @llvm.minimum.nxv4f32(<vscale x 4 x float> %a, <vscale x 4 x float> splat(float 1.000000e+00))
461   ret <vscale x 4 x float> %out
464 define <vscale x 2 x float> @fmin_2s_immzero(<vscale x 2 x float> %a) #0 {
465 ; CHECK-LABEL: fmin_2s_immzero:
466 ; CHECK:       // %bb.0:
467 ; CHECK-NEXT:    ptrue p0.d
468 ; CHECK-NEXT:    fmin z0.s, p0/m, z0.s, #0.0
469 ; CHECK-NEXT:    ret
470   %out = call <vscale x 2 x float> @llvm.minimum.nxv2f32(<vscale x 2 x float> %a, <vscale x 2 x float> zeroinitializer)
471   ret <vscale x 2 x float> %out
474 define <vscale x 2 x float> @fmin_2s_immone(<vscale x 2 x float> %a) #0 {
475 ; CHECK-LABEL: fmin_2s_immone:
476 ; CHECK:       // %bb.0:
477 ; CHECK-NEXT:    ptrue p0.d
478 ; CHECK-NEXT:    fmin z0.s, p0/m, z0.s, #1.0
479 ; CHECK-NEXT:    ret
480   %out = call <vscale x 2 x float> @llvm.minimum.nxv2f32(<vscale x 2 x float> %a, <vscale x 2 x float> splat(float 1.000000e+00))
481   ret <vscale x 2 x float> %out
484 define <vscale x 2 x double> @fmin_d_immzero(<vscale x 2 x double> %a) #0 {
485 ; CHECK-LABEL: fmin_d_immzero:
486 ; CHECK:       // %bb.0:
487 ; CHECK-NEXT:    ptrue p0.d
488 ; CHECK-NEXT:    fmin z0.d, p0/m, z0.d, #0.0
489 ; CHECK-NEXT:    ret
490   %out = call <vscale x 2 x double> @llvm.minimum.nxv2f64(<vscale x 2 x double> %a, <vscale x 2 x double> zeroinitializer)
491   ret <vscale x 2 x double> %out
494 define <vscale x 2 x double> @fmin_d_immone(<vscale x 2 x double> %a) #0 {
495 ; CHECK-LABEL: fmin_d_immone:
496 ; CHECK:       // %bb.0:
497 ; CHECK-NEXT:    ptrue p0.d
498 ; CHECK-NEXT:    fmin z0.d, p0/m, z0.d, #1.0
499 ; CHECK-NEXT:    ret
500   %out = call <vscale x 2 x double> @llvm.minimum.nxv2f64(<vscale x 2 x double> %a, <vscale x 2 x double> splat(double 1.000000e+00))
501   ret <vscale x 2 x double> %out
505 ; FMINNM
508 define <vscale x 8 x half> @fminnm_h_immzero(<vscale x 8 x half> %a) #0 {
509 ; CHECK-LABEL: fminnm_h_immzero:
510 ; CHECK:       // %bb.0:
511 ; CHECK-NEXT:    ptrue p0.h
512 ; CHECK-NEXT:    fminnm z0.h, p0/m, z0.h, #0.0
513 ; CHECK-NEXT:    ret
514   %out = call <vscale x 8 x half> @llvm.minnum.nxv8f16(<vscale x 8 x half> %a, <vscale x 8 x half> zeroinitializer)
515   ret <vscale x 8 x half> %out
518 define <vscale x 8 x half> @fminnm_h_immone(<vscale x 8 x half> %a) #0 {
519 ; CHECK-LABEL: fminnm_h_immone:
520 ; CHECK:       // %bb.0:
521 ; CHECK-NEXT:    ptrue p0.h
522 ; CHECK-NEXT:    fminnm z0.h, p0/m, z0.h, #1.0
523 ; CHECK-NEXT:    ret
524   %out = call <vscale x 8 x half> @llvm.minnum.nxv8f16(<vscale x 8 x half> %a, <vscale x 8 x half> splat(half 1.000000e+00))
525   ret <vscale x 8 x half> %out
528 define <vscale x 4 x half> @fminnm_4h_immzero(<vscale x 4 x half> %a) #0 {
529 ; CHECK-LABEL: fminnm_4h_immzero:
530 ; CHECK:       // %bb.0:
531 ; CHECK-NEXT:    ptrue p0.s
532 ; CHECK-NEXT:    fminnm z0.h, p0/m, z0.h, #0.0
533 ; CHECK-NEXT:    ret
534   %out = call <vscale x 4 x half> @llvm.minnum.nxv4f16(<vscale x 4 x half> %a, <vscale x 4 x half> zeroinitializer)
535   ret <vscale x 4 x half> %out
538 define <vscale x 4 x half> @fminnm_4h_immone(<vscale x 4 x half> %a) #0 {
539 ; CHECK-LABEL: fminnm_4h_immone:
540 ; CHECK:       // %bb.0:
541 ; CHECK-NEXT:    ptrue p0.s
542 ; CHECK-NEXT:    fminnm z0.h, p0/m, z0.h, #1.0
543 ; CHECK-NEXT:    ret
544   %out = call <vscale x 4 x half> @llvm.minnum.nxv4f16(<vscale x 4 x half> %a, <vscale x 4 x half> splat(half 1.000000e+00))
545   ret <vscale x 4 x half> %out
548 define <vscale x 2 x half> @fminnm_2h_immzero(<vscale x 2 x half> %a) #0 {
549 ; CHECK-LABEL: fminnm_2h_immzero:
550 ; CHECK:       // %bb.0:
551 ; CHECK-NEXT:    ptrue p0.d
552 ; CHECK-NEXT:    fminnm z0.h, p0/m, z0.h, #0.0
553 ; CHECK-NEXT:    ret
554   %out = call <vscale x 2 x half> @llvm.minnum.nxv2f16(<vscale x 2 x half> %a, <vscale x 2 x half> zeroinitializer)
555   ret <vscale x 2 x half> %out
558 define <vscale x 2 x half> @fminnm_2h_immone(<vscale x 2 x half> %a) #0 {
559 ; CHECK-LABEL: fminnm_2h_immone:
560 ; CHECK:       // %bb.0:
561 ; CHECK-NEXT:    ptrue p0.d
562 ; CHECK-NEXT:    fminnm z0.h, p0/m, z0.h, #1.0
563 ; CHECK-NEXT:    ret
564   %out = call <vscale x 2 x half> @llvm.minnum.nxv2f16(<vscale x 2 x half> %a, <vscale x 2 x half> splat(half 1.000000e+00))
565   ret <vscale x 2 x half> %out
568 define <vscale x 4 x float> @fminnm_s_immzero(<vscale x 4 x float> %a) #0 {
569 ; CHECK-LABEL: fminnm_s_immzero:
570 ; CHECK:       // %bb.0:
571 ; CHECK-NEXT:    ptrue p0.s
572 ; CHECK-NEXT:    fminnm z0.s, p0/m, z0.s, #0.0
573 ; CHECK-NEXT:    ret
574   %out = call <vscale x 4 x float> @llvm.minnum.nxv4f32(<vscale x 4 x float> %a, <vscale x 4 x float> zeroinitializer)
575   ret <vscale x 4 x float> %out
578 define <vscale x 4 x float> @fminnm_s_immone(<vscale x 4 x float> %a) #0 {
579 ; CHECK-LABEL: fminnm_s_immone:
580 ; CHECK:       // %bb.0:
581 ; CHECK-NEXT:    ptrue p0.s
582 ; CHECK-NEXT:    fminnm z0.s, p0/m, z0.s, #1.0
583 ; CHECK-NEXT:    ret
584   %out = call <vscale x 4 x float> @llvm.minnum.nxv4f32(<vscale x 4 x float> %a, <vscale x 4 x float> splat(float 1.000000e+00))
585   ret <vscale x 4 x float> %out
588 define <vscale x 2 x float> @fminnm_2s_immzero(<vscale x 2 x float> %a) #0 {
589 ; CHECK-LABEL: fminnm_2s_immzero:
590 ; CHECK:       // %bb.0:
591 ; CHECK-NEXT:    ptrue p0.d
592 ; CHECK-NEXT:    fminnm z0.s, p0/m, z0.s, #0.0
593 ; CHECK-NEXT:    ret
594   %out = call <vscale x 2 x float> @llvm.minnum.nxv2f32(<vscale x 2 x float> %a, <vscale x 2 x float> zeroinitializer)
595   ret <vscale x 2 x float> %out
598 define <vscale x 2 x float> @fminnm_2s_immone(<vscale x 2 x float> %a) #0 {
599 ; CHECK-LABEL: fminnm_2s_immone:
600 ; CHECK:       // %bb.0:
601 ; CHECK-NEXT:    ptrue p0.d
602 ; CHECK-NEXT:    fminnm z0.s, p0/m, z0.s, #1.0
603 ; CHECK-NEXT:    ret
604   %out = call <vscale x 2 x float> @llvm.minnum.nxv2f32(<vscale x 2 x float> %a, <vscale x 2 x float> splat(float 1.000000e+00))
605   ret <vscale x 2 x float> %out
608 define <vscale x 2 x double> @fminnm_d_immzero(<vscale x 2 x double> %a) #0 {
609 ; CHECK-LABEL: fminnm_d_immzero:
610 ; CHECK:       // %bb.0:
611 ; CHECK-NEXT:    ptrue p0.d
612 ; CHECK-NEXT:    fminnm z0.d, p0/m, z0.d, #0.0
613 ; CHECK-NEXT:    ret
614   %out = call <vscale x 2 x double> @llvm.minnum.nxv2f64(<vscale x 2 x double> %a, <vscale x 2 x double> zeroinitializer)
615   ret <vscale x 2 x double> %out
618 define <vscale x 2 x double> @fminnm_d_immone(<vscale x 2 x double> %a) #0 {
619 ; CHECK-LABEL: fminnm_d_immone:
620 ; CHECK:       // %bb.0:
621 ; CHECK-NEXT:    ptrue p0.d
622 ; CHECK-NEXT:    fminnm z0.d, p0/m, z0.d, #1.0
623 ; CHECK-NEXT:    ret
624   %out = call <vscale x 2 x double> @llvm.minnum.nxv2f64(<vscale x 2 x double> %a, <vscale x 2 x double> splat(double 1.000000e+00))
625   ret <vscale x 2 x double> %out
629 ; FMUL
632 define <vscale x 8 x half> @fmul_h_immhalf(<vscale x 8 x half> %a) #0 {
633 ; CHECK-LABEL: fmul_h_immhalf:
634 ; CHECK:       // %bb.0:
635 ; CHECK-NEXT:    ptrue p0.h
636 ; CHECK-NEXT:    fmul z0.h, p0/m, z0.h, #0.5
637 ; CHECK-NEXT:    ret
638   %out = fmul <vscale x 8 x half> %a, splat(half 0.500000e+00)
639   ret <vscale x 8 x half> %out
642 define <vscale x 8 x half> @fmul_h_immtwo(<vscale x 8 x half> %a) #0 {
643 ; CHECK-LABEL: fmul_h_immtwo:
644 ; CHECK:       // %bb.0:
645 ; CHECK-NEXT:    fadd z0.h, z0.h, z0.h
646 ; CHECK-NEXT:    ret
647   %out = fmul <vscale x 8 x half> %a, splat(half 2.000000e+00)
648   ret <vscale x 8 x half> %out
651 define <vscale x 4 x half> @fmul_4h_immhalf(<vscale x 4 x half> %a) #0 {
652 ; CHECK-LABEL: fmul_4h_immhalf:
653 ; CHECK:       // %bb.0:
654 ; CHECK-NEXT:    ptrue p0.s
655 ; CHECK-NEXT:    fmul z0.h, p0/m, z0.h, #0.5
656 ; CHECK-NEXT:    ret
657   %out = fmul <vscale x 4 x half> %a, splat(half 0.500000e+00)
658   ret <vscale x 4 x half> %out
661 define <vscale x 4 x half> @fmul_4h_immtwo(<vscale x 4 x half> %a) #0 {
662 ; CHECK-LABEL: fmul_4h_immtwo:
663 ; CHECK:       // %bb.0:
664 ; CHECK-NEXT:    ptrue p0.s
665 ; CHECK-NEXT:    fadd z0.h, p0/m, z0.h, z0.h
666 ; CHECK-NEXT:    ret
667   %out = fmul <vscale x 4 x half> %a, splat(half 2.000000e+00)
668   ret <vscale x 4 x half> %out
671 define <vscale x 2 x half> @fmul_2h_immhalf(<vscale x 2 x half> %a) #0 {
672 ; CHECK-LABEL: fmul_2h_immhalf:
673 ; CHECK:       // %bb.0:
674 ; CHECK-NEXT:    ptrue p0.d
675 ; CHECK-NEXT:    fmul z0.h, p0/m, z0.h, #0.5
676 ; CHECK-NEXT:    ret
677   %out = fmul <vscale x 2 x half> %a, splat(half 0.500000e+00)
678   ret <vscale x 2 x half> %out
681 define <vscale x 2 x half> @fmul_2h_immtwo(<vscale x 2 x half> %a) #0 {
682 ; CHECK-LABEL: fmul_2h_immtwo:
683 ; CHECK:       // %bb.0:
684 ; CHECK-NEXT:    ptrue p0.d
685 ; CHECK-NEXT:    fadd z0.h, p0/m, z0.h, z0.h
686 ; CHECK-NEXT:    ret
687   %out = fmul <vscale x 2 x half> %a, splat(half 2.000000e+00)
688   ret <vscale x 2 x half> %out
691 define <vscale x 4 x float> @fmul_s_immhalf(<vscale x 4 x float> %a) #0 {
692 ; CHECK-LABEL: fmul_s_immhalf:
693 ; CHECK:       // %bb.0:
694 ; CHECK-NEXT:    ptrue p0.s
695 ; CHECK-NEXT:    fmul z0.s, p0/m, z0.s, #0.5
696 ; CHECK-NEXT:    ret
697   %out = fmul <vscale x 4 x float> %a, splat(float 0.500000e+00)
698   ret <vscale x 4 x float> %out
701 define <vscale x 4 x float> @fmul_s_immtwo(<vscale x 4 x float> %a) #0 {
702 ; CHECK-LABEL: fmul_s_immtwo:
703 ; CHECK:       // %bb.0:
704 ; CHECK-NEXT:    fadd z0.s, z0.s, z0.s
705 ; CHECK-NEXT:    ret
706   %out = fmul <vscale x 4 x float> %a, splat(float 2.000000e+00)
707   ret <vscale x 4 x float> %out
710 define <vscale x 2 x float> @fmul_2s_immhalf(<vscale x 2 x float> %a) #0 {
711 ; CHECK-LABEL: fmul_2s_immhalf:
712 ; CHECK:       // %bb.0:
713 ; CHECK-NEXT:    ptrue p0.d
714 ; CHECK-NEXT:    fmul z0.s, p0/m, z0.s, #0.5
715 ; CHECK-NEXT:    ret
716   %out = fmul <vscale x 2 x float> %a, splat(float 0.500000e+00)
717   ret <vscale x 2 x float> %out
720 define <vscale x 2 x float> @fmul_2s_immtwo(<vscale x 2 x float> %a) #0 {
721 ; CHECK-LABEL: fmul_2s_immtwo:
722 ; CHECK:       // %bb.0:
723 ; CHECK-NEXT:    ptrue p0.d
724 ; CHECK-NEXT:    fadd z0.s, p0/m, z0.s, z0.s
725 ; CHECK-NEXT:    ret
726   %out = fmul <vscale x 2 x float> %a, splat(float 2.000000e+00)
727   ret <vscale x 2 x float> %out
730 define <vscale x 2 x double> @fmul_d_immhalf(<vscale x 2 x double> %a) #0 {
731 ; CHECK-LABEL: fmul_d_immhalf:
732 ; CHECK:       // %bb.0:
733 ; CHECK-NEXT:    ptrue p0.d
734 ; CHECK-NEXT:    fmul z0.d, p0/m, z0.d, #0.5
735 ; CHECK-NEXT:    ret
736   %out = fmul <vscale x 2 x double> %a, splat(double 0.500000e+00)
737   ret <vscale x 2 x double> %out
740 define <vscale x 2 x double> @fmul_d_immtwo(<vscale x 2 x double> %a) #0 {
741 ; CHECK-LABEL: fmul_d_immtwo:
742 ; CHECK:       // %bb.0:
743 ; CHECK-NEXT:    fadd z0.d, z0.d, z0.d
744 ; CHECK-NEXT:    ret
745   %out = fmul <vscale x 2 x double> %a, splat(double 2.000000e+00)
746   ret <vscale x 2 x double> %out
750 ; FSUB
753 define <vscale x 8 x half> @fsub_h_immhalf(<vscale x 8 x half> %a) #0 {
754 ; CHECK-LABEL: fsub_h_immhalf:
755 ; CHECK:       // %bb.0:
756 ; CHECK-NEXT:    ptrue p0.h
757 ; CHECK-NEXT:    fsub z0.h, p0/m, z0.h, #0.5
758 ; CHECK-NEXT:    ret
759   %out = fsub <vscale x 8 x half> %a, splat(half 0.500000e+00)
760   ret <vscale x 8 x half> %out
763 define <vscale x 8 x half> @fsub_h_immone(<vscale x 8 x half> %a) #0 {
764 ; CHECK-LABEL: fsub_h_immone:
765 ; CHECK:       // %bb.0:
766 ; CHECK-NEXT:    ptrue p0.h
767 ; CHECK-NEXT:    fsub z0.h, p0/m, z0.h, #1.0
768 ; CHECK-NEXT:    ret
769   %out = fsub <vscale x 8 x half> %a, splat(half 1.000000e+00)
770   ret <vscale x 8 x half> %out
773 define <vscale x 4 x half> @fsub_4h_immhalf(<vscale x 4 x half> %a) #0 {
774 ; CHECK-LABEL: fsub_4h_immhalf:
775 ; CHECK:       // %bb.0:
776 ; CHECK-NEXT:    ptrue p0.s
777 ; CHECK-NEXT:    fsub z0.h, p0/m, z0.h, #0.5
778 ; CHECK-NEXT:    ret
779   %out = fsub <vscale x 4 x half> %a, splat(half 0.500000e+00)
780   ret <vscale x 4 x half> %out
783 define <vscale x 4 x half> @fsub_4h_immone(<vscale x 4 x half> %a) #0 {
784 ; CHECK-LABEL: fsub_4h_immone:
785 ; CHECK:       // %bb.0:
786 ; CHECK-NEXT:    ptrue p0.s
787 ; CHECK-NEXT:    fsub z0.h, p0/m, z0.h, #1.0
788 ; CHECK-NEXT:    ret
789   %out = fsub <vscale x 4 x half> %a, splat(half 1.000000e+00)
790   ret <vscale x 4 x half> %out
793 define <vscale x 2 x half> @fsub_2h_immhalf(<vscale x 2 x half> %a) #0 {
794 ; CHECK-LABEL: fsub_2h_immhalf:
795 ; CHECK:       // %bb.0:
796 ; CHECK-NEXT:    ptrue p0.d
797 ; CHECK-NEXT:    fsub z0.h, p0/m, z0.h, #0.5
798 ; CHECK-NEXT:    ret
799   %out = fsub <vscale x 2 x half> %a, splat(half 0.500000e+00)
800   ret <vscale x 2 x half> %out
803 define <vscale x 2 x half> @fsub_2h_immone(<vscale x 2 x half> %a) #0 {
804 ; CHECK-LABEL: fsub_2h_immone:
805 ; CHECK:       // %bb.0:
806 ; CHECK-NEXT:    ptrue p0.d
807 ; CHECK-NEXT:    fsub z0.h, p0/m, z0.h, #1.0
808 ; CHECK-NEXT:    ret
809   %out = fsub <vscale x 2 x half> %a, splat(half 1.000000e+00)
810   ret <vscale x 2 x half> %out
813 define <vscale x 4 x float> @fsub_s_immhalf(<vscale x 4 x float> %a) #0 {
814 ; CHECK-LABEL: fsub_s_immhalf:
815 ; CHECK:       // %bb.0:
816 ; CHECK-NEXT:    ptrue p0.s
817 ; CHECK-NEXT:    fsub z0.s, p0/m, z0.s, #0.5
818 ; CHECK-NEXT:    ret
819   %out = fsub <vscale x 4 x float> %a, splat(float 0.500000e+00)
820   ret <vscale x 4 x float> %out
823 define <vscale x 4 x float> @fsub_s_immone(<vscale x 4 x float> %a) #0 {
824 ; CHECK-LABEL: fsub_s_immone:
825 ; CHECK:       // %bb.0:
826 ; CHECK-NEXT:    ptrue p0.s
827 ; CHECK-NEXT:    fsub z0.s, p0/m, z0.s, #1.0
828 ; CHECK-NEXT:    ret
829   %out = fsub <vscale x 4 x float> %a, splat(float 1.000000e+00)
830   ret <vscale x 4 x float> %out
833 define <vscale x 2 x float> @fsub_2s_immhalf(<vscale x 2 x float> %a) #0 {
834 ; CHECK-LABEL: fsub_2s_immhalf:
835 ; CHECK:       // %bb.0:
836 ; CHECK-NEXT:    ptrue p0.d
837 ; CHECK-NEXT:    fsub z0.s, p0/m, z0.s, #0.5
838 ; CHECK-NEXT:    ret
839   %out = fsub <vscale x 2 x float> %a, splat(float 0.500000e+00)
840   ret <vscale x 2 x float> %out
843 define <vscale x 2 x float> @fsub_2s_immone(<vscale x 2 x float> %a) #0 {
844 ; CHECK-LABEL: fsub_2s_immone:
845 ; CHECK:       // %bb.0:
846 ; CHECK-NEXT:    ptrue p0.d
847 ; CHECK-NEXT:    fsub z0.s, p0/m, z0.s, #1.0
848 ; CHECK-NEXT:    ret
849   %out = fsub <vscale x 2 x float> %a, splat(float 1.000000e+00)
850   ret <vscale x 2 x float> %out
853 define <vscale x 2 x double> @fsub_d_immhalf(<vscale x 2 x double> %a) #0 {
854 ; CHECK-LABEL: fsub_d_immhalf:
855 ; CHECK:       // %bb.0:
856 ; CHECK-NEXT:    ptrue p0.d
857 ; CHECK-NEXT:    fsub z0.d, p0/m, z0.d, #0.5
858 ; CHECK-NEXT:    ret
859   %out = fsub <vscale x 2 x double> %a, splat(double 0.500000e+00)
860   ret <vscale x 2 x double> %out
863 define <vscale x 2 x double> @fsub_d_immone(<vscale x 2 x double> %a) #0 {
864 ; CHECK-LABEL: fsub_d_immone:
865 ; CHECK:       // %bb.0:
866 ; CHECK-NEXT:    ptrue p0.d
867 ; CHECK-NEXT:    fsub z0.d, p0/m, z0.d, #1.0
868 ; CHECK-NEXT:    ret
869   %out = fsub <vscale x 2 x double> %a, splat(double 1.000000e+00)
870   ret <vscale x 2 x double> %out
874 ; FSUBR
877 define <vscale x 8 x half> @fsubr_h_immhalf(<vscale x 8 x half> %a) #0 {
878 ; CHECK-LABEL: fsubr_h_immhalf:
879 ; CHECK:       // %bb.0:
880 ; CHECK-NEXT:    ptrue p0.h
881 ; CHECK-NEXT:    fsubr z0.h, p0/m, z0.h, #0.5
882 ; CHECK-NEXT:    ret
883   %out = fsub <vscale x 8 x half> splat(half 0.500000e+00), %a
884   ret <vscale x 8 x half> %out
887 define <vscale x 8 x half> @fsubr_h_immone(<vscale x 8 x half> %a) #0 {
888 ; CHECK-LABEL: fsubr_h_immone:
889 ; CHECK:       // %bb.0:
890 ; CHECK-NEXT:    ptrue p0.h
891 ; CHECK-NEXT:    fsubr z0.h, p0/m, z0.h, #1.0
892 ; CHECK-NEXT:    ret
893   %out = fsub <vscale x 8 x half> splat(half 1.000000e+00), %a
894   ret <vscale x 8 x half> %out
897 define <vscale x 4 x half> @fsubr_4h_immhalf(<vscale x 4 x half> %a) #0 {
898 ; CHECK-LABEL: fsubr_4h_immhalf:
899 ; CHECK:       // %bb.0:
900 ; CHECK-NEXT:    ptrue p0.s
901 ; CHECK-NEXT:    fsubr z0.h, p0/m, z0.h, #0.5
902 ; CHECK-NEXT:    ret
903   %out = fsub <vscale x 4 x half> splat(half 0.500000e+00), %a
904   ret <vscale x 4 x half> %out
907 define <vscale x 4 x half> @fsubr_4h_immone(<vscale x 4 x half> %a) #0 {
908 ; CHECK-LABEL: fsubr_4h_immone:
909 ; CHECK:       // %bb.0:
910 ; CHECK-NEXT:    ptrue p0.s
911 ; CHECK-NEXT:    fsubr z0.h, p0/m, z0.h, #1.0
912 ; CHECK-NEXT:    ret
913   %out = fsub <vscale x 4 x half> splat(half 1.000000e+00), %a
914   ret <vscale x 4 x half> %out
917 define <vscale x 2 x half> @fsubr_2h_immhalf(<vscale x 2 x half> %a) #0 {
918 ; CHECK-LABEL: fsubr_2h_immhalf:
919 ; CHECK:       // %bb.0:
920 ; CHECK-NEXT:    ptrue p0.d
921 ; CHECK-NEXT:    fsubr z0.h, p0/m, z0.h, #0.5
922 ; CHECK-NEXT:    ret
923   %out = fsub <vscale x 2 x half> splat(half 0.500000e+00), %a
924   ret <vscale x 2 x half> %out
927 define <vscale x 2 x half> @fsubr_2h_immone(<vscale x 2 x half> %a) #0 {
928 ; CHECK-LABEL: fsubr_2h_immone:
929 ; CHECK:       // %bb.0:
930 ; CHECK-NEXT:    ptrue p0.d
931 ; CHECK-NEXT:    fsubr z0.h, p0/m, z0.h, #1.0
932 ; CHECK-NEXT:    ret
933   %out = fsub <vscale x 2 x half> splat(half 1.000000e+00), %a
934   ret <vscale x 2 x half> %out
937 define <vscale x 4 x float> @fsubr_s_immhalf(<vscale x 4 x float> %a) #0 {
938 ; CHECK-LABEL: fsubr_s_immhalf:
939 ; CHECK:       // %bb.0:
940 ; CHECK-NEXT:    ptrue p0.s
941 ; CHECK-NEXT:    fsubr z0.s, p0/m, z0.s, #0.5
942 ; CHECK-NEXT:    ret
943   %out = fsub <vscale x 4 x float> splat(float 0.500000e+00), %a
944   ret <vscale x 4 x float> %out
947 define <vscale x 4 x float> @fsubr_s_immone(<vscale x 4 x float> %a) #0 {
948 ; CHECK-LABEL: fsubr_s_immone:
949 ; CHECK:       // %bb.0:
950 ; CHECK-NEXT:    ptrue p0.s
951 ; CHECK-NEXT:    fsubr z0.s, p0/m, z0.s, #1.0
952 ; CHECK-NEXT:    ret
953   %out = fsub <vscale x 4 x float> splat(float 1.000000e+00), %a
954   ret <vscale x 4 x float> %out
957 define <vscale x 2 x float> @fsubr_2s_immhalf(<vscale x 2 x float> %a) #0 {
958 ; CHECK-LABEL: fsubr_2s_immhalf:
959 ; CHECK:       // %bb.0:
960 ; CHECK-NEXT:    ptrue p0.d
961 ; CHECK-NEXT:    fsubr z0.s, p0/m, z0.s, #0.5
962 ; CHECK-NEXT:    ret
963   %out = fsub <vscale x 2 x float> splat(float 0.500000e+00), %a
964   ret <vscale x 2 x float> %out
967 define <vscale x 2 x float> @fsubr_2s_immone(<vscale x 2 x float> %a) #0 {
968 ; CHECK-LABEL: fsubr_2s_immone:
969 ; CHECK:       // %bb.0:
970 ; CHECK-NEXT:    ptrue p0.d
971 ; CHECK-NEXT:    fsubr z0.s, p0/m, z0.s, #1.0
972 ; CHECK-NEXT:    ret
973   %out = fsub <vscale x 2 x float> splat(float 1.000000e+00), %a
974   ret <vscale x 2 x float> %out
977 define <vscale x 2 x double> @fsubr_d_immhalf(<vscale x 2 x double> %a) #0 {
978 ; CHECK-LABEL: fsubr_d_immhalf:
979 ; CHECK:       // %bb.0:
980 ; CHECK-NEXT:    ptrue p0.d
981 ; CHECK-NEXT:    fsubr z0.d, p0/m, z0.d, #0.5
982 ; CHECK-NEXT:    ret
983   %out = fsub <vscale x 2 x double> splat(double 0.500000e+00), %a
984   ret <vscale x 2 x double> %out
987 define <vscale x 2 x double> @fsubr_d_immone(<vscale x 2 x double> %a) #0 {
988 ; CHECK-LABEL: fsubr_d_immone:
989 ; CHECK:       // %bb.0:
990 ; CHECK-NEXT:    ptrue p0.d
991 ; CHECK-NEXT:    fsubr z0.d, p0/m, z0.d, #1.0
992 ; CHECK-NEXT:    ret
993   %out = fsub <vscale x 2 x double> splat(double 1.000000e+00), %a
994   ret <vscale x 2 x double> %out
997 declare <vscale x 8 x half> @llvm.maximum.nxv8f16(<vscale x 8 x half>, <vscale x 8 x half>)
998 declare <vscale x 4 x half> @llvm.maximum.nxv4f16(<vscale x 4 x half>, <vscale x 4 x half>)
999 declare <vscale x 2 x half> @llvm.maximum.nxv2f16(<vscale x 2 x half>, <vscale x 2 x half>)
1000 declare <vscale x 4 x float> @llvm.maximum.nxv4f32(<vscale x 4 x float>, <vscale x 4 x float>)
1001 declare <vscale x 2 x float> @llvm.maximum.nxv2f32(<vscale x 2 x float>, <vscale x 2 x float>)
1002 declare <vscale x 2 x double> @llvm.maximum.nxv2f64(<vscale x 2 x double>, <vscale x 2 x double>)
1004 declare <vscale x 8 x half> @llvm.maxnum.nxv8f16(<vscale x 8 x half>, <vscale x 8 x half>)
1005 declare <vscale x 4 x half> @llvm.maxnum.nxv4f16(<vscale x 4 x half>, <vscale x 4 x half>)
1006 declare <vscale x 2 x half> @llvm.maxnum.nxv2f16(<vscale x 2 x half>, <vscale x 2 x half>)
1007 declare <vscale x 4 x float> @llvm.maxnum.nxv4f32(<vscale x 4 x float>, <vscale x 4 x float>)
1008 declare <vscale x 2 x float> @llvm.maxnum.nxv2f32(<vscale x 2 x float>, <vscale x 2 x float>)
1009 declare <vscale x 2 x double> @llvm.maxnum.nxv2f64(<vscale x 2 x double>, <vscale x 2 x double>)
1011 declare <vscale x 8 x half> @llvm.minimum.nxv8f16(<vscale x 8 x half>, <vscale x 8 x half>)
1012 declare <vscale x 4 x half> @llvm.minimum.nxv4f16(<vscale x 4 x half>, <vscale x 4 x half>)
1013 declare <vscale x 2 x half> @llvm.minimum.nxv2f16(<vscale x 2 x half>, <vscale x 2 x half>)
1014 declare <vscale x 4 x float> @llvm.minimum.nxv4f32(<vscale x 4 x float>, <vscale x 4 x float>)
1015 declare <vscale x 2 x float> @llvm.minimum.nxv2f32(<vscale x 2 x float>, <vscale x 2 x float>)
1016 declare <vscale x 2 x double> @llvm.minimum.nxv2f64(<vscale x 2 x double>, <vscale x 2 x double>)
1018 declare <vscale x 8 x half> @llvm.minnum.nxv8f16(<vscale x 8 x half>, <vscale x 8 x half>)
1019 declare <vscale x 4 x half> @llvm.minnum.nxv4f16(<vscale x 4 x half>, <vscale x 4 x half>)
1020 declare <vscale x 2 x half> @llvm.minnum.nxv2f16(<vscale x 2 x half>, <vscale x 2 x half>)
1021 declare <vscale x 4 x float> @llvm.minnum.nxv4f32(<vscale x 4 x float>, <vscale x 4 x float>)
1022 declare <vscale x 2 x float> @llvm.minnum.nxv2f32(<vscale x 2 x float>, <vscale x 2 x float>)
1023 declare <vscale x 2 x double> @llvm.minnum.nxv2f64(<vscale x 2 x double>, <vscale x 2 x double>)
1025 attributes #0 = { "target-features"="+sve" }
1026 attributes #1 = { "target-features"="+sve,+use-experimental-zeroing-pseudos" }