1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
2 ; RUN: llc -mattr=+sve < %s | FileCheck %s
3 ; RUN: llc -mattr=+sve2p2 < %s | FileCheck %s -check-prefix CHECK-2p2
5 ; RUN: llc -mattr=+sme -force-streaming < %s | FileCheck %s
6 ; RUN: llc -mattr=+sme2p2 -force-streaming < %s | FileCheck %s -check-prefix CHECK-2p2
8 target triple = "aarch64-linux"
10 define <vscale x 8 x half> @test_svrinta_f16_x_1(<vscale x 8 x i1> %pg, <vscale x 8 x half> %x) {
11 ; CHECK-LABEL: test_svrinta_f16_x_1:
12 ; CHECK: // %bb.0: // %entry
13 ; CHECK-NEXT: frinta z0.h, p0/m, z0.h
16 ; CHECK-2p2-LABEL: test_svrinta_f16_x_1:
17 ; CHECK-2p2: // %bb.0: // %entry
18 ; CHECK-2p2-NEXT: frinta z0.h, p0/z, z0.h
21 %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.frinta.nxv8f16(<vscale x 8 x half> poison, <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)
22 ret <vscale x 8 x half> %0
25 define <vscale x 8 x half> @test_svrinta_f16_x_2(<vscale x 8 x i1> %pg, double %z0, <vscale x 8 x half> %x) {
26 ; CHECK-LABEL: test_svrinta_f16_x_2:
27 ; CHECK: // %bb.0: // %entry
28 ; CHECK-NEXT: movprfx z0, z1
29 ; CHECK-NEXT: frinta z0.h, p0/m, z1.h
32 ; CHECK-2p2-LABEL: test_svrinta_f16_x_2:
33 ; CHECK-2p2: // %bb.0: // %entry
34 ; CHECK-2p2-NEXT: frinta z0.h, p0/z, z1.h
37 %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.frinta.nxv8f16(<vscale x 8 x half> poison, <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)
38 ret <vscale x 8 x half> %0
41 define <vscale x 8 x half> @test_svrinta_f16_z(<vscale x 8 x i1> %pg, double %z0, <vscale x 8 x half> %x) {
42 ; CHECK-LABEL: test_svrinta_f16_z:
43 ; CHECK: // %bb.0: // %entry
44 ; CHECK-NEXT: mov z0.h, #0 // =0x0
45 ; CHECK-NEXT: frinta z0.h, p0/m, z1.h
48 ; CHECK-2p2-LABEL: test_svrinta_f16_z:
49 ; CHECK-2p2: // %bb.0: // %entry
50 ; CHECK-2p2-NEXT: frinta z0.h, p0/z, z1.h
53 %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.frinta.nxv8f16(<vscale x 8 x half> zeroinitializer, <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)
54 ret <vscale x 8 x half> %0
57 define <vscale x 4 x half> @test_svrinta_4f16_x_1(<vscale x 4 x i1> %pg, <vscale x 4 x half> %x) {
58 ; CHECK-LABEL: test_svrinta_4f16_x_1:
59 ; CHECK: // %bb.0: // %entry
60 ; CHECK-NEXT: frinta z0.h, p0/m, z0.h
63 ; CHECK-2p2-LABEL: test_svrinta_4f16_x_1:
64 ; CHECK-2p2: // %bb.0: // %entry
65 ; CHECK-2p2-NEXT: frinta z0.h, p0/z, z0.h
68 %0 = tail call <vscale x 4 x half> @llvm.aarch64.sve.frinta.nxv4f16(<vscale x 4 x half> poison, <vscale x 4 x i1> %pg, <vscale x 4 x half> %x)
69 ret <vscale x 4 x half> %0
72 define <vscale x 4 x half> @test_svrinta_4f16_x_2(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x half> %x) {
73 ; CHECK-LABEL: test_svrinta_4f16_x_2:
74 ; CHECK: // %bb.0: // %entry
75 ; CHECK-NEXT: movprfx z0, z1
76 ; CHECK-NEXT: frinta z0.h, p0/m, z1.h
79 ; CHECK-2p2-LABEL: test_svrinta_4f16_x_2:
80 ; CHECK-2p2: // %bb.0: // %entry
81 ; CHECK-2p2-NEXT: frinta z0.h, p0/z, z1.h
84 %0 = tail call <vscale x 4 x half> @llvm.aarch64.sve.frinta.nxv4f16(<vscale x 4 x half> poison, <vscale x 4 x i1> %pg, <vscale x 4 x half> %x)
85 ret <vscale x 4 x half> %0
88 define <vscale x 4 x half> @test_svrinta_4f16_z(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x half> %x) {
89 ; CHECK-LABEL: test_svrinta_4f16_z:
90 ; CHECK: // %bb.0: // %entry
91 ; CHECK-NEXT: mov z0.h, #0 // =0x0
92 ; CHECK-NEXT: frinta z0.h, p0/m, z1.h
95 ; CHECK-2p2-LABEL: test_svrinta_4f16_z:
96 ; CHECK-2p2: // %bb.0: // %entry
97 ; CHECK-2p2-NEXT: frinta z0.h, p0/z, z1.h
100 %0 = tail call <vscale x 4 x half> @llvm.aarch64.sve.frinta.nxv4f16(<vscale x 4 x half> zeroinitializer, <vscale x 4 x i1> %pg, <vscale x 4 x half> %x)
101 ret <vscale x 4 x half> %0
104 define <vscale x 2 x half> @test_svrinta_2f16_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x half> %x) {
105 ; CHECK-LABEL: test_svrinta_2f16_x_1:
106 ; CHECK: // %bb.0: // %entry
107 ; CHECK-NEXT: frinta z0.h, p0/m, z0.h
110 ; CHECK-2p2-LABEL: test_svrinta_2f16_x_1:
111 ; CHECK-2p2: // %bb.0: // %entry
112 ; CHECK-2p2-NEXT: frinta z0.h, p0/z, z0.h
113 ; CHECK-2p2-NEXT: ret
115 %0 = tail call <vscale x 2 x half> @llvm.aarch64.sve.frinta.nxv2f16(<vscale x 2 x half> poison, <vscale x 2 x i1> %pg, <vscale x 2 x half> %x)
116 ret <vscale x 2 x half> %0
119 define <vscale x 2 x half> @test_svrinta_2f16_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x half> %x) {
120 ; CHECK-LABEL: test_svrinta_2f16_x_2:
121 ; CHECK: // %bb.0: // %entry
122 ; CHECK-NEXT: movprfx z0, z1
123 ; CHECK-NEXT: frinta z0.h, p0/m, z1.h
126 ; CHECK-2p2-LABEL: test_svrinta_2f16_x_2:
127 ; CHECK-2p2: // %bb.0: // %entry
128 ; CHECK-2p2-NEXT: frinta z0.h, p0/z, z1.h
129 ; CHECK-2p2-NEXT: ret
131 %0 = tail call <vscale x 2 x half> @llvm.aarch64.sve.frinta.nxv2f16(<vscale x 2 x half> poison, <vscale x 2 x i1> %pg, <vscale x 2 x half> %x)
132 ret <vscale x 2 x half> %0
135 define <vscale x 2 x half> @test_svrinta_2f16_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x half> %x) {
136 ; CHECK-LABEL: test_svrinta_2f16_z:
137 ; CHECK: // %bb.0: // %entry
138 ; CHECK-NEXT: mov z0.h, #0 // =0x0
139 ; CHECK-NEXT: frinta z0.h, p0/m, z1.h
142 ; CHECK-2p2-LABEL: test_svrinta_2f16_z:
143 ; CHECK-2p2: // %bb.0: // %entry
144 ; CHECK-2p2-NEXT: frinta z0.h, p0/z, z1.h
145 ; CHECK-2p2-NEXT: ret
147 %0 = tail call <vscale x 2 x half> @llvm.aarch64.sve.frinta.nxv2f16(<vscale x 2 x half> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x half> %x)
148 ret <vscale x 2 x half> %0
151 define <vscale x 2 x float> @test_svrinta_2f32_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x float> %x) {
152 ; CHECK-LABEL: test_svrinta_2f32_x_1:
153 ; CHECK: // %bb.0: // %entry
154 ; CHECK-NEXT: frinta z0.s, p0/m, z0.s
157 ; CHECK-2p2-LABEL: test_svrinta_2f32_x_1:
158 ; CHECK-2p2: // %bb.0: // %entry
159 ; CHECK-2p2-NEXT: frinta z0.s, p0/z, z0.s
160 ; CHECK-2p2-NEXT: ret
162 %0 = tail call <vscale x 2 x float> @llvm.aarch64.sve.frinta.nxv2f32(<vscale x 2 x float> poison, <vscale x 2 x i1> %pg, <vscale x 2 x float> %x)
163 ret <vscale x 2 x float> %0
166 define <vscale x 2 x float> @test_svrinta_2f32_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x float> %x) {
167 ; CHECK-LABEL: test_svrinta_2f32_x_2:
168 ; CHECK: // %bb.0: // %entry
169 ; CHECK-NEXT: movprfx z0, z1
170 ; CHECK-NEXT: frinta z0.s, p0/m, z1.s
173 ; CHECK-2p2-LABEL: test_svrinta_2f32_x_2:
174 ; CHECK-2p2: // %bb.0: // %entry
175 ; CHECK-2p2-NEXT: frinta z0.s, p0/z, z1.s
176 ; CHECK-2p2-NEXT: ret
178 %0 = tail call <vscale x 2 x float> @llvm.aarch64.sve.frinta.nxv2f32(<vscale x 2 x float> poison, <vscale x 2 x i1> %pg, <vscale x 2 x float> %x)
179 ret <vscale x 2 x float> %0
182 define <vscale x 2 x float> @test_svrinta_2f32_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x float> %x) {
183 ; CHECK-LABEL: test_svrinta_2f32_z:
184 ; CHECK: // %bb.0: // %entry
185 ; CHECK-NEXT: mov z0.s, #0 // =0x0
186 ; CHECK-NEXT: frinta z0.s, p0/m, z1.s
189 ; CHECK-2p2-LABEL: test_svrinta_2f32_z:
190 ; CHECK-2p2: // %bb.0: // %entry
191 ; CHECK-2p2-NEXT: frinta z0.s, p0/z, z1.s
192 ; CHECK-2p2-NEXT: ret
194 %0 = tail call <vscale x 2 x float> @llvm.aarch64.sve.frinta.nxv2f32(<vscale x 2 x float> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x float> %x)
195 ret <vscale x 2 x float> %0
198 define <vscale x 4 x float> @test_svrinta_f32_x_1(<vscale x 4 x i1> %pg, <vscale x 4 x float> %x) {
199 ; CHECK-LABEL: test_svrinta_f32_x_1:
200 ; CHECK: // %bb.0: // %entry
201 ; CHECK-NEXT: frinta z0.s, p0/m, z0.s
204 ; CHECK-2p2-LABEL: test_svrinta_f32_x_1:
205 ; CHECK-2p2: // %bb.0: // %entry
206 ; CHECK-2p2-NEXT: frinta z0.s, p0/z, z0.s
207 ; CHECK-2p2-NEXT: ret
209 %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.frinta.nxv4f32(<vscale x 4 x float> poison, <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)
210 ret <vscale x 4 x float> %0
213 define <vscale x 4 x float> @test_svrinta_f32_x_2(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x float> %x) {
214 ; CHECK-LABEL: test_svrinta_f32_x_2:
215 ; CHECK: // %bb.0: // %entry
216 ; CHECK-NEXT: movprfx z0, z1
217 ; CHECK-NEXT: frinta z0.s, p0/m, z1.s
220 ; CHECK-2p2-LABEL: test_svrinta_f32_x_2:
221 ; CHECK-2p2: // %bb.0: // %entry
222 ; CHECK-2p2-NEXT: frinta z0.s, p0/z, z1.s
223 ; CHECK-2p2-NEXT: ret
225 %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.frinta.nxv4f32(<vscale x 4 x float> poison, <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)
226 ret <vscale x 4 x float> %0
229 define <vscale x 4 x float> @test_svrinta_f32_z(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x float> %x) {
230 ; CHECK-LABEL: test_svrinta_f32_z:
231 ; CHECK: // %bb.0: // %entry
232 ; CHECK-NEXT: mov z0.s, #0 // =0x0
233 ; CHECK-NEXT: frinta z0.s, p0/m, z1.s
236 ; CHECK-2p2-LABEL: test_svrinta_f32_z:
237 ; CHECK-2p2: // %bb.0: // %entry
238 ; CHECK-2p2-NEXT: frinta z0.s, p0/z, z1.s
239 ; CHECK-2p2-NEXT: ret
241 %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.frinta.nxv4f32(<vscale x 4 x float> zeroinitializer, <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)
242 ret <vscale x 4 x float> %0
245 define <vscale x 2 x double> @test_svrinta_f64_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x double> %x) {
246 ; CHECK-LABEL: test_svrinta_f64_x_1:
247 ; CHECK: // %bb.0: // %entry
248 ; CHECK-NEXT: frinta z0.d, p0/m, z0.d
251 ; CHECK-2p2-LABEL: test_svrinta_f64_x_1:
252 ; CHECK-2p2: // %bb.0: // %entry
253 ; CHECK-2p2-NEXT: frinta z0.d, p0/z, z0.d
254 ; CHECK-2p2-NEXT: ret
256 %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.frinta.nxv2f64(<vscale x 2 x double> poison, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)
257 ret <vscale x 2 x double> %0
260 define <vscale x 2 x double> @test_svrinta_f64_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x double> %x) {
261 ; CHECK-LABEL: test_svrinta_f64_x_2:
262 ; CHECK: // %bb.0: // %entry
263 ; CHECK-NEXT: movprfx z0, z1
264 ; CHECK-NEXT: frinta z0.d, p0/m, z1.d
267 ; CHECK-2p2-LABEL: test_svrinta_f64_x_2:
268 ; CHECK-2p2: // %bb.0: // %entry
269 ; CHECK-2p2-NEXT: frinta z0.d, p0/z, z1.d
270 ; CHECK-2p2-NEXT: ret
272 %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.frinta.nxv2f64(<vscale x 2 x double> poison, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)
273 ret <vscale x 2 x double> %0
276 define <vscale x 2 x double> @test_svrinta_f64_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x double> %x) {
277 ; CHECK-LABEL: test_svrinta_f64_z:
278 ; CHECK: // %bb.0: // %entry
279 ; CHECK-NEXT: mov z0.d, #0 // =0x0
280 ; CHECK-NEXT: frinta z0.d, p0/m, z1.d
283 ; CHECK-2p2-LABEL: test_svrinta_f64_z:
284 ; CHECK-2p2: // %bb.0: // %entry
285 ; CHECK-2p2-NEXT: frinta z0.d, p0/z, z1.d
286 ; CHECK-2p2-NEXT: ret
288 %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.frinta.nxv2f64(<vscale x 2 x double> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)
289 ret <vscale x 2 x double> %0
292 define <vscale x 8 x half> @test_svrinti_f16_x_1(<vscale x 8 x i1> %pg, <vscale x 8 x half> %x) {
293 ; CHECK-LABEL: test_svrinti_f16_x_1:
294 ; CHECK: // %bb.0: // %entry
295 ; CHECK-NEXT: frinti z0.h, p0/m, z0.h
298 ; CHECK-2p2-LABEL: test_svrinti_f16_x_1:
299 ; CHECK-2p2: // %bb.0: // %entry
300 ; CHECK-2p2-NEXT: frinti z0.h, p0/z, z0.h
301 ; CHECK-2p2-NEXT: ret
303 %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.frinti.nxv8f16(<vscale x 8 x half> poison, <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)
304 ret <vscale x 8 x half> %0
307 define <vscale x 8 x half> @test_svrinti_f16_x_2(<vscale x 8 x i1> %pg, double %z0, <vscale x 8 x half> %x) {
308 ; CHECK-LABEL: test_svrinti_f16_x_2:
309 ; CHECK: // %bb.0: // %entry
310 ; CHECK-NEXT: movprfx z0, z1
311 ; CHECK-NEXT: frinti z0.h, p0/m, z1.h
314 ; CHECK-2p2-LABEL: test_svrinti_f16_x_2:
315 ; CHECK-2p2: // %bb.0: // %entry
316 ; CHECK-2p2-NEXT: frinti z0.h, p0/z, z1.h
317 ; CHECK-2p2-NEXT: ret
319 %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.frinti.nxv8f16(<vscale x 8 x half> poison, <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)
320 ret <vscale x 8 x half> %0
323 define <vscale x 8 x half> @test_svrinti_f16_z(<vscale x 8 x i1> %pg, double %z0, <vscale x 8 x half> %x) {
324 ; CHECK-LABEL: test_svrinti_f16_z:
325 ; CHECK: // %bb.0: // %entry
326 ; CHECK-NEXT: mov z0.h, #0 // =0x0
327 ; CHECK-NEXT: frinti z0.h, p0/m, z1.h
330 ; CHECK-2p2-LABEL: test_svrinti_f16_z:
331 ; CHECK-2p2: // %bb.0: // %entry
332 ; CHECK-2p2-NEXT: frinti z0.h, p0/z, z1.h
333 ; CHECK-2p2-NEXT: ret
335 %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.frinti.nxv8f16(<vscale x 8 x half> zeroinitializer, <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)
336 ret <vscale x 8 x half> %0
339 define <vscale x 4 x half> @test_svrinti_4f16_x_1(<vscale x 4 x i1> %pg, <vscale x 4 x half> %x) {
340 ; CHECK-LABEL: test_svrinti_4f16_x_1:
341 ; CHECK: // %bb.0: // %entry
342 ; CHECK-NEXT: frinti z0.h, p0/m, z0.h
345 ; CHECK-2p2-LABEL: test_svrinti_4f16_x_1:
346 ; CHECK-2p2: // %bb.0: // %entry
347 ; CHECK-2p2-NEXT: frinti z0.h, p0/z, z0.h
348 ; CHECK-2p2-NEXT: ret
350 %0 = tail call <vscale x 4 x half> @llvm.aarch64.sve.frinti.nxv4f16(<vscale x 4 x half> poison, <vscale x 4 x i1> %pg, <vscale x 4 x half> %x)
351 ret <vscale x 4 x half> %0
354 define <vscale x 4 x half> @test_svrinti_4f16_x_2(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x half> %x) {
355 ; CHECK-LABEL: test_svrinti_4f16_x_2:
356 ; CHECK: // %bb.0: // %entry
357 ; CHECK-NEXT: movprfx z0, z1
358 ; CHECK-NEXT: frinti z0.h, p0/m, z1.h
361 ; CHECK-2p2-LABEL: test_svrinti_4f16_x_2:
362 ; CHECK-2p2: // %bb.0: // %entry
363 ; CHECK-2p2-NEXT: frinti z0.h, p0/z, z1.h
364 ; CHECK-2p2-NEXT: ret
366 %0 = tail call <vscale x 4 x half> @llvm.aarch64.sve.frinti.nxv4f16(<vscale x 4 x half> poison, <vscale x 4 x i1> %pg, <vscale x 4 x half> %x)
367 ret <vscale x 4 x half> %0
370 define <vscale x 4 x half> @test_svrinti_4f16_z(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x half> %x) {
371 ; CHECK-LABEL: test_svrinti_4f16_z:
372 ; CHECK: // %bb.0: // %entry
373 ; CHECK-NEXT: mov z0.h, #0 // =0x0
374 ; CHECK-NEXT: frinti z0.h, p0/m, z1.h
377 ; CHECK-2p2-LABEL: test_svrinti_4f16_z:
378 ; CHECK-2p2: // %bb.0: // %entry
379 ; CHECK-2p2-NEXT: frinti z0.h, p0/z, z1.h
380 ; CHECK-2p2-NEXT: ret
382 %0 = tail call <vscale x 4 x half> @llvm.aarch64.sve.frinti.nxv4f16(<vscale x 4 x half> zeroinitializer, <vscale x 4 x i1> %pg, <vscale x 4 x half> %x)
383 ret <vscale x 4 x half> %0
386 define <vscale x 2 x half> @test_svrinti_2f16_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x half> %x) {
387 ; CHECK-LABEL: test_svrinti_2f16_x_1:
388 ; CHECK: // %bb.0: // %entry
389 ; CHECK-NEXT: frinti z0.h, p0/m, z0.h
392 ; CHECK-2p2-LABEL: test_svrinti_2f16_x_1:
393 ; CHECK-2p2: // %bb.0: // %entry
394 ; CHECK-2p2-NEXT: frinti z0.h, p0/z, z0.h
395 ; CHECK-2p2-NEXT: ret
397 %0 = tail call <vscale x 2 x half> @llvm.aarch64.sve.frinti.nxv2f16(<vscale x 2 x half> poison, <vscale x 2 x i1> %pg, <vscale x 2 x half> %x)
398 ret <vscale x 2 x half> %0
401 define <vscale x 2 x half> @test_svrinti_2f16_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x half> %x) {
402 ; CHECK-LABEL: test_svrinti_2f16_x_2:
403 ; CHECK: // %bb.0: // %entry
404 ; CHECK-NEXT: movprfx z0, z1
405 ; CHECK-NEXT: frinti z0.h, p0/m, z1.h
408 ; CHECK-2p2-LABEL: test_svrinti_2f16_x_2:
409 ; CHECK-2p2: // %bb.0: // %entry
410 ; CHECK-2p2-NEXT: frinti z0.h, p0/z, z1.h
411 ; CHECK-2p2-NEXT: ret
413 %0 = tail call <vscale x 2 x half> @llvm.aarch64.sve.frinti.nxv2f16(<vscale x 2 x half> poison, <vscale x 2 x i1> %pg, <vscale x 2 x half> %x)
414 ret <vscale x 2 x half> %0
417 define <vscale x 2 x half> @test_svrinti_2f16_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x half> %x) {
418 ; CHECK-LABEL: test_svrinti_2f16_z:
419 ; CHECK: // %bb.0: // %entry
420 ; CHECK-NEXT: mov z0.h, #0 // =0x0
421 ; CHECK-NEXT: frinti z0.h, p0/m, z1.h
424 ; CHECK-2p2-LABEL: test_svrinti_2f16_z:
425 ; CHECK-2p2: // %bb.0: // %entry
426 ; CHECK-2p2-NEXT: frinti z0.h, p0/z, z1.h
427 ; CHECK-2p2-NEXT: ret
429 %0 = tail call <vscale x 2 x half> @llvm.aarch64.sve.frinti.nxv2f16(<vscale x 2 x half> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x half> %x)
430 ret <vscale x 2 x half> %0
433 define <vscale x 2 x float> @test_svrinti_2f32_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x float> %x) {
434 ; CHECK-LABEL: test_svrinti_2f32_x_1:
435 ; CHECK: // %bb.0: // %entry
436 ; CHECK-NEXT: frinti z0.s, p0/m, z0.s
439 ; CHECK-2p2-LABEL: test_svrinti_2f32_x_1:
440 ; CHECK-2p2: // %bb.0: // %entry
441 ; CHECK-2p2-NEXT: frinti z0.s, p0/z, z0.s
442 ; CHECK-2p2-NEXT: ret
444 %0 = tail call <vscale x 2 x float> @llvm.aarch64.sve.frinti.nxv2f32(<vscale x 2 x float> poison, <vscale x 2 x i1> %pg, <vscale x 2 x float> %x)
445 ret <vscale x 2 x float> %0
448 define <vscale x 2 x float> @test_svrinti_2f32_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x float> %x) {
449 ; CHECK-LABEL: test_svrinti_2f32_x_2:
450 ; CHECK: // %bb.0: // %entry
451 ; CHECK-NEXT: movprfx z0, z1
452 ; CHECK-NEXT: frinti z0.s, p0/m, z1.s
455 ; CHECK-2p2-LABEL: test_svrinti_2f32_x_2:
456 ; CHECK-2p2: // %bb.0: // %entry
457 ; CHECK-2p2-NEXT: frinti z0.s, p0/z, z1.s
458 ; CHECK-2p2-NEXT: ret
460 %0 = tail call <vscale x 2 x float> @llvm.aarch64.sve.frinti.nxv2f32(<vscale x 2 x float> poison, <vscale x 2 x i1> %pg, <vscale x 2 x float> %x)
461 ret <vscale x 2 x float> %0
464 define <vscale x 2 x float> @test_svrinti_2f32_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x float> %x) {
465 ; CHECK-LABEL: test_svrinti_2f32_z:
466 ; CHECK: // %bb.0: // %entry
467 ; CHECK-NEXT: mov z0.s, #0 // =0x0
468 ; CHECK-NEXT: frinti z0.s, p0/m, z1.s
471 ; CHECK-2p2-LABEL: test_svrinti_2f32_z:
472 ; CHECK-2p2: // %bb.0: // %entry
473 ; CHECK-2p2-NEXT: frinti z0.s, p0/z, z1.s
474 ; CHECK-2p2-NEXT: ret
476 %0 = tail call <vscale x 2 x float> @llvm.aarch64.sve.frinti.nxv2f32(<vscale x 2 x float> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x float> %x)
477 ret <vscale x 2 x float> %0
480 define <vscale x 4 x float> @test_svrinti_f32_x_1(<vscale x 4 x i1> %pg, <vscale x 4 x float> %x) {
481 ; CHECK-LABEL: test_svrinti_f32_x_1:
482 ; CHECK: // %bb.0: // %entry
483 ; CHECK-NEXT: frinti z0.s, p0/m, z0.s
486 ; CHECK-2p2-LABEL: test_svrinti_f32_x_1:
487 ; CHECK-2p2: // %bb.0: // %entry
488 ; CHECK-2p2-NEXT: frinti z0.s, p0/z, z0.s
489 ; CHECK-2p2-NEXT: ret
491 %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.frinti.nxv4f32(<vscale x 4 x float> poison, <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)
492 ret <vscale x 4 x float> %0
495 define <vscale x 4 x float> @test_svrinti_f32_x_2(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x float> %x) {
496 ; CHECK-LABEL: test_svrinti_f32_x_2:
497 ; CHECK: // %bb.0: // %entry
498 ; CHECK-NEXT: movprfx z0, z1
499 ; CHECK-NEXT: frinti z0.s, p0/m, z1.s
502 ; CHECK-2p2-LABEL: test_svrinti_f32_x_2:
503 ; CHECK-2p2: // %bb.0: // %entry
504 ; CHECK-2p2-NEXT: frinti z0.s, p0/z, z1.s
505 ; CHECK-2p2-NEXT: ret
507 %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.frinti.nxv4f32(<vscale x 4 x float> poison, <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)
508 ret <vscale x 4 x float> %0
511 define <vscale x 4 x float> @test_svrinti_f32_z(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x float> %x) {
512 ; CHECK-LABEL: test_svrinti_f32_z:
513 ; CHECK: // %bb.0: // %entry
514 ; CHECK-NEXT: mov z0.s, #0 // =0x0
515 ; CHECK-NEXT: frinti z0.s, p0/m, z1.s
518 ; CHECK-2p2-LABEL: test_svrinti_f32_z:
519 ; CHECK-2p2: // %bb.0: // %entry
520 ; CHECK-2p2-NEXT: frinti z0.s, p0/z, z1.s
521 ; CHECK-2p2-NEXT: ret
523 %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.frinti.nxv4f32(<vscale x 4 x float> zeroinitializer, <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)
524 ret <vscale x 4 x float> %0
527 define <vscale x 2 x double> @test_svrinti_f64_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x double> %x) {
528 ; CHECK-LABEL: test_svrinti_f64_x_1:
529 ; CHECK: // %bb.0: // %entry
530 ; CHECK-NEXT: frinti z0.d, p0/m, z0.d
533 ; CHECK-2p2-LABEL: test_svrinti_f64_x_1:
534 ; CHECK-2p2: // %bb.0: // %entry
535 ; CHECK-2p2-NEXT: frinti z0.d, p0/z, z0.d
536 ; CHECK-2p2-NEXT: ret
538 %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.frinti.nxv2f64(<vscale x 2 x double> poison, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)
539 ret <vscale x 2 x double> %0
542 define <vscale x 2 x double> @test_svrinti_f64_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x double> %x) {
543 ; CHECK-LABEL: test_svrinti_f64_x_2:
544 ; CHECK: // %bb.0: // %entry
545 ; CHECK-NEXT: movprfx z0, z1
546 ; CHECK-NEXT: frinti z0.d, p0/m, z1.d
549 ; CHECK-2p2-LABEL: test_svrinti_f64_x_2:
550 ; CHECK-2p2: // %bb.0: // %entry
551 ; CHECK-2p2-NEXT: frinti z0.d, p0/z, z1.d
552 ; CHECK-2p2-NEXT: ret
554 %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.frinti.nxv2f64(<vscale x 2 x double> poison, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)
555 ret <vscale x 2 x double> %0
559 define <vscale x 2 x double> @test_svrinti_f64_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x double> %x) {
560 ; CHECK-LABEL: test_svrinti_f64_z:
561 ; CHECK: // %bb.0: // %entry
562 ; CHECK-NEXT: mov z0.d, #0 // =0x0
563 ; CHECK-NEXT: frinti z0.d, p0/m, z1.d
566 ; CHECK-2p2-LABEL: test_svrinti_f64_z:
567 ; CHECK-2p2: // %bb.0: // %entry
568 ; CHECK-2p2-NEXT: frinti z0.d, p0/z, z1.d
569 ; CHECK-2p2-NEXT: ret
571 %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.frinti.nxv2f64(<vscale x 2 x double> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)
572 ret <vscale x 2 x double> %0
576 define <vscale x 8 x half> @test_svrintm_f16_x_1(<vscale x 8 x i1> %pg, <vscale x 8 x half> %x) {
577 ; CHECK-LABEL: test_svrintm_f16_x_1:
578 ; CHECK: // %bb.0: // %entry
579 ; CHECK-NEXT: frintm z0.h, p0/m, z0.h
582 ; CHECK-2p2-LABEL: test_svrintm_f16_x_1:
583 ; CHECK-2p2: // %bb.0: // %entry
584 ; CHECK-2p2-NEXT: frintm z0.h, p0/z, z0.h
585 ; CHECK-2p2-NEXT: ret
587 %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.frintm.nxv8f16(<vscale x 8 x half> poison, <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)
588 ret <vscale x 8 x half> %0
591 define <vscale x 8 x half> @test_svrintm_f16_x_2(<vscale x 8 x i1> %pg, double %z0, <vscale x 8 x half> %x) {
592 ; CHECK-LABEL: test_svrintm_f16_x_2:
593 ; CHECK: // %bb.0: // %entry
594 ; CHECK-NEXT: movprfx z0, z1
595 ; CHECK-NEXT: frintm z0.h, p0/m, z1.h
598 ; CHECK-2p2-LABEL: test_svrintm_f16_x_2:
599 ; CHECK-2p2: // %bb.0: // %entry
600 ; CHECK-2p2-NEXT: frintm z0.h, p0/z, z1.h
601 ; CHECK-2p2-NEXT: ret
603 %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.frintm.nxv8f16(<vscale x 8 x half> poison, <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)
604 ret <vscale x 8 x half> %0
608 define <vscale x 8 x half> @test_svrintm_f16_z(<vscale x 8 x i1> %pg, double %z0, <vscale x 8 x half> %x) {
609 ; CHECK-LABEL: test_svrintm_f16_z:
610 ; CHECK: // %bb.0: // %entry
611 ; CHECK-NEXT: mov z0.h, #0 // =0x0
612 ; CHECK-NEXT: frintm z0.h, p0/m, z1.h
615 ; CHECK-2p2-LABEL: test_svrintm_f16_z:
616 ; CHECK-2p2: // %bb.0: // %entry
617 ; CHECK-2p2-NEXT: frintm z0.h, p0/z, z1.h
618 ; CHECK-2p2-NEXT: ret
620 %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.frintm.nxv8f16(<vscale x 8 x half> zeroinitializer, <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)
621 ret <vscale x 8 x half> %0
624 define <vscale x 4 x half> @test_svrintm_4f16_x_1(<vscale x 4 x i1> %pg, <vscale x 4 x half> %x) {
625 ; CHECK-LABEL: test_svrintm_4f16_x_1:
626 ; CHECK: // %bb.0: // %entry
627 ; CHECK-NEXT: frintm z0.h, p0/m, z0.h
630 ; CHECK-2p2-LABEL: test_svrintm_4f16_x_1:
631 ; CHECK-2p2: // %bb.0: // %entry
632 ; CHECK-2p2-NEXT: frintm z0.h, p0/z, z0.h
633 ; CHECK-2p2-NEXT: ret
635 %0 = tail call <vscale x 4 x half> @llvm.aarch64.sve.frintm.nxv4f16(<vscale x 4 x half> poison, <vscale x 4 x i1> %pg, <vscale x 4 x half> %x)
636 ret <vscale x 4 x half> %0
639 define <vscale x 4 x half> @test_svrintm_4f16_x_2(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x half> %x) {
640 ; CHECK-LABEL: test_svrintm_4f16_x_2:
641 ; CHECK: // %bb.0: // %entry
642 ; CHECK-NEXT: movprfx z0, z1
643 ; CHECK-NEXT: frintm z0.h, p0/m, z1.h
646 ; CHECK-2p2-LABEL: test_svrintm_4f16_x_2:
647 ; CHECK-2p2: // %bb.0: // %entry
648 ; CHECK-2p2-NEXT: frintm z0.h, p0/z, z1.h
649 ; CHECK-2p2-NEXT: ret
651 %0 = tail call <vscale x 4 x half> @llvm.aarch64.sve.frintm.nxv4f16(<vscale x 4 x half> poison, <vscale x 4 x i1> %pg, <vscale x 4 x half> %x)
652 ret <vscale x 4 x half> %0
655 define <vscale x 4 x half> @test_svrintm_4f16_z(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x half> %x) {
656 ; CHECK-LABEL: test_svrintm_4f16_z:
657 ; CHECK: // %bb.0: // %entry
658 ; CHECK-NEXT: mov z0.h, #0 // =0x0
659 ; CHECK-NEXT: frintm z0.h, p0/m, z1.h
662 ; CHECK-2p2-LABEL: test_svrintm_4f16_z:
663 ; CHECK-2p2: // %bb.0: // %entry
664 ; CHECK-2p2-NEXT: frintm z0.h, p0/z, z1.h
665 ; CHECK-2p2-NEXT: ret
667 %0 = tail call <vscale x 4 x half> @llvm.aarch64.sve.frintm.nxv4f16(<vscale x 4 x half> zeroinitializer, <vscale x 4 x i1> %pg, <vscale x 4 x half> %x)
668 ret <vscale x 4 x half> %0
671 define <vscale x 2 x half> @test_svrintm_2f16_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x half> %x) {
672 ; CHECK-LABEL: test_svrintm_2f16_x_1:
673 ; CHECK: // %bb.0: // %entry
674 ; CHECK-NEXT: frintm z0.h, p0/m, z0.h
677 ; CHECK-2p2-LABEL: test_svrintm_2f16_x_1:
678 ; CHECK-2p2: // %bb.0: // %entry
679 ; CHECK-2p2-NEXT: frintm z0.h, p0/z, z0.h
680 ; CHECK-2p2-NEXT: ret
682 %0 = tail call <vscale x 2 x half> @llvm.aarch64.sve.frintm.nxv2f16(<vscale x 2 x half> poison, <vscale x 2 x i1> %pg, <vscale x 2 x half> %x)
683 ret <vscale x 2 x half> %0
686 define <vscale x 2 x half> @test_svrintm_2f16_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x half> %x) {
687 ; CHECK-LABEL: test_svrintm_2f16_x_2:
688 ; CHECK: // %bb.0: // %entry
689 ; CHECK-NEXT: movprfx z0, z1
690 ; CHECK-NEXT: frintm z0.h, p0/m, z1.h
693 ; CHECK-2p2-LABEL: test_svrintm_2f16_x_2:
694 ; CHECK-2p2: // %bb.0: // %entry
695 ; CHECK-2p2-NEXT: frintm z0.h, p0/z, z1.h
696 ; CHECK-2p2-NEXT: ret
698 %0 = tail call <vscale x 2 x half> @llvm.aarch64.sve.frintm.nxv2f16(<vscale x 2 x half> poison, <vscale x 2 x i1> %pg, <vscale x 2 x half> %x)
699 ret <vscale x 2 x half> %0
702 define <vscale x 2 x half> @test_svrintm_2f16_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x half> %x) {
703 ; CHECK-LABEL: test_svrintm_2f16_z:
704 ; CHECK: // %bb.0: // %entry
705 ; CHECK-NEXT: mov z0.h, #0 // =0x0
706 ; CHECK-NEXT: frintm z0.h, p0/m, z1.h
709 ; CHECK-2p2-LABEL: test_svrintm_2f16_z:
710 ; CHECK-2p2: // %bb.0: // %entry
711 ; CHECK-2p2-NEXT: frintm z0.h, p0/z, z1.h
712 ; CHECK-2p2-NEXT: ret
714 %0 = tail call <vscale x 2 x half> @llvm.aarch64.sve.frintm.nxv2f16(<vscale x 2 x half> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x half> %x)
715 ret <vscale x 2 x half> %0
718 define <vscale x 2 x float> @test_svrintm_2f32_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x float> %x) {
719 ; CHECK-LABEL: test_svrintm_2f32_x_1:
720 ; CHECK: // %bb.0: // %entry
721 ; CHECK-NEXT: frintm z0.s, p0/m, z0.s
724 ; CHECK-2p2-LABEL: test_svrintm_2f32_x_1:
725 ; CHECK-2p2: // %bb.0: // %entry
726 ; CHECK-2p2-NEXT: frintm z0.s, p0/z, z0.s
727 ; CHECK-2p2-NEXT: ret
729 %0 = tail call <vscale x 2 x float> @llvm.aarch64.sve.frintm.nxv2f32(<vscale x 2 x float> poison, <vscale x 2 x i1> %pg, <vscale x 2 x float> %x)
730 ret <vscale x 2 x float> %0
733 define <vscale x 2 x float> @test_svrintm_2f32_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x float> %x) {
734 ; CHECK-LABEL: test_svrintm_2f32_x_2:
735 ; CHECK: // %bb.0: // %entry
736 ; CHECK-NEXT: movprfx z0, z1
737 ; CHECK-NEXT: frintm z0.s, p0/m, z1.s
740 ; CHECK-2p2-LABEL: test_svrintm_2f32_x_2:
741 ; CHECK-2p2: // %bb.0: // %entry
742 ; CHECK-2p2-NEXT: frintm z0.s, p0/z, z1.s
743 ; CHECK-2p2-NEXT: ret
745 %0 = tail call <vscale x 2 x float> @llvm.aarch64.sve.frintm.nxv2f32(<vscale x 2 x float> poison, <vscale x 2 x i1> %pg, <vscale x 2 x float> %x)
746 ret <vscale x 2 x float> %0
749 define <vscale x 2 x float> @test_svrintm_2f32_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x float> %x) {
750 ; CHECK-LABEL: test_svrintm_2f32_z:
751 ; CHECK: // %bb.0: // %entry
752 ; CHECK-NEXT: mov z0.s, #0 // =0x0
753 ; CHECK-NEXT: frintm z0.s, p0/m, z1.s
756 ; CHECK-2p2-LABEL: test_svrintm_2f32_z:
757 ; CHECK-2p2: // %bb.0: // %entry
758 ; CHECK-2p2-NEXT: frintm z0.s, p0/z, z1.s
759 ; CHECK-2p2-NEXT: ret
761 %0 = tail call <vscale x 2 x float> @llvm.aarch64.sve.frintm.nxv2f32(<vscale x 2 x float> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x float> %x)
762 ret <vscale x 2 x float> %0
765 define <vscale x 4 x float> @test_svrintm_f32_x_1(<vscale x 4 x i1> %pg, <vscale x 4 x float> %x) {
766 ; CHECK-LABEL: test_svrintm_f32_x_1:
767 ; CHECK: // %bb.0: // %entry
768 ; CHECK-NEXT: frintm z0.s, p0/m, z0.s
771 ; CHECK-2p2-LABEL: test_svrintm_f32_x_1:
772 ; CHECK-2p2: // %bb.0: // %entry
773 ; CHECK-2p2-NEXT: frintm z0.s, p0/z, z0.s
774 ; CHECK-2p2-NEXT: ret
776 %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.frintm.nxv4f32(<vscale x 4 x float> poison, <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)
777 ret <vscale x 4 x float> %0
780 define <vscale x 4 x float> @test_svrintm_f32_x_2(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x float> %x) {
781 ; CHECK-LABEL: test_svrintm_f32_x_2:
782 ; CHECK: // %bb.0: // %entry
783 ; CHECK-NEXT: movprfx z0, z1
784 ; CHECK-NEXT: frintm z0.s, p0/m, z1.s
787 ; CHECK-2p2-LABEL: test_svrintm_f32_x_2:
788 ; CHECK-2p2: // %bb.0: // %entry
789 ; CHECK-2p2-NEXT: frintm z0.s, p0/z, z1.s
790 ; CHECK-2p2-NEXT: ret
792 %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.frintm.nxv4f32(<vscale x 4 x float> poison, <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)
793 ret <vscale x 4 x float> %0
796 define <vscale x 4 x float> @test_svrintm_f32_z(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x float> %x) {
797 ; CHECK-LABEL: test_svrintm_f32_z:
798 ; CHECK: // %bb.0: // %entry
799 ; CHECK-NEXT: mov z0.s, #0 // =0x0
800 ; CHECK-NEXT: frintm z0.s, p0/m, z1.s
803 ; CHECK-2p2-LABEL: test_svrintm_f32_z:
804 ; CHECK-2p2: // %bb.0: // %entry
805 ; CHECK-2p2-NEXT: frintm z0.s, p0/z, z1.s
806 ; CHECK-2p2-NEXT: ret
808 %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.frintm.nxv4f32(<vscale x 4 x float> zeroinitializer, <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)
809 ret <vscale x 4 x float> %0
812 define <vscale x 2 x double> @test_svrintm_f64_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x double> %x) {
813 ; CHECK-LABEL: test_svrintm_f64_x_1:
814 ; CHECK: // %bb.0: // %entry
815 ; CHECK-NEXT: frintm z0.d, p0/m, z0.d
818 ; CHECK-2p2-LABEL: test_svrintm_f64_x_1:
819 ; CHECK-2p2: // %bb.0: // %entry
820 ; CHECK-2p2-NEXT: frintm z0.d, p0/z, z0.d
821 ; CHECK-2p2-NEXT: ret
823 %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.frintm.nxv2f64(<vscale x 2 x double> poison, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)
824 ret <vscale x 2 x double> %0
827 define <vscale x 2 x double> @test_svrintm_f64_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x double> %x) {
828 ; CHECK-LABEL: test_svrintm_f64_x_2:
829 ; CHECK: // %bb.0: // %entry
830 ; CHECK-NEXT: movprfx z0, z1
831 ; CHECK-NEXT: frintm z0.d, p0/m, z1.d
834 ; CHECK-2p2-LABEL: test_svrintm_f64_x_2:
835 ; CHECK-2p2: // %bb.0: // %entry
836 ; CHECK-2p2-NEXT: frintm z0.d, p0/z, z1.d
837 ; CHECK-2p2-NEXT: ret
839 %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.frintm.nxv2f64(<vscale x 2 x double> poison, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)
840 ret <vscale x 2 x double> %0
843 define <vscale x 2 x double> @test_svrintm_f64_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x double> %x) {
844 ; CHECK-LABEL: test_svrintm_f64_z:
845 ; CHECK: // %bb.0: // %entry
846 ; CHECK-NEXT: mov z0.d, #0 // =0x0
847 ; CHECK-NEXT: frintm z0.d, p0/m, z1.d
850 ; CHECK-2p2-LABEL: test_svrintm_f64_z:
851 ; CHECK-2p2: // %bb.0: // %entry
852 ; CHECK-2p2-NEXT: frintm z0.d, p0/z, z1.d
853 ; CHECK-2p2-NEXT: ret
855 %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.frintm.nxv2f64(<vscale x 2 x double> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)
856 ret <vscale x 2 x double> %0
859 define <vscale x 8 x half> @test_svrintn_f16_x_1(<vscale x 8 x i1> %pg, <vscale x 8 x half> %x) {
860 ; CHECK-LABEL: test_svrintn_f16_x_1:
861 ; CHECK: // %bb.0: // %entry
862 ; CHECK-NEXT: frintn z0.h, p0/m, z0.h
865 ; CHECK-2p2-LABEL: test_svrintn_f16_x_1:
866 ; CHECK-2p2: // %bb.0: // %entry
867 ; CHECK-2p2-NEXT: frintn z0.h, p0/z, z0.h
868 ; CHECK-2p2-NEXT: ret
870 %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.frintn.nxv8f16(<vscale x 8 x half> poison, <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)
871 ret <vscale x 8 x half> %0
874 define <vscale x 8 x half> @test_svrintn_f16_x_2(<vscale x 8 x i1> %pg, double %z0, <vscale x 8 x half> %x) {
875 ; CHECK-LABEL: test_svrintn_f16_x_2:
876 ; CHECK: // %bb.0: // %entry
877 ; CHECK-NEXT: movprfx z0, z1
878 ; CHECK-NEXT: frintn z0.h, p0/m, z1.h
881 ; CHECK-2p2-LABEL: test_svrintn_f16_x_2:
882 ; CHECK-2p2: // %bb.0: // %entry
883 ; CHECK-2p2-NEXT: frintn z0.h, p0/z, z1.h
884 ; CHECK-2p2-NEXT: ret
886 %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.frintn.nxv8f16(<vscale x 8 x half> poison, <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)
887 ret <vscale x 8 x half> %0
890 define <vscale x 8 x half> @test_svrintn_f16_z(<vscale x 8 x i1> %pg, double %z0, <vscale x 8 x half> %x) {
891 ; CHECK-LABEL: test_svrintn_f16_z:
892 ; CHECK: // %bb.0: // %entry
893 ; CHECK-NEXT: mov z0.h, #0 // =0x0
894 ; CHECK-NEXT: frintn z0.h, p0/m, z1.h
897 ; CHECK-2p2-LABEL: test_svrintn_f16_z:
898 ; CHECK-2p2: // %bb.0: // %entry
899 ; CHECK-2p2-NEXT: frintn z0.h, p0/z, z1.h
900 ; CHECK-2p2-NEXT: ret
902 %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.frintn.nxv8f16(<vscale x 8 x half> zeroinitializer, <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)
903 ret <vscale x 8 x half> %0
906 define <vscale x 4 x half> @test_svrintn_4f16_x_1(<vscale x 4 x i1> %pg, <vscale x 4 x half> %x) {
907 ; CHECK-LABEL: test_svrintn_4f16_x_1:
908 ; CHECK: // %bb.0: // %entry
909 ; CHECK-NEXT: frintn z0.h, p0/m, z0.h
912 ; CHECK-2p2-LABEL: test_svrintn_4f16_x_1:
913 ; CHECK-2p2: // %bb.0: // %entry
914 ; CHECK-2p2-NEXT: frintn z0.h, p0/z, z0.h
915 ; CHECK-2p2-NEXT: ret
917 %0 = tail call <vscale x 4 x half> @llvm.aarch64.sve.frintn.nxv4f16(<vscale x 4 x half> poison, <vscale x 4 x i1> %pg, <vscale x 4 x half> %x)
918 ret <vscale x 4 x half> %0
921 define <vscale x 4 x half> @test_svrintn_4f16_x_2(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x half> %x) {
922 ; CHECK-LABEL: test_svrintn_4f16_x_2:
923 ; CHECK: // %bb.0: // %entry
924 ; CHECK-NEXT: movprfx z0, z1
925 ; CHECK-NEXT: frintn z0.h, p0/m, z1.h
928 ; CHECK-2p2-LABEL: test_svrintn_4f16_x_2:
929 ; CHECK-2p2: // %bb.0: // %entry
930 ; CHECK-2p2-NEXT: frintn z0.h, p0/z, z1.h
931 ; CHECK-2p2-NEXT: ret
933 %0 = tail call <vscale x 4 x half> @llvm.aarch64.sve.frintn.nxv4f16(<vscale x 4 x half> poison, <vscale x 4 x i1> %pg, <vscale x 4 x half> %x)
934 ret <vscale x 4 x half> %0
937 define <vscale x 4 x half> @test_svrintn_4f16_z(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x half> %x) {
938 ; CHECK-LABEL: test_svrintn_4f16_z:
939 ; CHECK: // %bb.0: // %entry
940 ; CHECK-NEXT: mov z0.h, #0 // =0x0
941 ; CHECK-NEXT: frintn z0.h, p0/m, z1.h
944 ; CHECK-2p2-LABEL: test_svrintn_4f16_z:
945 ; CHECK-2p2: // %bb.0: // %entry
946 ; CHECK-2p2-NEXT: frintn z0.h, p0/z, z1.h
947 ; CHECK-2p2-NEXT: ret
949 %0 = tail call <vscale x 4 x half> @llvm.aarch64.sve.frintn.nxv4f16(<vscale x 4 x half> zeroinitializer, <vscale x 4 x i1> %pg, <vscale x 4 x half> %x)
950 ret <vscale x 4 x half> %0
953 define <vscale x 2 x half> @test_svrintn_2f16_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x half> %x) {
954 ; CHECK-LABEL: test_svrintn_2f16_x_1:
955 ; CHECK: // %bb.0: // %entry
956 ; CHECK-NEXT: frintn z0.h, p0/m, z0.h
959 ; CHECK-2p2-LABEL: test_svrintn_2f16_x_1:
960 ; CHECK-2p2: // %bb.0: // %entry
961 ; CHECK-2p2-NEXT: frintn z0.h, p0/z, z0.h
962 ; CHECK-2p2-NEXT: ret
964 %0 = tail call <vscale x 2 x half> @llvm.aarch64.sve.frintn.nxv2f16(<vscale x 2 x half> poison, <vscale x 2 x i1> %pg, <vscale x 2 x half> %x)
965 ret <vscale x 2 x half> %0
968 define <vscale x 2 x half> @test_svrintn_2f16_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x half> %x) {
969 ; CHECK-LABEL: test_svrintn_2f16_x_2:
970 ; CHECK: // %bb.0: // %entry
971 ; CHECK-NEXT: movprfx z0, z1
972 ; CHECK-NEXT: frintn z0.h, p0/m, z1.h
975 ; CHECK-2p2-LABEL: test_svrintn_2f16_x_2:
976 ; CHECK-2p2: // %bb.0: // %entry
977 ; CHECK-2p2-NEXT: frintn z0.h, p0/z, z1.h
978 ; CHECK-2p2-NEXT: ret
980 %0 = tail call <vscale x 2 x half> @llvm.aarch64.sve.frintn.nxv2f16(<vscale x 2 x half> poison, <vscale x 2 x i1> %pg, <vscale x 2 x half> %x)
981 ret <vscale x 2 x half> %0
984 define <vscale x 2 x half> @test_svrintn_2f16_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x half> %x) {
985 ; CHECK-LABEL: test_svrintn_2f16_z:
986 ; CHECK: // %bb.0: // %entry
987 ; CHECK-NEXT: mov z0.h, #0 // =0x0
988 ; CHECK-NEXT: frintn z0.h, p0/m, z1.h
991 ; CHECK-2p2-LABEL: test_svrintn_2f16_z:
992 ; CHECK-2p2: // %bb.0: // %entry
993 ; CHECK-2p2-NEXT: frintn z0.h, p0/z, z1.h
994 ; CHECK-2p2-NEXT: ret
996 %0 = tail call <vscale x 2 x half> @llvm.aarch64.sve.frintn.nxv2f16(<vscale x 2 x half> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x half> %x)
997 ret <vscale x 2 x half> %0
1000 define <vscale x 2 x float> @test_svrintn_2f32_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x float> %x) {
1001 ; CHECK-LABEL: test_svrintn_2f32_x_1:
1002 ; CHECK: // %bb.0: // %entry
1003 ; CHECK-NEXT: frintn z0.s, p0/m, z0.s
1006 ; CHECK-2p2-LABEL: test_svrintn_2f32_x_1:
1007 ; CHECK-2p2: // %bb.0: // %entry
1008 ; CHECK-2p2-NEXT: frintn z0.s, p0/z, z0.s
1009 ; CHECK-2p2-NEXT: ret
1011 %0 = tail call <vscale x 2 x float> @llvm.aarch64.sve.frintn.nxv2f32(<vscale x 2 x float> poison, <vscale x 2 x i1> %pg, <vscale x 2 x float> %x)
1012 ret <vscale x 2 x float> %0
1015 define <vscale x 2 x float> @test_svrintn_2f32_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x float> %x) {
1016 ; CHECK-LABEL: test_svrintn_2f32_x_2:
1017 ; CHECK: // %bb.0: // %entry
1018 ; CHECK-NEXT: movprfx z0, z1
1019 ; CHECK-NEXT: frintn z0.s, p0/m, z1.s
1022 ; CHECK-2p2-LABEL: test_svrintn_2f32_x_2:
1023 ; CHECK-2p2: // %bb.0: // %entry
1024 ; CHECK-2p2-NEXT: frintn z0.s, p0/z, z1.s
1025 ; CHECK-2p2-NEXT: ret
1027 %0 = tail call <vscale x 2 x float> @llvm.aarch64.sve.frintn.nxv2f32(<vscale x 2 x float> poison, <vscale x 2 x i1> %pg, <vscale x 2 x float> %x)
1028 ret <vscale x 2 x float> %0
1031 define <vscale x 2 x float> @test_svrintn_2f32_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x float> %x) {
1032 ; CHECK-LABEL: test_svrintn_2f32_z:
1033 ; CHECK: // %bb.0: // %entry
1034 ; CHECK-NEXT: mov z0.s, #0 // =0x0
1035 ; CHECK-NEXT: frintn z0.s, p0/m, z1.s
1038 ; CHECK-2p2-LABEL: test_svrintn_2f32_z:
1039 ; CHECK-2p2: // %bb.0: // %entry
1040 ; CHECK-2p2-NEXT: frintn z0.s, p0/z, z1.s
1041 ; CHECK-2p2-NEXT: ret
1043 %0 = tail call <vscale x 2 x float> @llvm.aarch64.sve.frintn.nxv2f32(<vscale x 2 x float> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x float> %x)
1044 ret <vscale x 2 x float> %0
1047 define <vscale x 4 x float> @test_svrintn_f32_x_1(<vscale x 4 x i1> %pg, <vscale x 4 x float> %x) {
1048 ; CHECK-LABEL: test_svrintn_f32_x_1:
1049 ; CHECK: // %bb.0: // %entry
1050 ; CHECK-NEXT: frintn z0.s, p0/m, z0.s
1053 ; CHECK-2p2-LABEL: test_svrintn_f32_x_1:
1054 ; CHECK-2p2: // %bb.0: // %entry
1055 ; CHECK-2p2-NEXT: frintn z0.s, p0/z, z0.s
1056 ; CHECK-2p2-NEXT: ret
1058 %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.frintn.nxv4f32(<vscale x 4 x float> poison, <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)
1059 ret <vscale x 4 x float> %0
1062 define <vscale x 4 x float> @test_svrintn_f32_x_2(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x float> %x) {
1063 ; CHECK-LABEL: test_svrintn_f32_x_2:
1064 ; CHECK: // %bb.0: // %entry
1065 ; CHECK-NEXT: movprfx z0, z1
1066 ; CHECK-NEXT: frintn z0.s, p0/m, z1.s
1069 ; CHECK-2p2-LABEL: test_svrintn_f32_x_2:
1070 ; CHECK-2p2: // %bb.0: // %entry
1071 ; CHECK-2p2-NEXT: frintn z0.s, p0/z, z1.s
1072 ; CHECK-2p2-NEXT: ret
1074 %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.frintn.nxv4f32(<vscale x 4 x float> poison, <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)
1075 ret <vscale x 4 x float> %0
1078 define <vscale x 4 x float> @test_svrintn_f32_z(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x float> %x) {
1079 ; CHECK-LABEL: test_svrintn_f32_z:
1080 ; CHECK: // %bb.0: // %entry
1081 ; CHECK-NEXT: mov z0.s, #0 // =0x0
1082 ; CHECK-NEXT: frintn z0.s, p0/m, z1.s
1085 ; CHECK-2p2-LABEL: test_svrintn_f32_z:
1086 ; CHECK-2p2: // %bb.0: // %entry
1087 ; CHECK-2p2-NEXT: frintn z0.s, p0/z, z1.s
1088 ; CHECK-2p2-NEXT: ret
1090 %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.frintn.nxv4f32(<vscale x 4 x float> zeroinitializer, <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)
1091 ret <vscale x 4 x float> %0
1094 define <vscale x 2 x double> @test_svrintn_f64_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x double> %x) {
1095 ; CHECK-LABEL: test_svrintn_f64_x_1:
1096 ; CHECK: // %bb.0: // %entry
1097 ; CHECK-NEXT: frintn z0.d, p0/m, z0.d
1100 ; CHECK-2p2-LABEL: test_svrintn_f64_x_1:
1101 ; CHECK-2p2: // %bb.0: // %entry
1102 ; CHECK-2p2-NEXT: frintn z0.d, p0/z, z0.d
1103 ; CHECK-2p2-NEXT: ret
1105 %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.frintn.nxv2f64(<vscale x 2 x double> poison, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)
1106 ret <vscale x 2 x double> %0
1109 define <vscale x 2 x double> @test_svrintn_f64_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x double> %x) {
1110 ; CHECK-LABEL: test_svrintn_f64_x_2:
1111 ; CHECK: // %bb.0: // %entry
1112 ; CHECK-NEXT: movprfx z0, z1
1113 ; CHECK-NEXT: frintn z0.d, p0/m, z1.d
1116 ; CHECK-2p2-LABEL: test_svrintn_f64_x_2:
1117 ; CHECK-2p2: // %bb.0: // %entry
1118 ; CHECK-2p2-NEXT: frintn z0.d, p0/z, z1.d
1119 ; CHECK-2p2-NEXT: ret
1121 %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.frintn.nxv2f64(<vscale x 2 x double> poison, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)
1122 ret <vscale x 2 x double> %0
1125 define <vscale x 2 x double> @test_svrintn_f64_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x double> %x) {
1126 ; CHECK-LABEL: test_svrintn_f64_z:
1127 ; CHECK: // %bb.0: // %entry
1128 ; CHECK-NEXT: mov z0.d, #0 // =0x0
1129 ; CHECK-NEXT: frintn z0.d, p0/m, z1.d
1132 ; CHECK-2p2-LABEL: test_svrintn_f64_z:
1133 ; CHECK-2p2: // %bb.0: // %entry
1134 ; CHECK-2p2-NEXT: frintn z0.d, p0/z, z1.d
1135 ; CHECK-2p2-NEXT: ret
1137 %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.frintn.nxv2f64(<vscale x 2 x double> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)
1138 ret <vscale x 2 x double> %0
1141 define <vscale x 8 x half> @test_svrintp_f16_x_1(<vscale x 8 x i1> %pg, <vscale x 8 x half> %x) {
1142 ; CHECK-LABEL: test_svrintp_f16_x_1:
1143 ; CHECK: // %bb.0: // %entry
1144 ; CHECK-NEXT: frintp z0.h, p0/m, z0.h
1147 ; CHECK-2p2-LABEL: test_svrintp_f16_x_1:
1148 ; CHECK-2p2: // %bb.0: // %entry
1149 ; CHECK-2p2-NEXT: frintp z0.h, p0/z, z0.h
1150 ; CHECK-2p2-NEXT: ret
1152 %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.frintp.nxv8f16(<vscale x 8 x half> poison, <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)
1153 ret <vscale x 8 x half> %0
1156 define <vscale x 8 x half> @test_svrintp_f16_x_2(<vscale x 8 x i1> %pg, double %z0, <vscale x 8 x half> %x) {
1157 ; CHECK-LABEL: test_svrintp_f16_x_2:
1158 ; CHECK: // %bb.0: // %entry
1159 ; CHECK-NEXT: movprfx z0, z1
1160 ; CHECK-NEXT: frintp z0.h, p0/m, z1.h
1163 ; CHECK-2p2-LABEL: test_svrintp_f16_x_2:
1164 ; CHECK-2p2: // %bb.0: // %entry
1165 ; CHECK-2p2-NEXT: frintp z0.h, p0/z, z1.h
1166 ; CHECK-2p2-NEXT: ret
1168 %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.frintp.nxv8f16(<vscale x 8 x half> poison, <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)
1169 ret <vscale x 8 x half> %0
1172 define <vscale x 8 x half> @test_svrintp_f16_z(<vscale x 8 x i1> %pg, double %z0, <vscale x 8 x half> %x) {
1173 ; CHECK-LABEL: test_svrintp_f16_z:
1174 ; CHECK: // %bb.0: // %entry
1175 ; CHECK-NEXT: mov z0.h, #0 // =0x0
1176 ; CHECK-NEXT: frintp z0.h, p0/m, z1.h
1179 ; CHECK-2p2-LABEL: test_svrintp_f16_z:
1180 ; CHECK-2p2: // %bb.0: // %entry
1181 ; CHECK-2p2-NEXT: frintp z0.h, p0/z, z1.h
1182 ; CHECK-2p2-NEXT: ret
1184 %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.frintp.nxv8f16(<vscale x 8 x half> zeroinitializer, <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)
1185 ret <vscale x 8 x half> %0
1188 define <vscale x 4 x half> @test_svrintp_4f16_x_1(<vscale x 4 x i1> %pg, <vscale x 4 x half> %x) {
1189 ; CHECK-LABEL: test_svrintp_4f16_x_1:
1190 ; CHECK: // %bb.0: // %entry
1191 ; CHECK-NEXT: frintp z0.h, p0/m, z0.h
1194 ; CHECK-2p2-LABEL: test_svrintp_4f16_x_1:
1195 ; CHECK-2p2: // %bb.0: // %entry
1196 ; CHECK-2p2-NEXT: frintp z0.h, p0/z, z0.h
1197 ; CHECK-2p2-NEXT: ret
1199 %0 = tail call <vscale x 4 x half> @llvm.aarch64.sve.frintp.nxv4f16(<vscale x 4 x half> poison, <vscale x 4 x i1> %pg, <vscale x 4 x half> %x)
1200 ret <vscale x 4 x half> %0
1203 define <vscale x 4 x half> @test_svrintp_4f16_x_2(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x half> %x) {
1204 ; CHECK-LABEL: test_svrintp_4f16_x_2:
1205 ; CHECK: // %bb.0: // %entry
1206 ; CHECK-NEXT: movprfx z0, z1
1207 ; CHECK-NEXT: frintp z0.h, p0/m, z1.h
1210 ; CHECK-2p2-LABEL: test_svrintp_4f16_x_2:
1211 ; CHECK-2p2: // %bb.0: // %entry
1212 ; CHECK-2p2-NEXT: frintp z0.h, p0/z, z1.h
1213 ; CHECK-2p2-NEXT: ret
1215 %0 = tail call <vscale x 4 x half> @llvm.aarch64.sve.frintp.nxv4f16(<vscale x 4 x half> poison, <vscale x 4 x i1> %pg, <vscale x 4 x half> %x)
1216 ret <vscale x 4 x half> %0
1219 define <vscale x 4 x half> @test_svrintp_4f16_z(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x half> %x) {
1220 ; CHECK-LABEL: test_svrintp_4f16_z:
1221 ; CHECK: // %bb.0: // %entry
1222 ; CHECK-NEXT: mov z0.h, #0 // =0x0
1223 ; CHECK-NEXT: frintp z0.h, p0/m, z1.h
1226 ; CHECK-2p2-LABEL: test_svrintp_4f16_z:
1227 ; CHECK-2p2: // %bb.0: // %entry
1228 ; CHECK-2p2-NEXT: frintp z0.h, p0/z, z1.h
1229 ; CHECK-2p2-NEXT: ret
1231 %0 = tail call <vscale x 4 x half> @llvm.aarch64.sve.frintp.nxv4f16(<vscale x 4 x half> zeroinitializer, <vscale x 4 x i1> %pg, <vscale x 4 x half> %x)
1232 ret <vscale x 4 x half> %0
1235 define <vscale x 2 x half> @test_svrintp_2f16_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x half> %x) {
1236 ; CHECK-LABEL: test_svrintp_2f16_x_1:
1237 ; CHECK: // %bb.0: // %entry
1238 ; CHECK-NEXT: frintp z0.h, p0/m, z0.h
1241 ; CHECK-2p2-LABEL: test_svrintp_2f16_x_1:
1242 ; CHECK-2p2: // %bb.0: // %entry
1243 ; CHECK-2p2-NEXT: frintp z0.h, p0/z, z0.h
1244 ; CHECK-2p2-NEXT: ret
1246 %0 = tail call <vscale x 2 x half> @llvm.aarch64.sve.frintp.nxv2f16(<vscale x 2 x half> poison, <vscale x 2 x i1> %pg, <vscale x 2 x half> %x)
1247 ret <vscale x 2 x half> %0
1250 define <vscale x 2 x half> @test_svrintp_2f16_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x half> %x) {
1251 ; CHECK-LABEL: test_svrintp_2f16_x_2:
1252 ; CHECK: // %bb.0: // %entry
1253 ; CHECK-NEXT: movprfx z0, z1
1254 ; CHECK-NEXT: frintp z0.h, p0/m, z1.h
1257 ; CHECK-2p2-LABEL: test_svrintp_2f16_x_2:
1258 ; CHECK-2p2: // %bb.0: // %entry
1259 ; CHECK-2p2-NEXT: frintp z0.h, p0/z, z1.h
1260 ; CHECK-2p2-NEXT: ret
1262 %0 = tail call <vscale x 2 x half> @llvm.aarch64.sve.frintp.nxv2f16(<vscale x 2 x half> poison, <vscale x 2 x i1> %pg, <vscale x 2 x half> %x)
1263 ret <vscale x 2 x half> %0
1266 define <vscale x 2 x half> @test_svrintp_2f16_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x half> %x) {
1267 ; CHECK-LABEL: test_svrintp_2f16_z:
1268 ; CHECK: // %bb.0: // %entry
1269 ; CHECK-NEXT: mov z0.h, #0 // =0x0
1270 ; CHECK-NEXT: frintp z0.h, p0/m, z1.h
1273 ; CHECK-2p2-LABEL: test_svrintp_2f16_z:
1274 ; CHECK-2p2: // %bb.0: // %entry
1275 ; CHECK-2p2-NEXT: frintp z0.h, p0/z, z1.h
1276 ; CHECK-2p2-NEXT: ret
1278 %0 = tail call <vscale x 2 x half> @llvm.aarch64.sve.frintp.nxv2f16(<vscale x 2 x half> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x half> %x)
1279 ret <vscale x 2 x half> %0
1282 define <vscale x 2 x float> @test_svrintp_2f32_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x float> %x) {
1283 ; CHECK-LABEL: test_svrintp_2f32_x_1:
1284 ; CHECK: // %bb.0: // %entry
1285 ; CHECK-NEXT: frintp z0.s, p0/m, z0.s
1288 ; CHECK-2p2-LABEL: test_svrintp_2f32_x_1:
1289 ; CHECK-2p2: // %bb.0: // %entry
1290 ; CHECK-2p2-NEXT: frintp z0.s, p0/z, z0.s
1291 ; CHECK-2p2-NEXT: ret
1293 %0 = tail call <vscale x 2 x float> @llvm.aarch64.sve.frintp.nxv2f32(<vscale x 2 x float> poison, <vscale x 2 x i1> %pg, <vscale x 2 x float> %x)
1294 ret <vscale x 2 x float> %0
1297 define <vscale x 2 x float> @test_svrintp_2f32_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x float> %x) {
1298 ; CHECK-LABEL: test_svrintp_2f32_x_2:
1299 ; CHECK: // %bb.0: // %entry
1300 ; CHECK-NEXT: movprfx z0, z1
1301 ; CHECK-NEXT: frintp z0.s, p0/m, z1.s
1304 ; CHECK-2p2-LABEL: test_svrintp_2f32_x_2:
1305 ; CHECK-2p2: // %bb.0: // %entry
1306 ; CHECK-2p2-NEXT: frintp z0.s, p0/z, z1.s
1307 ; CHECK-2p2-NEXT: ret
1309 %0 = tail call <vscale x 2 x float> @llvm.aarch64.sve.frintp.nxv2f32(<vscale x 2 x float> poison, <vscale x 2 x i1> %pg, <vscale x 2 x float> %x)
1310 ret <vscale x 2 x float> %0
1313 define <vscale x 2 x float> @test_svrintp_2f32_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x float> %x) {
1314 ; CHECK-LABEL: test_svrintp_2f32_z:
1315 ; CHECK: // %bb.0: // %entry
1316 ; CHECK-NEXT: mov z0.s, #0 // =0x0
1317 ; CHECK-NEXT: frintp z0.s, p0/m, z1.s
1320 ; CHECK-2p2-LABEL: test_svrintp_2f32_z:
1321 ; CHECK-2p2: // %bb.0: // %entry
1322 ; CHECK-2p2-NEXT: frintp z0.s, p0/z, z1.s
1323 ; CHECK-2p2-NEXT: ret
1325 %0 = tail call <vscale x 2 x float> @llvm.aarch64.sve.frintp.nxv2f32(<vscale x 2 x float> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x float> %x)
1326 ret <vscale x 2 x float> %0
1329 define <vscale x 4 x float> @test_svrintp_f32_x_1(<vscale x 4 x i1> %pg, <vscale x 4 x float> %x) {
1330 ; CHECK-LABEL: test_svrintp_f32_x_1:
1331 ; CHECK: // %bb.0: // %entry
1332 ; CHECK-NEXT: frintp z0.s, p0/m, z0.s
1335 ; CHECK-2p2-LABEL: test_svrintp_f32_x_1:
1336 ; CHECK-2p2: // %bb.0: // %entry
1337 ; CHECK-2p2-NEXT: frintp z0.s, p0/z, z0.s
1338 ; CHECK-2p2-NEXT: ret
1340 %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.frintp.nxv4f32(<vscale x 4 x float> poison, <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)
1341 ret <vscale x 4 x float> %0
1344 define <vscale x 4 x float> @test_svrintp_f32_x_2(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x float> %x) {
1345 ; CHECK-LABEL: test_svrintp_f32_x_2:
1346 ; CHECK: // %bb.0: // %entry
1347 ; CHECK-NEXT: movprfx z0, z1
1348 ; CHECK-NEXT: frintp z0.s, p0/m, z1.s
1351 ; CHECK-2p2-LABEL: test_svrintp_f32_x_2:
1352 ; CHECK-2p2: // %bb.0: // %entry
1353 ; CHECK-2p2-NEXT: frintp z0.s, p0/z, z1.s
1354 ; CHECK-2p2-NEXT: ret
1356 %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.frintp.nxv4f32(<vscale x 4 x float> poison, <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)
1357 ret <vscale x 4 x float> %0
1360 define <vscale x 4 x float> @test_svrintp_f32_z(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x float> %x) {
1361 ; CHECK-LABEL: test_svrintp_f32_z:
1362 ; CHECK: // %bb.0: // %entry
1363 ; CHECK-NEXT: mov z0.s, #0 // =0x0
1364 ; CHECK-NEXT: frintp z0.s, p0/m, z1.s
1367 ; CHECK-2p2-LABEL: test_svrintp_f32_z:
1368 ; CHECK-2p2: // %bb.0: // %entry
1369 ; CHECK-2p2-NEXT: frintp z0.s, p0/z, z1.s
1370 ; CHECK-2p2-NEXT: ret
1372 %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.frintp.nxv4f32(<vscale x 4 x float> zeroinitializer, <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)
1373 ret <vscale x 4 x float> %0
1376 define <vscale x 2 x double> @test_svrintp_f64_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x double> %x) {
1377 ; CHECK-LABEL: test_svrintp_f64_x_1:
1378 ; CHECK: // %bb.0: // %entry
1379 ; CHECK-NEXT: frintp z0.d, p0/m, z0.d
1382 ; CHECK-2p2-LABEL: test_svrintp_f64_x_1:
1383 ; CHECK-2p2: // %bb.0: // %entry
1384 ; CHECK-2p2-NEXT: frintp z0.d, p0/z, z0.d
1385 ; CHECK-2p2-NEXT: ret
1387 %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.frintp.nxv2f64(<vscale x 2 x double> poison, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)
1388 ret <vscale x 2 x double> %0
1391 define <vscale x 2 x double> @test_svrintp_f64_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x double> %x) {
1392 ; CHECK-LABEL: test_svrintp_f64_x_2:
1393 ; CHECK: // %bb.0: // %entry
1394 ; CHECK-NEXT: movprfx z0, z1
1395 ; CHECK-NEXT: frintp z0.d, p0/m, z1.d
1398 ; CHECK-2p2-LABEL: test_svrintp_f64_x_2:
1399 ; CHECK-2p2: // %bb.0: // %entry
1400 ; CHECK-2p2-NEXT: frintp z0.d, p0/z, z1.d
1401 ; CHECK-2p2-NEXT: ret
1403 %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.frintp.nxv2f64(<vscale x 2 x double> poison, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)
1404 ret <vscale x 2 x double> %0
1408 define <vscale x 2 x double> @test_svrintp_f64_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x double> %x) {
1409 ; CHECK-LABEL: test_svrintp_f64_z:
1410 ; CHECK: // %bb.0: // %entry
1411 ; CHECK-NEXT: mov z0.d, #0 // =0x0
1412 ; CHECK-NEXT: frintp z0.d, p0/m, z1.d
1415 ; CHECK-2p2-LABEL: test_svrintp_f64_z:
1416 ; CHECK-2p2: // %bb.0: // %entry
1417 ; CHECK-2p2-NEXT: frintp z0.d, p0/z, z1.d
1418 ; CHECK-2p2-NEXT: ret
1420 %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.frintp.nxv2f64(<vscale x 2 x double> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)
1421 ret <vscale x 2 x double> %0
1424 define <vscale x 8 x half> @test_svrintx_f16_x_1(<vscale x 8 x i1> %pg, <vscale x 8 x half> %x) {
1425 ; CHECK-LABEL: test_svrintx_f16_x_1:
1426 ; CHECK: // %bb.0: // %entry
1427 ; CHECK-NEXT: frintx z0.h, p0/m, z0.h
1430 ; CHECK-2p2-LABEL: test_svrintx_f16_x_1:
1431 ; CHECK-2p2: // %bb.0: // %entry
1432 ; CHECK-2p2-NEXT: frintx z0.h, p0/z, z0.h
1433 ; CHECK-2p2-NEXT: ret
1435 %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.frintx.nxv8f16(<vscale x 8 x half> poison, <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)
1436 ret <vscale x 8 x half> %0
1439 define <vscale x 8 x half> @test_svrintx_f16_x_2(<vscale x 8 x i1> %pg, double %z0, <vscale x 8 x half> %x) {
1440 ; CHECK-LABEL: test_svrintx_f16_x_2:
1441 ; CHECK: // %bb.0: // %entry
1442 ; CHECK-NEXT: movprfx z0, z1
1443 ; CHECK-NEXT: frintx z0.h, p0/m, z1.h
1446 ; CHECK-2p2-LABEL: test_svrintx_f16_x_2:
1447 ; CHECK-2p2: // %bb.0: // %entry
1448 ; CHECK-2p2-NEXT: frintx z0.h, p0/z, z1.h
1449 ; CHECK-2p2-NEXT: ret
1451 %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.frintx.nxv8f16(<vscale x 8 x half> poison, <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)
1452 ret <vscale x 8 x half> %0
1455 define <vscale x 8 x half> @test_svrintx_f16_z(<vscale x 8 x i1> %pg, double %z0, <vscale x 8 x half> %x) {
1456 ; CHECK-LABEL: test_svrintx_f16_z:
1457 ; CHECK: // %bb.0: // %entry
1458 ; CHECK-NEXT: mov z0.h, #0 // =0x0
1459 ; CHECK-NEXT: frintx z0.h, p0/m, z1.h
1462 ; CHECK-2p2-LABEL: test_svrintx_f16_z:
1463 ; CHECK-2p2: // %bb.0: // %entry
1464 ; CHECK-2p2-NEXT: frintx z0.h, p0/z, z1.h
1465 ; CHECK-2p2-NEXT: ret
1467 %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.frintx.nxv8f16(<vscale x 8 x half> zeroinitializer, <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)
1468 ret <vscale x 8 x half> %0
1471 define <vscale x 4 x half> @test_svrintx_4f16_x_1(<vscale x 4 x i1> %pg, <vscale x 4 x half> %x) {
1472 ; CHECK-LABEL: test_svrintx_4f16_x_1:
1473 ; CHECK: // %bb.0: // %entry
1474 ; CHECK-NEXT: frintx z0.h, p0/m, z0.h
1477 ; CHECK-2p2-LABEL: test_svrintx_4f16_x_1:
1478 ; CHECK-2p2: // %bb.0: // %entry
1479 ; CHECK-2p2-NEXT: frintx z0.h, p0/z, z0.h
1480 ; CHECK-2p2-NEXT: ret
1482 %0 = tail call <vscale x 4 x half> @llvm.aarch64.sve.frintx.nxv4f16(<vscale x 4 x half> poison, <vscale x 4 x i1> %pg, <vscale x 4 x half> %x)
1483 ret <vscale x 4 x half> %0
1486 define <vscale x 4 x half> @test_svrintx_4f16_x_2(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x half> %x) {
1487 ; CHECK-LABEL: test_svrintx_4f16_x_2:
1488 ; CHECK: // %bb.0: // %entry
1489 ; CHECK-NEXT: movprfx z0, z1
1490 ; CHECK-NEXT: frintx z0.h, p0/m, z1.h
1493 ; CHECK-2p2-LABEL: test_svrintx_4f16_x_2:
1494 ; CHECK-2p2: // %bb.0: // %entry
1495 ; CHECK-2p2-NEXT: frintx z0.h, p0/z, z1.h
1496 ; CHECK-2p2-NEXT: ret
1498 %0 = tail call <vscale x 4 x half> @llvm.aarch64.sve.frintx.nxv4f16(<vscale x 4 x half> poison, <vscale x 4 x i1> %pg, <vscale x 4 x half> %x)
1499 ret <vscale x 4 x half> %0
1502 define <vscale x 4 x half> @test_svrintx_4f16_z(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x half> %x) {
1503 ; CHECK-LABEL: test_svrintx_4f16_z:
1504 ; CHECK: // %bb.0: // %entry
1505 ; CHECK-NEXT: mov z0.h, #0 // =0x0
1506 ; CHECK-NEXT: frintx z0.h, p0/m, z1.h
1509 ; CHECK-2p2-LABEL: test_svrintx_4f16_z:
1510 ; CHECK-2p2: // %bb.0: // %entry
1511 ; CHECK-2p2-NEXT: frintx z0.h, p0/z, z1.h
1512 ; CHECK-2p2-NEXT: ret
1514 %0 = tail call <vscale x 4 x half> @llvm.aarch64.sve.frintx.nxv4f16(<vscale x 4 x half> zeroinitializer, <vscale x 4 x i1> %pg, <vscale x 4 x half> %x)
1515 ret <vscale x 4 x half> %0
1518 define <vscale x 2 x half> @test_svrintx_2f16_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x half> %x) {
1519 ; CHECK-LABEL: test_svrintx_2f16_x_1:
1520 ; CHECK: // %bb.0: // %entry
1521 ; CHECK-NEXT: frintx z0.h, p0/m, z0.h
1524 ; CHECK-2p2-LABEL: test_svrintx_2f16_x_1:
1525 ; CHECK-2p2: // %bb.0: // %entry
1526 ; CHECK-2p2-NEXT: frintx z0.h, p0/z, z0.h
1527 ; CHECK-2p2-NEXT: ret
1529 %0 = tail call <vscale x 2 x half> @llvm.aarch64.sve.frintx.nxv2f16(<vscale x 2 x half> poison, <vscale x 2 x i1> %pg, <vscale x 2 x half> %x)
1530 ret <vscale x 2 x half> %0
1533 define <vscale x 2 x half> @test_svrintx_2f16_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x half> %x) {
1534 ; CHECK-LABEL: test_svrintx_2f16_x_2:
1535 ; CHECK: // %bb.0: // %entry
1536 ; CHECK-NEXT: movprfx z0, z1
1537 ; CHECK-NEXT: frintx z0.h, p0/m, z1.h
1540 ; CHECK-2p2-LABEL: test_svrintx_2f16_x_2:
1541 ; CHECK-2p2: // %bb.0: // %entry
1542 ; CHECK-2p2-NEXT: frintx z0.h, p0/z, z1.h
1543 ; CHECK-2p2-NEXT: ret
1545 %0 = tail call <vscale x 2 x half> @llvm.aarch64.sve.frintx.nxv2f16(<vscale x 2 x half> poison, <vscale x 2 x i1> %pg, <vscale x 2 x half> %x)
1546 ret <vscale x 2 x half> %0
1549 define <vscale x 2 x half> @test_svrintx_2f16_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x half> %x) {
1550 ; CHECK-LABEL: test_svrintx_2f16_z:
1551 ; CHECK: // %bb.0: // %entry
1552 ; CHECK-NEXT: mov z0.h, #0 // =0x0
1553 ; CHECK-NEXT: frintx z0.h, p0/m, z1.h
1556 ; CHECK-2p2-LABEL: test_svrintx_2f16_z:
1557 ; CHECK-2p2: // %bb.0: // %entry
1558 ; CHECK-2p2-NEXT: frintx z0.h, p0/z, z1.h
1559 ; CHECK-2p2-NEXT: ret
1561 %0 = tail call <vscale x 2 x half> @llvm.aarch64.sve.frintx.nxv2f16(<vscale x 2 x half> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x half> %x)
1562 ret <vscale x 2 x half> %0
1565 define <vscale x 2 x float> @test_svrintx_2f32_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x float> %x) {
1566 ; CHECK-LABEL: test_svrintx_2f32_x_1:
1567 ; CHECK: // %bb.0: // %entry
1568 ; CHECK-NEXT: frintx z0.s, p0/m, z0.s
1571 ; CHECK-2p2-LABEL: test_svrintx_2f32_x_1:
1572 ; CHECK-2p2: // %bb.0: // %entry
1573 ; CHECK-2p2-NEXT: frintx z0.s, p0/z, z0.s
1574 ; CHECK-2p2-NEXT: ret
1576 %0 = tail call <vscale x 2 x float> @llvm.aarch64.sve.frintx.nxv2f32(<vscale x 2 x float> poison, <vscale x 2 x i1> %pg, <vscale x 2 x float> %x)
1577 ret <vscale x 2 x float> %0
1580 define <vscale x 2 x float> @test_svrintx_2f32_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x float> %x) {
1581 ; CHECK-LABEL: test_svrintx_2f32_x_2:
1582 ; CHECK: // %bb.0: // %entry
1583 ; CHECK-NEXT: movprfx z0, z1
1584 ; CHECK-NEXT: frintx z0.s, p0/m, z1.s
1587 ; CHECK-2p2-LABEL: test_svrintx_2f32_x_2:
1588 ; CHECK-2p2: // %bb.0: // %entry
1589 ; CHECK-2p2-NEXT: frintx z0.s, p0/z, z1.s
1590 ; CHECK-2p2-NEXT: ret
1592 %0 = tail call <vscale x 2 x float> @llvm.aarch64.sve.frintx.nxv2f32(<vscale x 2 x float> poison, <vscale x 2 x i1> %pg, <vscale x 2 x float> %x)
1593 ret <vscale x 2 x float> %0
1596 define <vscale x 2 x float> @test_svrintx_2f32_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x float> %x) {
1597 ; CHECK-LABEL: test_svrintx_2f32_z:
1598 ; CHECK: // %bb.0: // %entry
1599 ; CHECK-NEXT: mov z0.s, #0 // =0x0
1600 ; CHECK-NEXT: frintx z0.s, p0/m, z1.s
1603 ; CHECK-2p2-LABEL: test_svrintx_2f32_z:
1604 ; CHECK-2p2: // %bb.0: // %entry
1605 ; CHECK-2p2-NEXT: frintx z0.s, p0/z, z1.s
1606 ; CHECK-2p2-NEXT: ret
1608 %0 = tail call <vscale x 2 x float> @llvm.aarch64.sve.frintx.nxv2f32(<vscale x 2 x float> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x float> %x)
1609 ret <vscale x 2 x float> %0
1612 define <vscale x 4 x float> @test_svrintx_f32_x_1(<vscale x 4 x i1> %pg, <vscale x 4 x float> %x) {
1613 ; CHECK-LABEL: test_svrintx_f32_x_1:
1614 ; CHECK: // %bb.0: // %entry
1615 ; CHECK-NEXT: frintx z0.s, p0/m, z0.s
1618 ; CHECK-2p2-LABEL: test_svrintx_f32_x_1:
1619 ; CHECK-2p2: // %bb.0: // %entry
1620 ; CHECK-2p2-NEXT: frintx z0.s, p0/z, z0.s
1621 ; CHECK-2p2-NEXT: ret
1623 %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.frintx.nxv4f32(<vscale x 4 x float> poison, <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)
1624 ret <vscale x 4 x float> %0
1627 define <vscale x 4 x float> @test_svrintx_f32_x_2(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x float> %x) {
1628 ; CHECK-LABEL: test_svrintx_f32_x_2:
1629 ; CHECK: // %bb.0: // %entry
1630 ; CHECK-NEXT: movprfx z0, z1
1631 ; CHECK-NEXT: frintx z0.s, p0/m, z1.s
1634 ; CHECK-2p2-LABEL: test_svrintx_f32_x_2:
1635 ; CHECK-2p2: // %bb.0: // %entry
1636 ; CHECK-2p2-NEXT: frintx z0.s, p0/z, z1.s
1637 ; CHECK-2p2-NEXT: ret
1639 %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.frintx.nxv4f32(<vscale x 4 x float> poison, <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)
1640 ret <vscale x 4 x float> %0
1643 define <vscale x 4 x float> @test_svrintx_f32_z(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x float> %x) {
1644 ; CHECK-LABEL: test_svrintx_f32_z:
1645 ; CHECK: // %bb.0: // %entry
1646 ; CHECK-NEXT: mov z0.s, #0 // =0x0
1647 ; CHECK-NEXT: frintx z0.s, p0/m, z1.s
1650 ; CHECK-2p2-LABEL: test_svrintx_f32_z:
1651 ; CHECK-2p2: // %bb.0: // %entry
1652 ; CHECK-2p2-NEXT: frintx z0.s, p0/z, z1.s
1653 ; CHECK-2p2-NEXT: ret
1655 %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.frintx.nxv4f32(<vscale x 4 x float> zeroinitializer, <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)
1656 ret <vscale x 4 x float> %0
1659 define <vscale x 2 x double> @test_svrintx_f64_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x double> %x) {
1660 ; CHECK-LABEL: test_svrintx_f64_x_1:
1661 ; CHECK: // %bb.0: // %entry
1662 ; CHECK-NEXT: frintx z0.d, p0/m, z0.d
1665 ; CHECK-2p2-LABEL: test_svrintx_f64_x_1:
1666 ; CHECK-2p2: // %bb.0: // %entry
1667 ; CHECK-2p2-NEXT: frintx z0.d, p0/z, z0.d
1668 ; CHECK-2p2-NEXT: ret
1670 %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.frintx.nxv2f64(<vscale x 2 x double> poison, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)
1671 ret <vscale x 2 x double> %0
1674 define <vscale x 2 x double> @test_svrintx_f64_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x double> %x) {
1675 ; CHECK-LABEL: test_svrintx_f64_x_2:
1676 ; CHECK: // %bb.0: // %entry
1677 ; CHECK-NEXT: movprfx z0, z1
1678 ; CHECK-NEXT: frintx z0.d, p0/m, z1.d
1681 ; CHECK-2p2-LABEL: test_svrintx_f64_x_2:
1682 ; CHECK-2p2: // %bb.0: // %entry
1683 ; CHECK-2p2-NEXT: frintx z0.d, p0/z, z1.d
1684 ; CHECK-2p2-NEXT: ret
1686 %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.frintx.nxv2f64(<vscale x 2 x double> poison, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)
1687 ret <vscale x 2 x double> %0
1690 define <vscale x 2 x double> @test_svrintx_f64_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x double> %x) {
1691 ; CHECK-LABEL: test_svrintx_f64_z:
1692 ; CHECK: // %bb.0: // %entry
1693 ; CHECK-NEXT: mov z0.d, #0 // =0x0
1694 ; CHECK-NEXT: frintx z0.d, p0/m, z1.d
1697 ; CHECK-2p2-LABEL: test_svrintx_f64_z:
1698 ; CHECK-2p2: // %bb.0: // %entry
1699 ; CHECK-2p2-NEXT: frintx z0.d, p0/z, z1.d
1700 ; CHECK-2p2-NEXT: ret
1702 %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.frintx.nxv2f64(<vscale x 2 x double> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)
1703 ret <vscale x 2 x double> %0
1706 define <vscale x 8 x half> @test_svrintz_f16_x_1(<vscale x 8 x i1> %pg, <vscale x 8 x half> %x) {
1707 ; CHECK-LABEL: test_svrintz_f16_x_1:
1708 ; CHECK: // %bb.0: // %entry
1709 ; CHECK-NEXT: frintz z0.h, p0/m, z0.h
1712 ; CHECK-2p2-LABEL: test_svrintz_f16_x_1:
1713 ; CHECK-2p2: // %bb.0: // %entry
1714 ; CHECK-2p2-NEXT: frintz z0.h, p0/z, z0.h
1715 ; CHECK-2p2-NEXT: ret
1717 %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.frintz.nxv8f16(<vscale x 8 x half> poison, <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)
1718 ret <vscale x 8 x half> %0
1721 define <vscale x 8 x half> @test_svrintz_f16_x_2(<vscale x 8 x i1> %pg, double %z0, <vscale x 8 x half> %x) {
1722 ; CHECK-LABEL: test_svrintz_f16_x_2:
1723 ; CHECK: // %bb.0: // %entry
1724 ; CHECK-NEXT: movprfx z0, z1
1725 ; CHECK-NEXT: frintz z0.h, p0/m, z1.h
1728 ; CHECK-2p2-LABEL: test_svrintz_f16_x_2:
1729 ; CHECK-2p2: // %bb.0: // %entry
1730 ; CHECK-2p2-NEXT: frintz z0.h, p0/z, z1.h
1731 ; CHECK-2p2-NEXT: ret
1733 %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.frintz.nxv8f16(<vscale x 8 x half> poison, <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)
1734 ret <vscale x 8 x half> %0
1737 define <vscale x 8 x half> @test_svrintz_f16_z(<vscale x 8 x i1> %pg, double %z0, <vscale x 8 x half> %x) {
1738 ; CHECK-LABEL: test_svrintz_f16_z:
1739 ; CHECK: // %bb.0: // %entry
1740 ; CHECK-NEXT: mov z0.h, #0 // =0x0
1741 ; CHECK-NEXT: frintz z0.h, p0/m, z1.h
1744 ; CHECK-2p2-LABEL: test_svrintz_f16_z:
1745 ; CHECK-2p2: // %bb.0: // %entry
1746 ; CHECK-2p2-NEXT: frintz z0.h, p0/z, z1.h
1747 ; CHECK-2p2-NEXT: ret
1749 %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.frintz.nxv8f16(<vscale x 8 x half> zeroinitializer, <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)
1750 ret <vscale x 8 x half> %0
1753 define <vscale x 4 x half> @test_svrintz_4f16_x_1(<vscale x 4 x i1> %pg, <vscale x 4 x half> %x) {
1754 ; CHECK-LABEL: test_svrintz_4f16_x_1:
1755 ; CHECK: // %bb.0: // %entry
1756 ; CHECK-NEXT: frintz z0.h, p0/m, z0.h
1759 ; CHECK-2p2-LABEL: test_svrintz_4f16_x_1:
1760 ; CHECK-2p2: // %bb.0: // %entry
1761 ; CHECK-2p2-NEXT: frintz z0.h, p0/z, z0.h
1762 ; CHECK-2p2-NEXT: ret
1764 %0 = tail call <vscale x 4 x half> @llvm.aarch64.sve.frintz.nxv4f16(<vscale x 4 x half> poison, <vscale x 4 x i1> %pg, <vscale x 4 x half> %x)
1765 ret <vscale x 4 x half> %0
1768 define <vscale x 4 x half> @test_svrintz_4f16_x_2(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x half> %x) {
1769 ; CHECK-LABEL: test_svrintz_4f16_x_2:
1770 ; CHECK: // %bb.0: // %entry
1771 ; CHECK-NEXT: movprfx z0, z1
1772 ; CHECK-NEXT: frintz z0.h, p0/m, z1.h
1775 ; CHECK-2p2-LABEL: test_svrintz_4f16_x_2:
1776 ; CHECK-2p2: // %bb.0: // %entry
1777 ; CHECK-2p2-NEXT: frintz z0.h, p0/z, z1.h
1778 ; CHECK-2p2-NEXT: ret
1780 %0 = tail call <vscale x 4 x half> @llvm.aarch64.sve.frintz.nxv4f16(<vscale x 4 x half> poison, <vscale x 4 x i1> %pg, <vscale x 4 x half> %x)
1781 ret <vscale x 4 x half> %0
1784 define <vscale x 4 x half> @test_svrintz_4f16_z(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x half> %x) {
1785 ; CHECK-LABEL: test_svrintz_4f16_z:
1786 ; CHECK: // %bb.0: // %entry
1787 ; CHECK-NEXT: mov z0.h, #0 // =0x0
1788 ; CHECK-NEXT: frintz z0.h, p0/m, z1.h
1791 ; CHECK-2p2-LABEL: test_svrintz_4f16_z:
1792 ; CHECK-2p2: // %bb.0: // %entry
1793 ; CHECK-2p2-NEXT: frintz z0.h, p0/z, z1.h
1794 ; CHECK-2p2-NEXT: ret
1796 %0 = tail call <vscale x 4 x half> @llvm.aarch64.sve.frintz.nxv4f16(<vscale x 4 x half> zeroinitializer, <vscale x 4 x i1> %pg, <vscale x 4 x half> %x)
1797 ret <vscale x 4 x half> %0
1800 define <vscale x 2 x half> @test_svrintz_2f16_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x half> %x) {
1801 ; CHECK-LABEL: test_svrintz_2f16_x_1:
1802 ; CHECK: // %bb.0: // %entry
1803 ; CHECK-NEXT: frintz z0.h, p0/m, z0.h
1806 ; CHECK-2p2-LABEL: test_svrintz_2f16_x_1:
1807 ; CHECK-2p2: // %bb.0: // %entry
1808 ; CHECK-2p2-NEXT: frintz z0.h, p0/z, z0.h
1809 ; CHECK-2p2-NEXT: ret
1811 %0 = tail call <vscale x 2 x half> @llvm.aarch64.sve.frintz.nxv2f16(<vscale x 2 x half> poison, <vscale x 2 x i1> %pg, <vscale x 2 x half> %x)
1812 ret <vscale x 2 x half> %0
1815 define <vscale x 2 x half> @test_svrintz_2f16_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x half> %x) {
1816 ; CHECK-LABEL: test_svrintz_2f16_x_2:
1817 ; CHECK: // %bb.0: // %entry
1818 ; CHECK-NEXT: movprfx z0, z1
1819 ; CHECK-NEXT: frintz z0.h, p0/m, z1.h
1822 ; CHECK-2p2-LABEL: test_svrintz_2f16_x_2:
1823 ; CHECK-2p2: // %bb.0: // %entry
1824 ; CHECK-2p2-NEXT: frintz z0.h, p0/z, z1.h
1825 ; CHECK-2p2-NEXT: ret
1827 %0 = tail call <vscale x 2 x half> @llvm.aarch64.sve.frintz.nxv2f16(<vscale x 2 x half> poison, <vscale x 2 x i1> %pg, <vscale x 2 x half> %x)
1828 ret <vscale x 2 x half> %0
1831 define <vscale x 2 x half> @test_svrintz_2f16_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x half> %x) {
1832 ; CHECK-LABEL: test_svrintz_2f16_z:
1833 ; CHECK: // %bb.0: // %entry
1834 ; CHECK-NEXT: mov z0.h, #0 // =0x0
1835 ; CHECK-NEXT: frintz z0.h, p0/m, z1.h
1838 ; CHECK-2p2-LABEL: test_svrintz_2f16_z:
1839 ; CHECK-2p2: // %bb.0: // %entry
1840 ; CHECK-2p2-NEXT: frintz z0.h, p0/z, z1.h
1841 ; CHECK-2p2-NEXT: ret
1843 %0 = tail call <vscale x 2 x half> @llvm.aarch64.sve.frintz.nxv2f16(<vscale x 2 x half> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x half> %x)
1844 ret <vscale x 2 x half> %0
1847 define <vscale x 2 x float> @test_svrintz_2f32_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x float> %x) {
1848 ; CHECK-LABEL: test_svrintz_2f32_x_1:
1849 ; CHECK: // %bb.0: // %entry
1850 ; CHECK-NEXT: frintz z0.s, p0/m, z0.s
1853 ; CHECK-2p2-LABEL: test_svrintz_2f32_x_1:
1854 ; CHECK-2p2: // %bb.0: // %entry
1855 ; CHECK-2p2-NEXT: frintz z0.s, p0/z, z0.s
1856 ; CHECK-2p2-NEXT: ret
1858 %0 = tail call <vscale x 2 x float> @llvm.aarch64.sve.frintz.nxv2f32(<vscale x 2 x float> poison, <vscale x 2 x i1> %pg, <vscale x 2 x float> %x)
1859 ret <vscale x 2 x float> %0
1862 define <vscale x 2 x float> @test_svrintz_2f32_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x float> %x) {
1863 ; CHECK-LABEL: test_svrintz_2f32_x_2:
1864 ; CHECK: // %bb.0: // %entry
1865 ; CHECK-NEXT: movprfx z0, z1
1866 ; CHECK-NEXT: frintz z0.s, p0/m, z1.s
1869 ; CHECK-2p2-LABEL: test_svrintz_2f32_x_2:
1870 ; CHECK-2p2: // %bb.0: // %entry
1871 ; CHECK-2p2-NEXT: frintz z0.s, p0/z, z1.s
1872 ; CHECK-2p2-NEXT: ret
1874 %0 = tail call <vscale x 2 x float> @llvm.aarch64.sve.frintz.nxv2f32(<vscale x 2 x float> poison, <vscale x 2 x i1> %pg, <vscale x 2 x float> %x)
1875 ret <vscale x 2 x float> %0
1878 define <vscale x 2 x float> @test_svrintz_2f32_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x float> %x) {
1879 ; CHECK-LABEL: test_svrintz_2f32_z:
1880 ; CHECK: // %bb.0: // %entry
1881 ; CHECK-NEXT: mov z0.s, #0 // =0x0
1882 ; CHECK-NEXT: frintz z0.s, p0/m, z1.s
1885 ; CHECK-2p2-LABEL: test_svrintz_2f32_z:
1886 ; CHECK-2p2: // %bb.0: // %entry
1887 ; CHECK-2p2-NEXT: frintz z0.s, p0/z, z1.s
1888 ; CHECK-2p2-NEXT: ret
1890 %0 = tail call <vscale x 2 x float> @llvm.aarch64.sve.frintz.nxv2f32(<vscale x 2 x float> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x float> %x)
1891 ret <vscale x 2 x float> %0
1894 define <vscale x 4 x float> @test_svrintz_f32_x_1(<vscale x 4 x i1> %pg, <vscale x 4 x float> %x) {
1895 ; CHECK-LABEL: test_svrintz_f32_x_1:
1896 ; CHECK: // %bb.0: // %entry
1897 ; CHECK-NEXT: frintz z0.s, p0/m, z0.s
1900 ; CHECK-2p2-LABEL: test_svrintz_f32_x_1:
1901 ; CHECK-2p2: // %bb.0: // %entry
1902 ; CHECK-2p2-NEXT: frintz z0.s, p0/z, z0.s
1903 ; CHECK-2p2-NEXT: ret
1905 %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.frintz.nxv4f32(<vscale x 4 x float> poison, <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)
1906 ret <vscale x 4 x float> %0
1909 define <vscale x 4 x float> @test_svrintz_f32_x_2(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x float> %x) {
1910 ; CHECK-LABEL: test_svrintz_f32_x_2:
1911 ; CHECK: // %bb.0: // %entry
1912 ; CHECK-NEXT: movprfx z0, z1
1913 ; CHECK-NEXT: frintz z0.s, p0/m, z1.s
1916 ; CHECK-2p2-LABEL: test_svrintz_f32_x_2:
1917 ; CHECK-2p2: // %bb.0: // %entry
1918 ; CHECK-2p2-NEXT: frintz z0.s, p0/z, z1.s
1919 ; CHECK-2p2-NEXT: ret
1921 %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.frintz.nxv4f32(<vscale x 4 x float> poison, <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)
1922 ret <vscale x 4 x float> %0
1925 define <vscale x 4 x float> @test_svrintz_f32_z(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x float> %x) {
1926 ; CHECK-LABEL: test_svrintz_f32_z:
1927 ; CHECK: // %bb.0: // %entry
1928 ; CHECK-NEXT: mov z0.s, #0 // =0x0
1929 ; CHECK-NEXT: frintz z0.s, p0/m, z1.s
1932 ; CHECK-2p2-LABEL: test_svrintz_f32_z:
1933 ; CHECK-2p2: // %bb.0: // %entry
1934 ; CHECK-2p2-NEXT: frintz z0.s, p0/z, z1.s
1935 ; CHECK-2p2-NEXT: ret
1937 %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.frintz.nxv4f32(<vscale x 4 x float> zeroinitializer, <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)
1938 ret <vscale x 4 x float> %0
1941 define <vscale x 2 x double> @test_svrintz_f64_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x double> %x) {
1942 ; CHECK-LABEL: test_svrintz_f64_x_1:
1943 ; CHECK: // %bb.0: // %entry
1944 ; CHECK-NEXT: frintz z0.d, p0/m, z0.d
1947 ; CHECK-2p2-LABEL: test_svrintz_f64_x_1:
1948 ; CHECK-2p2: // %bb.0: // %entry
1949 ; CHECK-2p2-NEXT: frintz z0.d, p0/z, z0.d
1950 ; CHECK-2p2-NEXT: ret
1952 %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.frintz.nxv2f64(<vscale x 2 x double> poison, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)
1953 ret <vscale x 2 x double> %0
1956 define <vscale x 2 x double> @test_svrintz_f64_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x double> %x) {
1957 ; CHECK-LABEL: test_svrintz_f64_x_2:
1958 ; CHECK: // %bb.0: // %entry
1959 ; CHECK-NEXT: movprfx z0, z1
1960 ; CHECK-NEXT: frintz z0.d, p0/m, z1.d
1963 ; CHECK-2p2-LABEL: test_svrintz_f64_x_2:
1964 ; CHECK-2p2: // %bb.0: // %entry
1965 ; CHECK-2p2-NEXT: frintz z0.d, p0/z, z1.d
1966 ; CHECK-2p2-NEXT: ret
1968 %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.frintz.nxv2f64(<vscale x 2 x double> poison, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)
1969 ret <vscale x 2 x double> %0
1972 define <vscale x 2 x double> @test_svrintz_f64_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x double> %x) {
1973 ; CHECK-LABEL: test_svrintz_f64_z:
1974 ; CHECK: // %bb.0: // %entry
1975 ; CHECK-NEXT: mov z0.d, #0 // =0x0
1976 ; CHECK-NEXT: frintz z0.d, p0/m, z1.d
1979 ; CHECK-2p2-LABEL: test_svrintz_f64_z:
1980 ; CHECK-2p2: // %bb.0: // %entry
1981 ; CHECK-2p2-NEXT: frintz z0.d, p0/z, z1.d
1982 ; CHECK-2p2-NEXT: ret
1984 %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.frintz.nxv2f64(<vscale x 2 x double> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)
1985 ret <vscale x 2 x double> %0
1988 define <vscale x 8 x half> @test_svrecpx_f16_x_1(<vscale x 8 x i1> %pg, <vscale x 8 x half> %x) {
1989 ; CHECK-LABEL: test_svrecpx_f16_x_1:
1990 ; CHECK: // %bb.0: // %entry
1991 ; CHECK-NEXT: frecpx z0.h, p0/m, z0.h
1994 ; CHECK-2p2-LABEL: test_svrecpx_f16_x_1:
1995 ; CHECK-2p2: // %bb.0: // %entry
1996 ; CHECK-2p2-NEXT: frecpx z0.h, p0/z, z0.h
1997 ; CHECK-2p2-NEXT: ret
1999 %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.frecpx.nxv8f16(<vscale x 8 x half> poison, <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)
2000 ret <vscale x 8 x half> %0
2003 define <vscale x 8 x half> @test_svrecpx_f16_x_2(<vscale x 8 x i1> %pg, double %z0, <vscale x 8 x half> %x) {
2004 ; CHECK-LABEL: test_svrecpx_f16_x_2:
2005 ; CHECK: // %bb.0: // %entry
2006 ; CHECK-NEXT: movprfx z0, z1
2007 ; CHECK-NEXT: frecpx z0.h, p0/m, z1.h
2010 ; CHECK-2p2-LABEL: test_svrecpx_f16_x_2:
2011 ; CHECK-2p2: // %bb.0: // %entry
2012 ; CHECK-2p2-NEXT: frecpx z0.h, p0/z, z1.h
2013 ; CHECK-2p2-NEXT: ret
2015 %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.frecpx.nxv8f16(<vscale x 8 x half> poison, <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)
2016 ret <vscale x 8 x half> %0
2019 define <vscale x 8 x half> @test_svrecpx_f16_z(<vscale x 8 x i1> %pg, double %z0, <vscale x 8 x half> %x) {
2020 ; CHECK-LABEL: test_svrecpx_f16_z:
2021 ; CHECK: // %bb.0: // %entry
2022 ; CHECK-NEXT: mov z0.h, #0 // =0x0
2023 ; CHECK-NEXT: frecpx z0.h, p0/m, z1.h
2026 ; CHECK-2p2-LABEL: test_svrecpx_f16_z:
2027 ; CHECK-2p2: // %bb.0: // %entry
2028 ; CHECK-2p2-NEXT: frecpx z0.h, p0/z, z1.h
2029 ; CHECK-2p2-NEXT: ret
2031 %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.frecpx.nxv8f16(<vscale x 8 x half> zeroinitializer, <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)
2032 ret <vscale x 8 x half> %0
2035 define <vscale x 4 x half> @test_svrecpx_4f16_x_1(<vscale x 4 x i1> %pg, <vscale x 4 x half> %x) {
2036 ; CHECK-LABEL: test_svrecpx_4f16_x_1:
2037 ; CHECK: // %bb.0: // %entry
2038 ; CHECK-NEXT: frecpx z0.h, p0/m, z0.h
2041 ; CHECK-2p2-LABEL: test_svrecpx_4f16_x_1:
2042 ; CHECK-2p2: // %bb.0: // %entry
2043 ; CHECK-2p2-NEXT: frecpx z0.h, p0/z, z0.h
2044 ; CHECK-2p2-NEXT: ret
2046 %0 = tail call <vscale x 4 x half> @llvm.aarch64.sve.frecpx.nxv4f16(<vscale x 4 x half> poison, <vscale x 4 x i1> %pg, <vscale x 4 x half> %x)
2047 ret <vscale x 4 x half> %0
2050 define <vscale x 4 x half> @test_svrecpx_4f16_x_2(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x half> %x) {
2051 ; CHECK-LABEL: test_svrecpx_4f16_x_2:
2052 ; CHECK: // %bb.0: // %entry
2053 ; CHECK-NEXT: movprfx z0, z1
2054 ; CHECK-NEXT: frecpx z0.h, p0/m, z1.h
2057 ; CHECK-2p2-LABEL: test_svrecpx_4f16_x_2:
2058 ; CHECK-2p2: // %bb.0: // %entry
2059 ; CHECK-2p2-NEXT: frecpx z0.h, p0/z, z1.h
2060 ; CHECK-2p2-NEXT: ret
2062 %0 = tail call <vscale x 4 x half> @llvm.aarch64.sve.frecpx.nxv4f16(<vscale x 4 x half> poison, <vscale x 4 x i1> %pg, <vscale x 4 x half> %x)
2063 ret <vscale x 4 x half> %0
2066 define <vscale x 4 x half> @test_svrecpx_4f16_z(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x half> %x) {
2067 ; CHECK-LABEL: test_svrecpx_4f16_z:
2068 ; CHECK: // %bb.0: // %entry
2069 ; CHECK-NEXT: mov z0.h, #0 // =0x0
2070 ; CHECK-NEXT: frecpx z0.h, p0/m, z1.h
2073 ; CHECK-2p2-LABEL: test_svrecpx_4f16_z:
2074 ; CHECK-2p2: // %bb.0: // %entry
2075 ; CHECK-2p2-NEXT: frecpx z0.h, p0/z, z1.h
2076 ; CHECK-2p2-NEXT: ret
2078 %0 = tail call <vscale x 4 x half> @llvm.aarch64.sve.frecpx.nxv4f16(<vscale x 4 x half> zeroinitializer, <vscale x 4 x i1> %pg, <vscale x 4 x half> %x)
2079 ret <vscale x 4 x half> %0
2082 define <vscale x 2 x half> @test_svrecpx_2f16_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x half> %x) {
2083 ; CHECK-LABEL: test_svrecpx_2f16_x_1:
2084 ; CHECK: // %bb.0: // %entry
2085 ; CHECK-NEXT: frecpx z0.h, p0/m, z0.h
2088 ; CHECK-2p2-LABEL: test_svrecpx_2f16_x_1:
2089 ; CHECK-2p2: // %bb.0: // %entry
2090 ; CHECK-2p2-NEXT: frecpx z0.h, p0/z, z0.h
2091 ; CHECK-2p2-NEXT: ret
2093 %0 = tail call <vscale x 2 x half> @llvm.aarch64.sve.frecpx.nxv2f16(<vscale x 2 x half> poison, <vscale x 2 x i1> %pg, <vscale x 2 x half> %x)
2094 ret <vscale x 2 x half> %0
2097 define <vscale x 2 x half> @test_svrecpx_2f16_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x half> %x) {
2098 ; CHECK-LABEL: test_svrecpx_2f16_x_2:
2099 ; CHECK: // %bb.0: // %entry
2100 ; CHECK-NEXT: movprfx z0, z1
2101 ; CHECK-NEXT: frecpx z0.h, p0/m, z1.h
2104 ; CHECK-2p2-LABEL: test_svrecpx_2f16_x_2:
2105 ; CHECK-2p2: // %bb.0: // %entry
2106 ; CHECK-2p2-NEXT: frecpx z0.h, p0/z, z1.h
2107 ; CHECK-2p2-NEXT: ret
2109 %0 = tail call <vscale x 2 x half> @llvm.aarch64.sve.frecpx.nxv2f16(<vscale x 2 x half> poison, <vscale x 2 x i1> %pg, <vscale x 2 x half> %x)
2110 ret <vscale x 2 x half> %0
2113 define <vscale x 2 x half> @test_svrecpx_2f16_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x half> %x) {
2114 ; CHECK-LABEL: test_svrecpx_2f16_z:
2115 ; CHECK: // %bb.0: // %entry
2116 ; CHECK-NEXT: mov z0.h, #0 // =0x0
2117 ; CHECK-NEXT: frecpx z0.h, p0/m, z1.h
2120 ; CHECK-2p2-LABEL: test_svrecpx_2f16_z:
2121 ; CHECK-2p2: // %bb.0: // %entry
2122 ; CHECK-2p2-NEXT: frecpx z0.h, p0/z, z1.h
2123 ; CHECK-2p2-NEXT: ret
2125 %0 = tail call <vscale x 2 x half> @llvm.aarch64.sve.frecpx.nxv2f16(<vscale x 2 x half> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x half> %x)
2126 ret <vscale x 2 x half> %0
2129 define <vscale x 2 x float> @test_svrecpx_2f32_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x float> %x) {
2130 ; CHECK-LABEL: test_svrecpx_2f32_x_1:
2131 ; CHECK: // %bb.0: // %entry
2132 ; CHECK-NEXT: frecpx z0.s, p0/m, z0.s
2135 ; CHECK-2p2-LABEL: test_svrecpx_2f32_x_1:
2136 ; CHECK-2p2: // %bb.0: // %entry
2137 ; CHECK-2p2-NEXT: frecpx z0.s, p0/z, z0.s
2138 ; CHECK-2p2-NEXT: ret
2140 %0 = tail call <vscale x 2 x float> @llvm.aarch64.sve.frecpx.nxv2f32(<vscale x 2 x float> poison, <vscale x 2 x i1> %pg, <vscale x 2 x float> %x)
2141 ret <vscale x 2 x float> %0
2144 define <vscale x 2 x float> @test_svrecpx_2f32_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x float> %x) {
2145 ; CHECK-LABEL: test_svrecpx_2f32_x_2:
2146 ; CHECK: // %bb.0: // %entry
2147 ; CHECK-NEXT: movprfx z0, z1
2148 ; CHECK-NEXT: frecpx z0.s, p0/m, z1.s
2151 ; CHECK-2p2-LABEL: test_svrecpx_2f32_x_2:
2152 ; CHECK-2p2: // %bb.0: // %entry
2153 ; CHECK-2p2-NEXT: frecpx z0.s, p0/z, z1.s
2154 ; CHECK-2p2-NEXT: ret
2156 %0 = tail call <vscale x 2 x float> @llvm.aarch64.sve.frecpx.nxv2f32(<vscale x 2 x float> poison, <vscale x 2 x i1> %pg, <vscale x 2 x float> %x)
2157 ret <vscale x 2 x float> %0
2160 define <vscale x 2 x float> @test_svrecpx_2f32_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x float> %x) {
2161 ; CHECK-LABEL: test_svrecpx_2f32_z:
2162 ; CHECK: // %bb.0: // %entry
2163 ; CHECK-NEXT: mov z0.s, #0 // =0x0
2164 ; CHECK-NEXT: frecpx z0.s, p0/m, z1.s
2167 ; CHECK-2p2-LABEL: test_svrecpx_2f32_z:
2168 ; CHECK-2p2: // %bb.0: // %entry
2169 ; CHECK-2p2-NEXT: frecpx z0.s, p0/z, z1.s
2170 ; CHECK-2p2-NEXT: ret
2172 %0 = tail call <vscale x 2 x float> @llvm.aarch64.sve.frecpx.nxv2f32(<vscale x 2 x float> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x float> %x)
2173 ret <vscale x 2 x float> %0
2176 define <vscale x 4 x float> @test_svrecpx_f32_x_1(<vscale x 4 x i1> %pg, <vscale x 4 x float> %x) {
2177 ; CHECK-LABEL: test_svrecpx_f32_x_1:
2178 ; CHECK: // %bb.0: // %entry
2179 ; CHECK-NEXT: frecpx z0.s, p0/m, z0.s
2182 ; CHECK-2p2-LABEL: test_svrecpx_f32_x_1:
2183 ; CHECK-2p2: // %bb.0: // %entry
2184 ; CHECK-2p2-NEXT: frecpx z0.s, p0/z, z0.s
2185 ; CHECK-2p2-NEXT: ret
2187 %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.frecpx.nxv4f32(<vscale x 4 x float> poison, <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)
2188 ret <vscale x 4 x float> %0
2191 define <vscale x 4 x float> @test_svrecpx_f32_x_2(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x float> %x) {
2192 ; CHECK-LABEL: test_svrecpx_f32_x_2:
2193 ; CHECK: // %bb.0: // %entry
2194 ; CHECK-NEXT: movprfx z0, z1
2195 ; CHECK-NEXT: frecpx z0.s, p0/m, z1.s
2198 ; CHECK-2p2-LABEL: test_svrecpx_f32_x_2:
2199 ; CHECK-2p2: // %bb.0: // %entry
2200 ; CHECK-2p2-NEXT: frecpx z0.s, p0/z, z1.s
2201 ; CHECK-2p2-NEXT: ret
2203 %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.frecpx.nxv4f32(<vscale x 4 x float> poison, <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)
2204 ret <vscale x 4 x float> %0
2207 define <vscale x 4 x float> @test_svrecpx_f32_z(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x float> %x) {
2208 ; CHECK-LABEL: test_svrecpx_f32_z:
2209 ; CHECK: // %bb.0: // %entry
2210 ; CHECK-NEXT: mov z0.s, #0 // =0x0
2211 ; CHECK-NEXT: frecpx z0.s, p0/m, z1.s
2214 ; CHECK-2p2-LABEL: test_svrecpx_f32_z:
2215 ; CHECK-2p2: // %bb.0: // %entry
2216 ; CHECK-2p2-NEXT: frecpx z0.s, p0/z, z1.s
2217 ; CHECK-2p2-NEXT: ret
2219 %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.frecpx.nxv4f32(<vscale x 4 x float> zeroinitializer, <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)
2220 ret <vscale x 4 x float> %0
2223 define <vscale x 2 x double> @test_svrecpx_f64_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x double> %x) {
2224 ; CHECK-LABEL: test_svrecpx_f64_x_1:
2225 ; CHECK: // %bb.0: // %entry
2226 ; CHECK-NEXT: frecpx z0.d, p0/m, z0.d
2229 ; CHECK-2p2-LABEL: test_svrecpx_f64_x_1:
2230 ; CHECK-2p2: // %bb.0: // %entry
2231 ; CHECK-2p2-NEXT: frecpx z0.d, p0/z, z0.d
2232 ; CHECK-2p2-NEXT: ret
2234 %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.frecpx.nxv2f64(<vscale x 2 x double> poison, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)
2235 ret <vscale x 2 x double> %0
2238 define <vscale x 2 x double> @test_svrecpx_f64_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x double> %x) {
2239 ; CHECK-LABEL: test_svrecpx_f64_x_2:
2240 ; CHECK: // %bb.0: // %entry
2241 ; CHECK-NEXT: movprfx z0, z1
2242 ; CHECK-NEXT: frecpx z0.d, p0/m, z1.d
2245 ; CHECK-2p2-LABEL: test_svrecpx_f64_x_2:
2246 ; CHECK-2p2: // %bb.0: // %entry
2247 ; CHECK-2p2-NEXT: frecpx z0.d, p0/z, z1.d
2248 ; CHECK-2p2-NEXT: ret
2250 %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.frecpx.nxv2f64(<vscale x 2 x double> poison, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)
2251 ret <vscale x 2 x double> %0
2254 define <vscale x 2 x double> @test_svrecpx_f64_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x double> %x) {
2255 ; CHECK-LABEL: test_svrecpx_f64_z:
2256 ; CHECK: // %bb.0: // %entry
2257 ; CHECK-NEXT: mov z0.d, #0 // =0x0
2258 ; CHECK-NEXT: frecpx z0.d, p0/m, z1.d
2261 ; CHECK-2p2-LABEL: test_svrecpx_f64_z:
2262 ; CHECK-2p2: // %bb.0: // %entry
2263 ; CHECK-2p2-NEXT: frecpx z0.d, p0/z, z1.d
2264 ; CHECK-2p2-NEXT: ret
2266 %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.frecpx.nxv2f64(<vscale x 2 x double> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)
2267 ret <vscale x 2 x double> %0
2270 define <vscale x 8 x half> @test_svsqrt_f16_x_1(<vscale x 8 x i1> %pg, <vscale x 8 x half> %x) {
2271 ; CHECK-LABEL: test_svsqrt_f16_x_1:
2272 ; CHECK: // %bb.0: // %entry
2273 ; CHECK-NEXT: fsqrt z0.h, p0/m, z0.h
2276 ; CHECK-2p2-LABEL: test_svsqrt_f16_x_1:
2277 ; CHECK-2p2: // %bb.0: // %entry
2278 ; CHECK-2p2-NEXT: fsqrt z0.h, p0/z, z0.h
2279 ; CHECK-2p2-NEXT: ret
2281 %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.fsqrt.nxv8f16(<vscale x 8 x half> poison, <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)
2282 ret <vscale x 8 x half> %0
2285 define <vscale x 8 x half> @test_svsqrt_f16_x_2(<vscale x 8 x i1> %pg, double %z0, <vscale x 8 x half> %x) {
2286 ; CHECK-LABEL: test_svsqrt_f16_x_2:
2287 ; CHECK: // %bb.0: // %entry
2288 ; CHECK-NEXT: movprfx z0, z1
2289 ; CHECK-NEXT: fsqrt z0.h, p0/m, z1.h
2292 ; CHECK-2p2-LABEL: test_svsqrt_f16_x_2:
2293 ; CHECK-2p2: // %bb.0: // %entry
2294 ; CHECK-2p2-NEXT: fsqrt z0.h, p0/z, z1.h
2295 ; CHECK-2p2-NEXT: ret
2297 %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.fsqrt.nxv8f16(<vscale x 8 x half> poison, <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)
2298 ret <vscale x 8 x half> %0
2301 define <vscale x 8 x half> @test_svsqrt_f16_z(<vscale x 8 x i1> %pg, double %z0, <vscale x 8 x half> %x) {
2302 ; CHECK-LABEL: test_svsqrt_f16_z:
2303 ; CHECK: // %bb.0: // %entry
2304 ; CHECK-NEXT: mov z0.h, #0 // =0x0
2305 ; CHECK-NEXT: fsqrt z0.h, p0/m, z1.h
2308 ; CHECK-2p2-LABEL: test_svsqrt_f16_z:
2309 ; CHECK-2p2: // %bb.0: // %entry
2310 ; CHECK-2p2-NEXT: fsqrt z0.h, p0/z, z1.h
2311 ; CHECK-2p2-NEXT: ret
2313 %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.fsqrt.nxv8f16(<vscale x 8 x half> zeroinitializer, <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)
2314 ret <vscale x 8 x half> %0
2317 define <vscale x 4 x half> @test_svsqrt_4f16_x_1(<vscale x 4 x i1> %pg, <vscale x 4 x half> %x) {
2318 ; CHECK-LABEL: test_svsqrt_4f16_x_1:
2319 ; CHECK: // %bb.0: // %entry
2320 ; CHECK-NEXT: fsqrt z0.h, p0/m, z0.h
2323 ; CHECK-2p2-LABEL: test_svsqrt_4f16_x_1:
2324 ; CHECK-2p2: // %bb.0: // %entry
2325 ; CHECK-2p2-NEXT: fsqrt z0.h, p0/z, z0.h
2326 ; CHECK-2p2-NEXT: ret
2328 %0 = tail call <vscale x 4 x half> @llvm.aarch64.sve.fsqrt.nxv4f16(<vscale x 4 x half> poison, <vscale x 4 x i1> %pg, <vscale x 4 x half> %x)
2329 ret <vscale x 4 x half> %0
2332 define <vscale x 4 x half> @test_svsqrt_4f16_x_2(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x half> %x) {
2333 ; CHECK-LABEL: test_svsqrt_4f16_x_2:
2334 ; CHECK: // %bb.0: // %entry
2335 ; CHECK-NEXT: movprfx z0, z1
2336 ; CHECK-NEXT: fsqrt z0.h, p0/m, z1.h
2339 ; CHECK-2p2-LABEL: test_svsqrt_4f16_x_2:
2340 ; CHECK-2p2: // %bb.0: // %entry
2341 ; CHECK-2p2-NEXT: fsqrt z0.h, p0/z, z1.h
2342 ; CHECK-2p2-NEXT: ret
2344 %0 = tail call <vscale x 4 x half> @llvm.aarch64.sve.fsqrt.nxv4f16(<vscale x 4 x half> poison, <vscale x 4 x i1> %pg, <vscale x 4 x half> %x)
2345 ret <vscale x 4 x half> %0
2348 define <vscale x 4 x half> @test_svsqrt_4f16_z(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x half> %x) {
2349 ; CHECK-LABEL: test_svsqrt_4f16_z:
2350 ; CHECK: // %bb.0: // %entry
2351 ; CHECK-NEXT: mov z0.h, #0 // =0x0
2352 ; CHECK-NEXT: fsqrt z0.h, p0/m, z1.h
2355 ; CHECK-2p2-LABEL: test_svsqrt_4f16_z:
2356 ; CHECK-2p2: // %bb.0: // %entry
2357 ; CHECK-2p2-NEXT: fsqrt z0.h, p0/z, z1.h
2358 ; CHECK-2p2-NEXT: ret
2360 %0 = tail call <vscale x 4 x half> @llvm.aarch64.sve.fsqrt.nxv4f16(<vscale x 4 x half> zeroinitializer, <vscale x 4 x i1> %pg, <vscale x 4 x half> %x)
2361 ret <vscale x 4 x half> %0
2364 define <vscale x 2 x half> @test_svsqrt_2f16_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x half> %x) {
2365 ; CHECK-LABEL: test_svsqrt_2f16_x_1:
2366 ; CHECK: // %bb.0: // %entry
2367 ; CHECK-NEXT: fsqrt z0.h, p0/m, z0.h
2370 ; CHECK-2p2-LABEL: test_svsqrt_2f16_x_1:
2371 ; CHECK-2p2: // %bb.0: // %entry
2372 ; CHECK-2p2-NEXT: fsqrt z0.h, p0/z, z0.h
2373 ; CHECK-2p2-NEXT: ret
2375 %0 = tail call <vscale x 2 x half> @llvm.aarch64.sve.fsqrt.nxv2f16(<vscale x 2 x half> poison, <vscale x 2 x i1> %pg, <vscale x 2 x half> %x)
2376 ret <vscale x 2 x half> %0
2379 define <vscale x 2 x half> @test_svsqrt_2f16_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x half> %x) {
2380 ; CHECK-LABEL: test_svsqrt_2f16_x_2:
2381 ; CHECK: // %bb.0: // %entry
2382 ; CHECK-NEXT: movprfx z0, z1
2383 ; CHECK-NEXT: fsqrt z0.h, p0/m, z1.h
2386 ; CHECK-2p2-LABEL: test_svsqrt_2f16_x_2:
2387 ; CHECK-2p2: // %bb.0: // %entry
2388 ; CHECK-2p2-NEXT: fsqrt z0.h, p0/z, z1.h
2389 ; CHECK-2p2-NEXT: ret
2391 %0 = tail call <vscale x 2 x half> @llvm.aarch64.sve.fsqrt.nxv2f16(<vscale x 2 x half> poison, <vscale x 2 x i1> %pg, <vscale x 2 x half> %x)
2392 ret <vscale x 2 x half> %0
2395 define <vscale x 2 x half> @test_svsqrt_2f16_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x half> %x) {
2396 ; CHECK-LABEL: test_svsqrt_2f16_z:
2397 ; CHECK: // %bb.0: // %entry
2398 ; CHECK-NEXT: mov z0.h, #0 // =0x0
2399 ; CHECK-NEXT: fsqrt z0.h, p0/m, z1.h
2402 ; CHECK-2p2-LABEL: test_svsqrt_2f16_z:
2403 ; CHECK-2p2: // %bb.0: // %entry
2404 ; CHECK-2p2-NEXT: fsqrt z0.h, p0/z, z1.h
2405 ; CHECK-2p2-NEXT: ret
2407 %0 = tail call <vscale x 2 x half> @llvm.aarch64.sve.fsqrt.nxv2f16(<vscale x 2 x half> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x half> %x)
2408 ret <vscale x 2 x half> %0
2411 define <vscale x 2 x float> @test_svsqrt_2f32_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x float> %x) {
2412 ; CHECK-LABEL: test_svsqrt_2f32_x_1:
2413 ; CHECK: // %bb.0: // %entry
2414 ; CHECK-NEXT: fsqrt z0.s, p0/m, z0.s
2417 ; CHECK-2p2-LABEL: test_svsqrt_2f32_x_1:
2418 ; CHECK-2p2: // %bb.0: // %entry
2419 ; CHECK-2p2-NEXT: fsqrt z0.s, p0/z, z0.s
2420 ; CHECK-2p2-NEXT: ret
2422 %0 = tail call <vscale x 2 x float> @llvm.aarch64.sve.fsqrt.nxv2f32(<vscale x 2 x float> poison, <vscale x 2 x i1> %pg, <vscale x 2 x float> %x)
2423 ret <vscale x 2 x float> %0
2426 define <vscale x 2 x float> @test_svsqrt_2f32_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x float> %x) {
2427 ; CHECK-LABEL: test_svsqrt_2f32_x_2:
2428 ; CHECK: // %bb.0: // %entry
2429 ; CHECK-NEXT: movprfx z0, z1
2430 ; CHECK-NEXT: fsqrt z0.s, p0/m, z1.s
2433 ; CHECK-2p2-LABEL: test_svsqrt_2f32_x_2:
2434 ; CHECK-2p2: // %bb.0: // %entry
2435 ; CHECK-2p2-NEXT: fsqrt z0.s, p0/z, z1.s
2436 ; CHECK-2p2-NEXT: ret
2438 %0 = tail call <vscale x 2 x float> @llvm.aarch64.sve.fsqrt.nxv2f32(<vscale x 2 x float> poison, <vscale x 2 x i1> %pg, <vscale x 2 x float> %x)
2439 ret <vscale x 2 x float> %0
2442 define <vscale x 2 x float> @test_svsqrt_2f32_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x float> %x) {
2443 ; CHECK-LABEL: test_svsqrt_2f32_z:
2444 ; CHECK: // %bb.0: // %entry
2445 ; CHECK-NEXT: mov z0.s, #0 // =0x0
2446 ; CHECK-NEXT: fsqrt z0.s, p0/m, z1.s
2449 ; CHECK-2p2-LABEL: test_svsqrt_2f32_z:
2450 ; CHECK-2p2: // %bb.0: // %entry
2451 ; CHECK-2p2-NEXT: fsqrt z0.s, p0/z, z1.s
2452 ; CHECK-2p2-NEXT: ret
2454 %0 = tail call <vscale x 2 x float> @llvm.aarch64.sve.fsqrt.nxv2f32(<vscale x 2 x float> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x float> %x)
2455 ret <vscale x 2 x float> %0
2458 define <vscale x 4 x float> @test_svsqrt_f32_x_1(<vscale x 4 x i1> %pg, <vscale x 4 x float> %x) {
2459 ; CHECK-LABEL: test_svsqrt_f32_x_1:
2460 ; CHECK: // %bb.0: // %entry
2461 ; CHECK-NEXT: fsqrt z0.s, p0/m, z0.s
2464 ; CHECK-2p2-LABEL: test_svsqrt_f32_x_1:
2465 ; CHECK-2p2: // %bb.0: // %entry
2466 ; CHECK-2p2-NEXT: fsqrt z0.s, p0/z, z0.s
2467 ; CHECK-2p2-NEXT: ret
2469 %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.fsqrt.nxv4f32(<vscale x 4 x float> poison, <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)
2470 ret <vscale x 4 x float> %0
2473 define <vscale x 4 x float> @test_svsqrt_f32_x_2(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x float> %x) {
2474 ; CHECK-LABEL: test_svsqrt_f32_x_2:
2475 ; CHECK: // %bb.0: // %entry
2476 ; CHECK-NEXT: movprfx z0, z1
2477 ; CHECK-NEXT: fsqrt z0.s, p0/m, z1.s
2480 ; CHECK-2p2-LABEL: test_svsqrt_f32_x_2:
2481 ; CHECK-2p2: // %bb.0: // %entry
2482 ; CHECK-2p2-NEXT: fsqrt z0.s, p0/z, z1.s
2483 ; CHECK-2p2-NEXT: ret
2485 %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.fsqrt.nxv4f32(<vscale x 4 x float> poison, <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)
2486 ret <vscale x 4 x float> %0
2489 define <vscale x 4 x float> @test_svsqrt_f32_z(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x float> %x) {
2490 ; CHECK-LABEL: test_svsqrt_f32_z:
2491 ; CHECK: // %bb.0: // %entry
2492 ; CHECK-NEXT: mov z0.s, #0 // =0x0
2493 ; CHECK-NEXT: fsqrt z0.s, p0/m, z1.s
2496 ; CHECK-2p2-LABEL: test_svsqrt_f32_z:
2497 ; CHECK-2p2: // %bb.0: // %entry
2498 ; CHECK-2p2-NEXT: fsqrt z0.s, p0/z, z1.s
2499 ; CHECK-2p2-NEXT: ret
2501 %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.fsqrt.nxv4f32(<vscale x 4 x float> zeroinitializer, <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)
2502 ret <vscale x 4 x float> %0
2505 define <vscale x 2 x double> @test_svsqrt_f64_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x double> %x) {
2506 ; CHECK-LABEL: test_svsqrt_f64_x_1:
2507 ; CHECK: // %bb.0: // %entry
2508 ; CHECK-NEXT: fsqrt z0.d, p0/m, z0.d
2511 ; CHECK-2p2-LABEL: test_svsqrt_f64_x_1:
2512 ; CHECK-2p2: // %bb.0: // %entry
2513 ; CHECK-2p2-NEXT: fsqrt z0.d, p0/z, z0.d
2514 ; CHECK-2p2-NEXT: ret
2516 %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.fsqrt.nxv2f64(<vscale x 2 x double> poison, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)
2517 ret <vscale x 2 x double> %0
2520 define <vscale x 2 x double> @test_svsqrt_f64_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x double> %x) {
2521 ; CHECK-LABEL: test_svsqrt_f64_x_2:
2522 ; CHECK: // %bb.0: // %entry
2523 ; CHECK-NEXT: movprfx z0, z1
2524 ; CHECK-NEXT: fsqrt z0.d, p0/m, z1.d
2527 ; CHECK-2p2-LABEL: test_svsqrt_f64_x_2:
2528 ; CHECK-2p2: // %bb.0: // %entry
2529 ; CHECK-2p2-NEXT: fsqrt z0.d, p0/z, z1.d
2530 ; CHECK-2p2-NEXT: ret
2532 %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.fsqrt.nxv2f64(<vscale x 2 x double> poison, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)
2533 ret <vscale x 2 x double> %0
2536 define <vscale x 2 x double> @test_svsqrt_f64_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x double> %x) {
2537 ; CHECK-LABEL: test_svsqrt_f64_z:
2538 ; CHECK: // %bb.0: // %entry
2539 ; CHECK-NEXT: mov z0.d, #0 // =0x0
2540 ; CHECK-NEXT: fsqrt z0.d, p0/m, z1.d
2543 ; CHECK-2p2-LABEL: test_svsqrt_f64_z:
2544 ; CHECK-2p2: // %bb.0: // %entry
2545 ; CHECK-2p2-NEXT: fsqrt z0.d, p0/z, z1.d
2546 ; CHECK-2p2-NEXT: ret
2548 %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.fsqrt.nxv2f64(<vscale x 2 x double> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)
2549 ret <vscale x 2 x double> %0
2552 define <vscale x 8 x half> @test_svfrinta_nxv8f16_ptrue_u(double %z0, <vscale x 8 x half> %x) {
2553 ; CHECK-LABEL: test_svfrinta_nxv8f16_ptrue_u:
2554 ; CHECK: // %bb.0: // %entry
2555 ; CHECK-NEXT: ptrue p0.h
2556 ; CHECK-NEXT: movprfx z0, z1
2557 ; CHECK-NEXT: frinta z0.h, p0/m, z1.h
2560 ; CHECK-2p2-LABEL: test_svfrinta_nxv8f16_ptrue_u:
2561 ; CHECK-2p2: // %bb.0: // %entry
2562 ; CHECK-2p2-NEXT: ptrue p0.h
2563 ; CHECK-2p2-NEXT: frinta z0.h, p0/z, z1.h
2564 ; CHECK-2p2-NEXT: ret
2566 %pg = call <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 31)
2567 %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.frinta.nxv8f16(<vscale x 8 x half> poison, <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)
2568 ret <vscale x 8 x half> %0
2571 define <vscale x 8 x half> @test_svfrinta_nxv8f16_ptrue(double %z0, <vscale x 8 x half> %x, <vscale x 8 x half> %y) {
2572 ; CHECK-LABEL: test_svfrinta_nxv8f16_ptrue:
2573 ; CHECK: // %bb.0: // %entry
2574 ; CHECK-NEXT: ptrue p0.h
2575 ; CHECK-NEXT: movprfx z0, z2
2576 ; CHECK-NEXT: frinta z0.h, p0/m, z2.h
2579 ; CHECK-2p2-LABEL: test_svfrinta_nxv8f16_ptrue:
2580 ; CHECK-2p2: // %bb.0: // %entry
2581 ; CHECK-2p2-NEXT: ptrue p0.h
2582 ; CHECK-2p2-NEXT: frinta z0.h, p0/z, z2.h
2583 ; CHECK-2p2-NEXT: ret
2585 %pg = call <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 31)
2586 %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.frinta.nxv8f16(<vscale x 8 x half> %x, <vscale x 8 x i1> %pg, <vscale x 8 x half> %y)
2587 ret <vscale x 8 x half> %0
2591 define <vscale x 4 x half> @test_svfrinta_nxv4f16_ptrue_u(double %z0, <vscale x 4 x half> %x) {
2592 ; CHECK-LABEL: test_svfrinta_nxv4f16_ptrue_u:
2593 ; CHECK: // %bb.0: // %entry
2594 ; CHECK-NEXT: ptrue p0.s
2595 ; CHECK-NEXT: movprfx z0, z1
2596 ; CHECK-NEXT: frinta z0.h, p0/m, z1.h
2599 ; CHECK-2p2-LABEL: test_svfrinta_nxv4f16_ptrue_u:
2600 ; CHECK-2p2: // %bb.0: // %entry
2601 ; CHECK-2p2-NEXT: ptrue p0.s
2602 ; CHECK-2p2-NEXT: frinta z0.h, p0/z, z1.h
2603 ; CHECK-2p2-NEXT: ret
2605 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)
2606 %0 = tail call <vscale x 4 x half> @llvm.aarch64.sve.frinta.nxv4f16(<vscale x 4 x half> poison, <vscale x 4 x i1> %pg, <vscale x 4 x half> %x)
2607 ret <vscale x 4 x half> %0
2610 define <vscale x 4 x half> @test_svfrinta_nxv4f16_ptrue(double %z0, <vscale x 4 x half> %x, <vscale x 4 x half> %y) {
2611 ; CHECK-LABEL: test_svfrinta_nxv4f16_ptrue:
2612 ; CHECK: // %bb.0: // %entry
2613 ; CHECK-NEXT: ptrue p0.s
2614 ; CHECK-NEXT: movprfx z0, z2
2615 ; CHECK-NEXT: frinta z0.h, p0/m, z2.h
2618 ; CHECK-2p2-LABEL: test_svfrinta_nxv4f16_ptrue:
2619 ; CHECK-2p2: // %bb.0: // %entry
2620 ; CHECK-2p2-NEXT: ptrue p0.s
2621 ; CHECK-2p2-NEXT: frinta z0.h, p0/z, z2.h
2622 ; CHECK-2p2-NEXT: ret
2624 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)
2625 %0 = tail call <vscale x 4 x half> @llvm.aarch64.sve.frinta.nxv4f16(<vscale x 4 x half> %x, <vscale x 4 x i1> %pg, <vscale x 4 x half> %y)
2626 ret <vscale x 4 x half> %0
2630 define <vscale x 2 x half> @test_svfrinta_nxv2f16_ptrue_u(double %z0, <vscale x 2 x half> %x) {
2631 ; CHECK-LABEL: test_svfrinta_nxv2f16_ptrue_u:
2632 ; CHECK: // %bb.0: // %entry
2633 ; CHECK-NEXT: ptrue p0.d
2634 ; CHECK-NEXT: movprfx z0, z1
2635 ; CHECK-NEXT: frinta z0.h, p0/m, z1.h
2638 ; CHECK-2p2-LABEL: test_svfrinta_nxv2f16_ptrue_u:
2639 ; CHECK-2p2: // %bb.0: // %entry
2640 ; CHECK-2p2-NEXT: ptrue p0.d
2641 ; CHECK-2p2-NEXT: frinta z0.h, p0/z, z1.h
2642 ; CHECK-2p2-NEXT: ret
2644 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)
2645 %0 = tail call <vscale x 2 x half> @llvm.aarch64.sve.frinta.nxv2f16(<vscale x 2 x half> poison, <vscale x 2 x i1> %pg, <vscale x 2 x half> %x)
2646 ret <vscale x 2 x half> %0
2649 define <vscale x 2 x half> @test_svfrinta_nxv2f16_ptrue(double %z0, <vscale x 2 x half> %x, <vscale x 2 x half> %y) {
2650 ; CHECK-LABEL: test_svfrinta_nxv2f16_ptrue:
2651 ; CHECK: // %bb.0: // %entry
2652 ; CHECK-NEXT: ptrue p0.d
2653 ; CHECK-NEXT: movprfx z0, z2
2654 ; CHECK-NEXT: frinta z0.h, p0/m, z2.h
2657 ; CHECK-2p2-LABEL: test_svfrinta_nxv2f16_ptrue:
2658 ; CHECK-2p2: // %bb.0: // %entry
2659 ; CHECK-2p2-NEXT: ptrue p0.d
2660 ; CHECK-2p2-NEXT: frinta z0.h, p0/z, z2.h
2661 ; CHECK-2p2-NEXT: ret
2663 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)
2664 %0 = tail call <vscale x 2 x half> @llvm.aarch64.sve.frinta.nxv2f16(<vscale x 2 x half> %x, <vscale x 2 x i1> %pg, <vscale x 2 x half> %y)
2665 ret <vscale x 2 x half> %0
2669 define <vscale x 2 x float> @test_svfrinta_nxv2f32_ptrue_u(double %z0, <vscale x 2 x float> %x) {
2670 ; CHECK-LABEL: test_svfrinta_nxv2f32_ptrue_u:
2671 ; CHECK: // %bb.0: // %entry
2672 ; CHECK-NEXT: ptrue p0.d
2673 ; CHECK-NEXT: movprfx z0, z1
2674 ; CHECK-NEXT: frinta z0.s, p0/m, z1.s
2677 ; CHECK-2p2-LABEL: test_svfrinta_nxv2f32_ptrue_u:
2678 ; CHECK-2p2: // %bb.0: // %entry
2679 ; CHECK-2p2-NEXT: ptrue p0.d
2680 ; CHECK-2p2-NEXT: frinta z0.s, p0/z, z1.s
2681 ; CHECK-2p2-NEXT: ret
2683 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)
2684 %0 = tail call <vscale x 2 x float> @llvm.aarch64.sve.frinta.nxv2f32(<vscale x 2 x float> poison, <vscale x 2 x i1> %pg, <vscale x 2 x float> %x)
2685 ret <vscale x 2 x float> %0
2688 define <vscale x 2 x float> @test_svfrinta_nxv2f32_ptrue(double %z0, <vscale x 2 x float> %x, <vscale x 2 x float> %y) {
2689 ; CHECK-LABEL: test_svfrinta_nxv2f32_ptrue:
2690 ; CHECK: // %bb.0: // %entry
2691 ; CHECK-NEXT: ptrue p0.d
2692 ; CHECK-NEXT: movprfx z0, z2
2693 ; CHECK-NEXT: frinta z0.s, p0/m, z2.s
2696 ; CHECK-2p2-LABEL: test_svfrinta_nxv2f32_ptrue:
2697 ; CHECK-2p2: // %bb.0: // %entry
2698 ; CHECK-2p2-NEXT: ptrue p0.d
2699 ; CHECK-2p2-NEXT: frinta z0.s, p0/z, z2.s
2700 ; CHECK-2p2-NEXT: ret
2702 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)
2703 %0 = tail call <vscale x 2 x float> @llvm.aarch64.sve.frinta.nxv2f32(<vscale x 2 x float> %x, <vscale x 2 x i1> %pg, <vscale x 2 x float> %y)
2704 ret <vscale x 2 x float> %0
2708 define <vscale x 4 x float> @test_svfrinta_nxv4f32_ptrue_u(double %z0, <vscale x 4 x float> %x) {
2709 ; CHECK-LABEL: test_svfrinta_nxv4f32_ptrue_u:
2710 ; CHECK: // %bb.0: // %entry
2711 ; CHECK-NEXT: ptrue p0.s
2712 ; CHECK-NEXT: movprfx z0, z1
2713 ; CHECK-NEXT: frinta z0.s, p0/m, z1.s
2716 ; CHECK-2p2-LABEL: test_svfrinta_nxv4f32_ptrue_u:
2717 ; CHECK-2p2: // %bb.0: // %entry
2718 ; CHECK-2p2-NEXT: ptrue p0.s
2719 ; CHECK-2p2-NEXT: frinta z0.s, p0/z, z1.s
2720 ; CHECK-2p2-NEXT: ret
2722 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)
2723 %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.frinta.nxv4f32(<vscale x 4 x float> poison, <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)
2724 ret <vscale x 4 x float> %0
2727 define <vscale x 4 x float> @test_svfrinta_nxv4f32_ptrue(double %z0, <vscale x 4 x float> %x, <vscale x 4 x float> %y) {
2728 ; CHECK-LABEL: test_svfrinta_nxv4f32_ptrue:
2729 ; CHECK: // %bb.0: // %entry
2730 ; CHECK-NEXT: ptrue p0.s
2731 ; CHECK-NEXT: movprfx z0, z2
2732 ; CHECK-NEXT: frinta z0.s, p0/m, z2.s
2735 ; CHECK-2p2-LABEL: test_svfrinta_nxv4f32_ptrue:
2736 ; CHECK-2p2: // %bb.0: // %entry
2737 ; CHECK-2p2-NEXT: ptrue p0.s
2738 ; CHECK-2p2-NEXT: frinta z0.s, p0/z, z2.s
2739 ; CHECK-2p2-NEXT: ret
2741 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)
2742 %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.frinta.nxv4f32(<vscale x 4 x float> %x, <vscale x 4 x i1> %pg, <vscale x 4 x float> %y)
2743 ret <vscale x 4 x float> %0
2747 define <vscale x 2 x double> @test_svfrinta_nxv2f64_ptrue_u(double %z0, <vscale x 2 x double> %x) {
2748 ; CHECK-LABEL: test_svfrinta_nxv2f64_ptrue_u:
2749 ; CHECK: // %bb.0: // %entry
2750 ; CHECK-NEXT: ptrue p0.d
2751 ; CHECK-NEXT: movprfx z0, z1
2752 ; CHECK-NEXT: frinta z0.d, p0/m, z1.d
2755 ; CHECK-2p2-LABEL: test_svfrinta_nxv2f64_ptrue_u:
2756 ; CHECK-2p2: // %bb.0: // %entry
2757 ; CHECK-2p2-NEXT: ptrue p0.d
2758 ; CHECK-2p2-NEXT: frinta z0.d, p0/z, z1.d
2759 ; CHECK-2p2-NEXT: ret
2761 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)
2762 %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.frinta.nxv2f64(<vscale x 2 x double> poison, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)
2763 ret <vscale x 2 x double> %0
2766 define <vscale x 2 x double> @test_svfrinta_nxv2f64_ptrue(double %z0, <vscale x 2 x double> %x, <vscale x 2 x double> %y) {
2767 ; CHECK-LABEL: test_svfrinta_nxv2f64_ptrue:
2768 ; CHECK: // %bb.0: // %entry
2769 ; CHECK-NEXT: ptrue p0.d
2770 ; CHECK-NEXT: movprfx z0, z2
2771 ; CHECK-NEXT: frinta z0.d, p0/m, z2.d
2774 ; CHECK-2p2-LABEL: test_svfrinta_nxv2f64_ptrue:
2775 ; CHECK-2p2: // %bb.0: // %entry
2776 ; CHECK-2p2-NEXT: ptrue p0.d
2777 ; CHECK-2p2-NEXT: frinta z0.d, p0/z, z2.d
2778 ; CHECK-2p2-NEXT: ret
2780 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)
2781 %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.frinta.nxv2f64(<vscale x 2 x double> %x, <vscale x 2 x i1> %pg, <vscale x 2 x double> %y)
2782 ret <vscale x 2 x double> %0
2786 define <vscale x 8 x half> @test_svfrinti_nxv8f16_ptrue_u(double %z0, <vscale x 8 x half> %x) {
2787 ; CHECK-LABEL: test_svfrinti_nxv8f16_ptrue_u:
2788 ; CHECK: // %bb.0: // %entry
2789 ; CHECK-NEXT: ptrue p0.h
2790 ; CHECK-NEXT: movprfx z0, z1
2791 ; CHECK-NEXT: frinti z0.h, p0/m, z1.h
2794 ; CHECK-2p2-LABEL: test_svfrinti_nxv8f16_ptrue_u:
2795 ; CHECK-2p2: // %bb.0: // %entry
2796 ; CHECK-2p2-NEXT: ptrue p0.h
2797 ; CHECK-2p2-NEXT: frinti z0.h, p0/z, z1.h
2798 ; CHECK-2p2-NEXT: ret
2800 %pg = call <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 31)
2801 %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.frinti.nxv8f16(<vscale x 8 x half> poison, <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)
2802 ret <vscale x 8 x half> %0
2805 define <vscale x 8 x half> @test_svfrinti_nxv8f16_ptrue(double %z0, <vscale x 8 x half> %x, <vscale x 8 x half> %y) {
2806 ; CHECK-LABEL: test_svfrinti_nxv8f16_ptrue:
2807 ; CHECK: // %bb.0: // %entry
2808 ; CHECK-NEXT: ptrue p0.h
2809 ; CHECK-NEXT: movprfx z0, z2
2810 ; CHECK-NEXT: frinti z0.h, p0/m, z2.h
2813 ; CHECK-2p2-LABEL: test_svfrinti_nxv8f16_ptrue:
2814 ; CHECK-2p2: // %bb.0: // %entry
2815 ; CHECK-2p2-NEXT: ptrue p0.h
2816 ; CHECK-2p2-NEXT: frinti z0.h, p0/z, z2.h
2817 ; CHECK-2p2-NEXT: ret
2819 %pg = call <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 31)
2820 %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.frinti.nxv8f16(<vscale x 8 x half> %x, <vscale x 8 x i1> %pg, <vscale x 8 x half> %y)
2821 ret <vscale x 8 x half> %0
2825 define <vscale x 4 x half> @test_svfrinti_nxv4f16_ptrue_u(double %z0, <vscale x 4 x half> %x) {
2826 ; CHECK-LABEL: test_svfrinti_nxv4f16_ptrue_u:
2827 ; CHECK: // %bb.0: // %entry
2828 ; CHECK-NEXT: ptrue p0.s
2829 ; CHECK-NEXT: movprfx z0, z1
2830 ; CHECK-NEXT: frinti z0.h, p0/m, z1.h
2833 ; CHECK-2p2-LABEL: test_svfrinti_nxv4f16_ptrue_u:
2834 ; CHECK-2p2: // %bb.0: // %entry
2835 ; CHECK-2p2-NEXT: ptrue p0.s
2836 ; CHECK-2p2-NEXT: frinti z0.h, p0/z, z1.h
2837 ; CHECK-2p2-NEXT: ret
2839 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)
2840 %0 = tail call <vscale x 4 x half> @llvm.aarch64.sve.frinti.nxv4f16(<vscale x 4 x half> poison, <vscale x 4 x i1> %pg, <vscale x 4 x half> %x)
2841 ret <vscale x 4 x half> %0
2844 define <vscale x 4 x half> @test_svfrinti_nxv4f16_ptrue(double %z0, <vscale x 4 x half> %x, <vscale x 4 x half> %y) {
2845 ; CHECK-LABEL: test_svfrinti_nxv4f16_ptrue:
2846 ; CHECK: // %bb.0: // %entry
2847 ; CHECK-NEXT: ptrue p0.s
2848 ; CHECK-NEXT: movprfx z0, z2
2849 ; CHECK-NEXT: frinti z0.h, p0/m, z2.h
2852 ; CHECK-2p2-LABEL: test_svfrinti_nxv4f16_ptrue:
2853 ; CHECK-2p2: // %bb.0: // %entry
2854 ; CHECK-2p2-NEXT: ptrue p0.s
2855 ; CHECK-2p2-NEXT: frinti z0.h, p0/z, z2.h
2856 ; CHECK-2p2-NEXT: ret
2858 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)
2859 %0 = tail call <vscale x 4 x half> @llvm.aarch64.sve.frinti.nxv4f16(<vscale x 4 x half> %x, <vscale x 4 x i1> %pg, <vscale x 4 x half> %y)
2860 ret <vscale x 4 x half> %0
2864 define <vscale x 2 x half> @test_svfrinti_nxv2f16_ptrue_u(double %z0, <vscale x 2 x half> %x) {
2865 ; CHECK-LABEL: test_svfrinti_nxv2f16_ptrue_u:
2866 ; CHECK: // %bb.0: // %entry
2867 ; CHECK-NEXT: ptrue p0.d
2868 ; CHECK-NEXT: movprfx z0, z1
2869 ; CHECK-NEXT: frinti z0.h, p0/m, z1.h
2872 ; CHECK-2p2-LABEL: test_svfrinti_nxv2f16_ptrue_u:
2873 ; CHECK-2p2: // %bb.0: // %entry
2874 ; CHECK-2p2-NEXT: ptrue p0.d
2875 ; CHECK-2p2-NEXT: frinti z0.h, p0/z, z1.h
2876 ; CHECK-2p2-NEXT: ret
2878 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)
2879 %0 = tail call <vscale x 2 x half> @llvm.aarch64.sve.frinti.nxv2f16(<vscale x 2 x half> poison, <vscale x 2 x i1> %pg, <vscale x 2 x half> %x)
2880 ret <vscale x 2 x half> %0
2883 define <vscale x 2 x half> @test_svfrinti_nxv2f16_ptrue(double %z0, <vscale x 2 x half> %x, <vscale x 2 x half> %y) {
2884 ; CHECK-LABEL: test_svfrinti_nxv2f16_ptrue:
2885 ; CHECK: // %bb.0: // %entry
2886 ; CHECK-NEXT: ptrue p0.d
2887 ; CHECK-NEXT: movprfx z0, z2
2888 ; CHECK-NEXT: frinti z0.h, p0/m, z2.h
2891 ; CHECK-2p2-LABEL: test_svfrinti_nxv2f16_ptrue:
2892 ; CHECK-2p2: // %bb.0: // %entry
2893 ; CHECK-2p2-NEXT: ptrue p0.d
2894 ; CHECK-2p2-NEXT: frinti z0.h, p0/z, z2.h
2895 ; CHECK-2p2-NEXT: ret
2897 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)
2898 %0 = tail call <vscale x 2 x half> @llvm.aarch64.sve.frinti.nxv2f16(<vscale x 2 x half> %x, <vscale x 2 x i1> %pg, <vscale x 2 x half> %y)
2899 ret <vscale x 2 x half> %0
2903 define <vscale x 2 x float> @test_svfrinti_nxv2f32_ptrue_u(double %z0, <vscale x 2 x float> %x) {
2904 ; CHECK-LABEL: test_svfrinti_nxv2f32_ptrue_u:
2905 ; CHECK: // %bb.0: // %entry
2906 ; CHECK-NEXT: ptrue p0.d
2907 ; CHECK-NEXT: movprfx z0, z1
2908 ; CHECK-NEXT: frinti z0.s, p0/m, z1.s
2911 ; CHECK-2p2-LABEL: test_svfrinti_nxv2f32_ptrue_u:
2912 ; CHECK-2p2: // %bb.0: // %entry
2913 ; CHECK-2p2-NEXT: ptrue p0.d
2914 ; CHECK-2p2-NEXT: frinti z0.s, p0/z, z1.s
2915 ; CHECK-2p2-NEXT: ret
2917 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)
2918 %0 = tail call <vscale x 2 x float> @llvm.aarch64.sve.frinti.nxv2f32(<vscale x 2 x float> poison, <vscale x 2 x i1> %pg, <vscale x 2 x float> %x)
2919 ret <vscale x 2 x float> %0
2922 define <vscale x 2 x float> @test_svfrinti_nxv2f32_ptrue(double %z0, <vscale x 2 x float> %x, <vscale x 2 x float> %y) {
2923 ; CHECK-LABEL: test_svfrinti_nxv2f32_ptrue:
2924 ; CHECK: // %bb.0: // %entry
2925 ; CHECK-NEXT: ptrue p0.d
2926 ; CHECK-NEXT: movprfx z0, z2
2927 ; CHECK-NEXT: frinti z0.s, p0/m, z2.s
2930 ; CHECK-2p2-LABEL: test_svfrinti_nxv2f32_ptrue:
2931 ; CHECK-2p2: // %bb.0: // %entry
2932 ; CHECK-2p2-NEXT: ptrue p0.d
2933 ; CHECK-2p2-NEXT: frinti z0.s, p0/z, z2.s
2934 ; CHECK-2p2-NEXT: ret
2936 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)
2937 %0 = tail call <vscale x 2 x float> @llvm.aarch64.sve.frinti.nxv2f32(<vscale x 2 x float> %x, <vscale x 2 x i1> %pg, <vscale x 2 x float> %y)
2938 ret <vscale x 2 x float> %0
2942 define <vscale x 4 x float> @test_svfrinti_nxv4f32_ptrue_u(double %z0, <vscale x 4 x float> %x) {
2943 ; CHECK-LABEL: test_svfrinti_nxv4f32_ptrue_u:
2944 ; CHECK: // %bb.0: // %entry
2945 ; CHECK-NEXT: ptrue p0.s
2946 ; CHECK-NEXT: movprfx z0, z1
2947 ; CHECK-NEXT: frinti z0.s, p0/m, z1.s
2950 ; CHECK-2p2-LABEL: test_svfrinti_nxv4f32_ptrue_u:
2951 ; CHECK-2p2: // %bb.0: // %entry
2952 ; CHECK-2p2-NEXT: ptrue p0.s
2953 ; CHECK-2p2-NEXT: frinti z0.s, p0/z, z1.s
2954 ; CHECK-2p2-NEXT: ret
2956 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)
2957 %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.frinti.nxv4f32(<vscale x 4 x float> poison, <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)
2958 ret <vscale x 4 x float> %0
2961 define <vscale x 4 x float> @test_svfrinti_nxv4f32_ptrue(double %z0, <vscale x 4 x float> %x, <vscale x 4 x float> %y) {
2962 ; CHECK-LABEL: test_svfrinti_nxv4f32_ptrue:
2963 ; CHECK: // %bb.0: // %entry
2964 ; CHECK-NEXT: ptrue p0.s
2965 ; CHECK-NEXT: movprfx z0, z2
2966 ; CHECK-NEXT: frinti z0.s, p0/m, z2.s
2969 ; CHECK-2p2-LABEL: test_svfrinti_nxv4f32_ptrue:
2970 ; CHECK-2p2: // %bb.0: // %entry
2971 ; CHECK-2p2-NEXT: ptrue p0.s
2972 ; CHECK-2p2-NEXT: frinti z0.s, p0/z, z2.s
2973 ; CHECK-2p2-NEXT: ret
2975 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)
2976 %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.frinti.nxv4f32(<vscale x 4 x float> %x, <vscale x 4 x i1> %pg, <vscale x 4 x float> %y)
2977 ret <vscale x 4 x float> %0
2981 define <vscale x 2 x double> @test_svfrinti_nxv2f64_ptrue_u(double %z0, <vscale x 2 x double> %x) {
2982 ; CHECK-LABEL: test_svfrinti_nxv2f64_ptrue_u:
2983 ; CHECK: // %bb.0: // %entry
2984 ; CHECK-NEXT: ptrue p0.d
2985 ; CHECK-NEXT: movprfx z0, z1
2986 ; CHECK-NEXT: frinti z0.d, p0/m, z1.d
2989 ; CHECK-2p2-LABEL: test_svfrinti_nxv2f64_ptrue_u:
2990 ; CHECK-2p2: // %bb.0: // %entry
2991 ; CHECK-2p2-NEXT: ptrue p0.d
2992 ; CHECK-2p2-NEXT: frinti z0.d, p0/z, z1.d
2993 ; CHECK-2p2-NEXT: ret
2995 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)
2996 %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.frinti.nxv2f64(<vscale x 2 x double> poison, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)
2997 ret <vscale x 2 x double> %0
3000 define <vscale x 2 x double> @test_svfrinti_nxv2f64_ptrue(double %z0, <vscale x 2 x double> %x, <vscale x 2 x double> %y) {
3001 ; CHECK-LABEL: test_svfrinti_nxv2f64_ptrue:
3002 ; CHECK: // %bb.0: // %entry
3003 ; CHECK-NEXT: ptrue p0.d
3004 ; CHECK-NEXT: movprfx z0, z2
3005 ; CHECK-NEXT: frinti z0.d, p0/m, z2.d
3008 ; CHECK-2p2-LABEL: test_svfrinti_nxv2f64_ptrue:
3009 ; CHECK-2p2: // %bb.0: // %entry
3010 ; CHECK-2p2-NEXT: ptrue p0.d
3011 ; CHECK-2p2-NEXT: frinti z0.d, p0/z, z2.d
3012 ; CHECK-2p2-NEXT: ret
3014 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)
3015 %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.frinti.nxv2f64(<vscale x 2 x double> %x, <vscale x 2 x i1> %pg, <vscale x 2 x double> %y)
3016 ret <vscale x 2 x double> %0
3020 define <vscale x 8 x half> @test_svfrintm_nxv8f16_ptrue_u(double %z0, <vscale x 8 x half> %x) {
3021 ; CHECK-LABEL: test_svfrintm_nxv8f16_ptrue_u:
3022 ; CHECK: // %bb.0: // %entry
3023 ; CHECK-NEXT: ptrue p0.h
3024 ; CHECK-NEXT: movprfx z0, z1
3025 ; CHECK-NEXT: frintm z0.h, p0/m, z1.h
3028 ; CHECK-2p2-LABEL: test_svfrintm_nxv8f16_ptrue_u:
3029 ; CHECK-2p2: // %bb.0: // %entry
3030 ; CHECK-2p2-NEXT: ptrue p0.h
3031 ; CHECK-2p2-NEXT: frintm z0.h, p0/z, z1.h
3032 ; CHECK-2p2-NEXT: ret
3034 %pg = call <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 31)
3035 %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.frintm.nxv8f16(<vscale x 8 x half> poison, <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)
3036 ret <vscale x 8 x half> %0
3039 define <vscale x 8 x half> @test_svfrintm_nxv8f16_ptrue(double %z0, <vscale x 8 x half> %x, <vscale x 8 x half> %y) {
3040 ; CHECK-LABEL: test_svfrintm_nxv8f16_ptrue:
3041 ; CHECK: // %bb.0: // %entry
3042 ; CHECK-NEXT: ptrue p0.h
3043 ; CHECK-NEXT: movprfx z0, z2
3044 ; CHECK-NEXT: frintm z0.h, p0/m, z2.h
3047 ; CHECK-2p2-LABEL: test_svfrintm_nxv8f16_ptrue:
3048 ; CHECK-2p2: // %bb.0: // %entry
3049 ; CHECK-2p2-NEXT: ptrue p0.h
3050 ; CHECK-2p2-NEXT: frintm z0.h, p0/z, z2.h
3051 ; CHECK-2p2-NEXT: ret
3053 %pg = call <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 31)
3054 %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.frintm.nxv8f16(<vscale x 8 x half> %x, <vscale x 8 x i1> %pg, <vscale x 8 x half> %y)
3055 ret <vscale x 8 x half> %0
3059 define <vscale x 4 x half> @test_svfrintm_nxv4f16_ptrue_u(double %z0, <vscale x 4 x half> %x) {
3060 ; CHECK-LABEL: test_svfrintm_nxv4f16_ptrue_u:
3061 ; CHECK: // %bb.0: // %entry
3062 ; CHECK-NEXT: ptrue p0.s
3063 ; CHECK-NEXT: movprfx z0, z1
3064 ; CHECK-NEXT: frintm z0.h, p0/m, z1.h
3067 ; CHECK-2p2-LABEL: test_svfrintm_nxv4f16_ptrue_u:
3068 ; CHECK-2p2: // %bb.0: // %entry
3069 ; CHECK-2p2-NEXT: ptrue p0.s
3070 ; CHECK-2p2-NEXT: frintm z0.h, p0/z, z1.h
3071 ; CHECK-2p2-NEXT: ret
3073 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)
3074 %0 = tail call <vscale x 4 x half> @llvm.aarch64.sve.frintm.nxv4f16(<vscale x 4 x half> poison, <vscale x 4 x i1> %pg, <vscale x 4 x half> %x)
3075 ret <vscale x 4 x half> %0
3078 define <vscale x 4 x half> @test_svfrintm_nxv4f16_ptrue(double %z0, <vscale x 4 x half> %x, <vscale x 4 x half> %y) {
3079 ; CHECK-LABEL: test_svfrintm_nxv4f16_ptrue:
3080 ; CHECK: // %bb.0: // %entry
3081 ; CHECK-NEXT: ptrue p0.s
3082 ; CHECK-NEXT: movprfx z0, z2
3083 ; CHECK-NEXT: frintm z0.h, p0/m, z2.h
3086 ; CHECK-2p2-LABEL: test_svfrintm_nxv4f16_ptrue:
3087 ; CHECK-2p2: // %bb.0: // %entry
3088 ; CHECK-2p2-NEXT: ptrue p0.s
3089 ; CHECK-2p2-NEXT: frintm z0.h, p0/z, z2.h
3090 ; CHECK-2p2-NEXT: ret
3092 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)
3093 %0 = tail call <vscale x 4 x half> @llvm.aarch64.sve.frintm.nxv4f16(<vscale x 4 x half> %x, <vscale x 4 x i1> %pg, <vscale x 4 x half> %y)
3094 ret <vscale x 4 x half> %0
3098 define <vscale x 2 x half> @test_svfrintm_nxv2f16_ptrue_u(double %z0, <vscale x 2 x half> %x) {
3099 ; CHECK-LABEL: test_svfrintm_nxv2f16_ptrue_u:
3100 ; CHECK: // %bb.0: // %entry
3101 ; CHECK-NEXT: ptrue p0.d
3102 ; CHECK-NEXT: movprfx z0, z1
3103 ; CHECK-NEXT: frintm z0.h, p0/m, z1.h
3106 ; CHECK-2p2-LABEL: test_svfrintm_nxv2f16_ptrue_u:
3107 ; CHECK-2p2: // %bb.0: // %entry
3108 ; CHECK-2p2-NEXT: ptrue p0.d
3109 ; CHECK-2p2-NEXT: frintm z0.h, p0/z, z1.h
3110 ; CHECK-2p2-NEXT: ret
3112 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)
3113 %0 = tail call <vscale x 2 x half> @llvm.aarch64.sve.frintm.nxv2f16(<vscale x 2 x half> poison, <vscale x 2 x i1> %pg, <vscale x 2 x half> %x)
3114 ret <vscale x 2 x half> %0
3117 define <vscale x 2 x half> @test_svfrintm_nxv2f16_ptrue(double %z0, <vscale x 2 x half> %x, <vscale x 2 x half> %y) {
3118 ; CHECK-LABEL: test_svfrintm_nxv2f16_ptrue:
3119 ; CHECK: // %bb.0: // %entry
3120 ; CHECK-NEXT: ptrue p0.d
3121 ; CHECK-NEXT: movprfx z0, z2
3122 ; CHECK-NEXT: frintm z0.h, p0/m, z2.h
3125 ; CHECK-2p2-LABEL: test_svfrintm_nxv2f16_ptrue:
3126 ; CHECK-2p2: // %bb.0: // %entry
3127 ; CHECK-2p2-NEXT: ptrue p0.d
3128 ; CHECK-2p2-NEXT: frintm z0.h, p0/z, z2.h
3129 ; CHECK-2p2-NEXT: ret
3131 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)
3132 %0 = tail call <vscale x 2 x half> @llvm.aarch64.sve.frintm.nxv2f16(<vscale x 2 x half> %x, <vscale x 2 x i1> %pg, <vscale x 2 x half> %y)
3133 ret <vscale x 2 x half> %0
3137 define <vscale x 2 x float> @test_svfrintm_nxv2f32_ptrue_u(double %z0, <vscale x 2 x float> %x) {
3138 ; CHECK-LABEL: test_svfrintm_nxv2f32_ptrue_u:
3139 ; CHECK: // %bb.0: // %entry
3140 ; CHECK-NEXT: ptrue p0.d
3141 ; CHECK-NEXT: movprfx z0, z1
3142 ; CHECK-NEXT: frintm z0.s, p0/m, z1.s
3145 ; CHECK-2p2-LABEL: test_svfrintm_nxv2f32_ptrue_u:
3146 ; CHECK-2p2: // %bb.0: // %entry
3147 ; CHECK-2p2-NEXT: ptrue p0.d
3148 ; CHECK-2p2-NEXT: frintm z0.s, p0/z, z1.s
3149 ; CHECK-2p2-NEXT: ret
3151 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)
3152 %0 = tail call <vscale x 2 x float> @llvm.aarch64.sve.frintm.nxv2f32(<vscale x 2 x float> poison, <vscale x 2 x i1> %pg, <vscale x 2 x float> %x)
3153 ret <vscale x 2 x float> %0
3156 define <vscale x 2 x float> @test_svfrintm_nxv2f32_ptrue(double %z0, <vscale x 2 x float> %x, <vscale x 2 x float> %y) {
3157 ; CHECK-LABEL: test_svfrintm_nxv2f32_ptrue:
3158 ; CHECK: // %bb.0: // %entry
3159 ; CHECK-NEXT: ptrue p0.d
3160 ; CHECK-NEXT: movprfx z0, z2
3161 ; CHECK-NEXT: frintm z0.s, p0/m, z2.s
3164 ; CHECK-2p2-LABEL: test_svfrintm_nxv2f32_ptrue:
3165 ; CHECK-2p2: // %bb.0: // %entry
3166 ; CHECK-2p2-NEXT: ptrue p0.d
3167 ; CHECK-2p2-NEXT: frintm z0.s, p0/z, z2.s
3168 ; CHECK-2p2-NEXT: ret
3170 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)
3171 %0 = tail call <vscale x 2 x float> @llvm.aarch64.sve.frintm.nxv2f32(<vscale x 2 x float> %x, <vscale x 2 x i1> %pg, <vscale x 2 x float> %y)
3172 ret <vscale x 2 x float> %0
3176 define <vscale x 4 x float> @test_svfrintm_nxv4f32_ptrue_u(double %z0, <vscale x 4 x float> %x) {
3177 ; CHECK-LABEL: test_svfrintm_nxv4f32_ptrue_u:
3178 ; CHECK: // %bb.0: // %entry
3179 ; CHECK-NEXT: ptrue p0.s
3180 ; CHECK-NEXT: movprfx z0, z1
3181 ; CHECK-NEXT: frintm z0.s, p0/m, z1.s
3184 ; CHECK-2p2-LABEL: test_svfrintm_nxv4f32_ptrue_u:
3185 ; CHECK-2p2: // %bb.0: // %entry
3186 ; CHECK-2p2-NEXT: ptrue p0.s
3187 ; CHECK-2p2-NEXT: frintm z0.s, p0/z, z1.s
3188 ; CHECK-2p2-NEXT: ret
3190 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)
3191 %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.frintm.nxv4f32(<vscale x 4 x float> poison, <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)
3192 ret <vscale x 4 x float> %0
3195 define <vscale x 4 x float> @test_svfrintm_nxv4f32_ptrue(double %z0, <vscale x 4 x float> %x, <vscale x 4 x float> %y) {
3196 ; CHECK-LABEL: test_svfrintm_nxv4f32_ptrue:
3197 ; CHECK: // %bb.0: // %entry
3198 ; CHECK-NEXT: ptrue p0.s
3199 ; CHECK-NEXT: movprfx z0, z2
3200 ; CHECK-NEXT: frintm z0.s, p0/m, z2.s
3203 ; CHECK-2p2-LABEL: test_svfrintm_nxv4f32_ptrue:
3204 ; CHECK-2p2: // %bb.0: // %entry
3205 ; CHECK-2p2-NEXT: ptrue p0.s
3206 ; CHECK-2p2-NEXT: frintm z0.s, p0/z, z2.s
3207 ; CHECK-2p2-NEXT: ret
3209 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)
3210 %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.frintm.nxv4f32(<vscale x 4 x float> %x, <vscale x 4 x i1> %pg, <vscale x 4 x float> %y)
3211 ret <vscale x 4 x float> %0
3215 define <vscale x 2 x double> @test_svfrintm_nxv2f64_ptrue_u(double %z0, <vscale x 2 x double> %x) {
3216 ; CHECK-LABEL: test_svfrintm_nxv2f64_ptrue_u:
3217 ; CHECK: // %bb.0: // %entry
3218 ; CHECK-NEXT: ptrue p0.d
3219 ; CHECK-NEXT: movprfx z0, z1
3220 ; CHECK-NEXT: frintm z0.d, p0/m, z1.d
3223 ; CHECK-2p2-LABEL: test_svfrintm_nxv2f64_ptrue_u:
3224 ; CHECK-2p2: // %bb.0: // %entry
3225 ; CHECK-2p2-NEXT: ptrue p0.d
3226 ; CHECK-2p2-NEXT: frintm z0.d, p0/z, z1.d
3227 ; CHECK-2p2-NEXT: ret
3229 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)
3230 %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.frintm.nxv2f64(<vscale x 2 x double> poison, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)
3231 ret <vscale x 2 x double> %0
3234 define <vscale x 2 x double> @test_svfrintm_nxv2f64_ptrue(double %z0, <vscale x 2 x double> %x, <vscale x 2 x double> %y) {
3235 ; CHECK-LABEL: test_svfrintm_nxv2f64_ptrue:
3236 ; CHECK: // %bb.0: // %entry
3237 ; CHECK-NEXT: ptrue p0.d
3238 ; CHECK-NEXT: movprfx z0, z2
3239 ; CHECK-NEXT: frintm z0.d, p0/m, z2.d
3242 ; CHECK-2p2-LABEL: test_svfrintm_nxv2f64_ptrue:
3243 ; CHECK-2p2: // %bb.0: // %entry
3244 ; CHECK-2p2-NEXT: ptrue p0.d
3245 ; CHECK-2p2-NEXT: frintm z0.d, p0/z, z2.d
3246 ; CHECK-2p2-NEXT: ret
3248 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)
3249 %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.frintm.nxv2f64(<vscale x 2 x double> %x, <vscale x 2 x i1> %pg, <vscale x 2 x double> %y)
3250 ret <vscale x 2 x double> %0
3254 define <vscale x 8 x half> @test_svfrintn_nxv8f16_ptrue_u(double %z0, <vscale x 8 x half> %x) {
3255 ; CHECK-LABEL: test_svfrintn_nxv8f16_ptrue_u:
3256 ; CHECK: // %bb.0: // %entry
3257 ; CHECK-NEXT: ptrue p0.h
3258 ; CHECK-NEXT: movprfx z0, z1
3259 ; CHECK-NEXT: frintn z0.h, p0/m, z1.h
3262 ; CHECK-2p2-LABEL: test_svfrintn_nxv8f16_ptrue_u:
3263 ; CHECK-2p2: // %bb.0: // %entry
3264 ; CHECK-2p2-NEXT: ptrue p0.h
3265 ; CHECK-2p2-NEXT: frintn z0.h, p0/z, z1.h
3266 ; CHECK-2p2-NEXT: ret
3268 %pg = call <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 31)
3269 %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.frintn.nxv8f16(<vscale x 8 x half> poison, <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)
3270 ret <vscale x 8 x half> %0
3273 define <vscale x 8 x half> @test_svfrintn_nxv8f16_ptrue(double %z0, <vscale x 8 x half> %x, <vscale x 8 x half> %y) {
3274 ; CHECK-LABEL: test_svfrintn_nxv8f16_ptrue:
3275 ; CHECK: // %bb.0: // %entry
3276 ; CHECK-NEXT: ptrue p0.h
3277 ; CHECK-NEXT: movprfx z0, z2
3278 ; CHECK-NEXT: frintn z0.h, p0/m, z2.h
3281 ; CHECK-2p2-LABEL: test_svfrintn_nxv8f16_ptrue:
3282 ; CHECK-2p2: // %bb.0: // %entry
3283 ; CHECK-2p2-NEXT: ptrue p0.h
3284 ; CHECK-2p2-NEXT: frintn z0.h, p0/z, z2.h
3285 ; CHECK-2p2-NEXT: ret
3287 %pg = call <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 31)
3288 %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.frintn.nxv8f16(<vscale x 8 x half> %x, <vscale x 8 x i1> %pg, <vscale x 8 x half> %y)
3289 ret <vscale x 8 x half> %0
3293 define <vscale x 4 x half> @test_svfrintn_nxv4f16_ptrue_u(double %z0, <vscale x 4 x half> %x) {
3294 ; CHECK-LABEL: test_svfrintn_nxv4f16_ptrue_u:
3295 ; CHECK: // %bb.0: // %entry
3296 ; CHECK-NEXT: ptrue p0.s
3297 ; CHECK-NEXT: movprfx z0, z1
3298 ; CHECK-NEXT: frintn z0.h, p0/m, z1.h
3301 ; CHECK-2p2-LABEL: test_svfrintn_nxv4f16_ptrue_u:
3302 ; CHECK-2p2: // %bb.0: // %entry
3303 ; CHECK-2p2-NEXT: ptrue p0.s
3304 ; CHECK-2p2-NEXT: frintn z0.h, p0/z, z1.h
3305 ; CHECK-2p2-NEXT: ret
3307 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)
3308 %0 = tail call <vscale x 4 x half> @llvm.aarch64.sve.frintn.nxv4f16(<vscale x 4 x half> poison, <vscale x 4 x i1> %pg, <vscale x 4 x half> %x)
3309 ret <vscale x 4 x half> %0
3312 define <vscale x 4 x half> @test_svfrintn_nxv4f16_ptrue(double %z0, <vscale x 4 x half> %x, <vscale x 4 x half> %y) {
3313 ; CHECK-LABEL: test_svfrintn_nxv4f16_ptrue:
3314 ; CHECK: // %bb.0: // %entry
3315 ; CHECK-NEXT: ptrue p0.s
3316 ; CHECK-NEXT: movprfx z0, z2
3317 ; CHECK-NEXT: frintn z0.h, p0/m, z2.h
3320 ; CHECK-2p2-LABEL: test_svfrintn_nxv4f16_ptrue:
3321 ; CHECK-2p2: // %bb.0: // %entry
3322 ; CHECK-2p2-NEXT: ptrue p0.s
3323 ; CHECK-2p2-NEXT: frintn z0.h, p0/z, z2.h
3324 ; CHECK-2p2-NEXT: ret
3326 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)
3327 %0 = tail call <vscale x 4 x half> @llvm.aarch64.sve.frintn.nxv4f16(<vscale x 4 x half> %x, <vscale x 4 x i1> %pg, <vscale x 4 x half> %y)
3328 ret <vscale x 4 x half> %0
3332 define <vscale x 2 x half> @test_svfrintn_nxv2f16_ptrue_u(double %z0, <vscale x 2 x half> %x) {
3333 ; CHECK-LABEL: test_svfrintn_nxv2f16_ptrue_u:
3334 ; CHECK: // %bb.0: // %entry
3335 ; CHECK-NEXT: ptrue p0.d
3336 ; CHECK-NEXT: movprfx z0, z1
3337 ; CHECK-NEXT: frintn z0.h, p0/m, z1.h
3340 ; CHECK-2p2-LABEL: test_svfrintn_nxv2f16_ptrue_u:
3341 ; CHECK-2p2: // %bb.0: // %entry
3342 ; CHECK-2p2-NEXT: ptrue p0.d
3343 ; CHECK-2p2-NEXT: frintn z0.h, p0/z, z1.h
3344 ; CHECK-2p2-NEXT: ret
3346 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)
3347 %0 = tail call <vscale x 2 x half> @llvm.aarch64.sve.frintn.nxv2f16(<vscale x 2 x half> poison, <vscale x 2 x i1> %pg, <vscale x 2 x half> %x)
3348 ret <vscale x 2 x half> %0
3351 define <vscale x 2 x half> @test_svfrintn_nxv2f16_ptrue(double %z0, <vscale x 2 x half> %x, <vscale x 2 x half> %y) {
3352 ; CHECK-LABEL: test_svfrintn_nxv2f16_ptrue:
3353 ; CHECK: // %bb.0: // %entry
3354 ; CHECK-NEXT: ptrue p0.d
3355 ; CHECK-NEXT: movprfx z0, z2
3356 ; CHECK-NEXT: frintn z0.h, p0/m, z2.h
3359 ; CHECK-2p2-LABEL: test_svfrintn_nxv2f16_ptrue:
3360 ; CHECK-2p2: // %bb.0: // %entry
3361 ; CHECK-2p2-NEXT: ptrue p0.d
3362 ; CHECK-2p2-NEXT: frintn z0.h, p0/z, z2.h
3363 ; CHECK-2p2-NEXT: ret
3365 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)
3366 %0 = tail call <vscale x 2 x half> @llvm.aarch64.sve.frintn.nxv2f16(<vscale x 2 x half> %x, <vscale x 2 x i1> %pg, <vscale x 2 x half> %y)
3367 ret <vscale x 2 x half> %0
3371 define <vscale x 2 x float> @test_svfrintn_nxv2f32_ptrue_u(double %z0, <vscale x 2 x float> %x) {
3372 ; CHECK-LABEL: test_svfrintn_nxv2f32_ptrue_u:
3373 ; CHECK: // %bb.0: // %entry
3374 ; CHECK-NEXT: ptrue p0.d
3375 ; CHECK-NEXT: movprfx z0, z1
3376 ; CHECK-NEXT: frintn z0.s, p0/m, z1.s
3379 ; CHECK-2p2-LABEL: test_svfrintn_nxv2f32_ptrue_u:
3380 ; CHECK-2p2: // %bb.0: // %entry
3381 ; CHECK-2p2-NEXT: ptrue p0.d
3382 ; CHECK-2p2-NEXT: frintn z0.s, p0/z, z1.s
3383 ; CHECK-2p2-NEXT: ret
3385 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)
3386 %0 = tail call <vscale x 2 x float> @llvm.aarch64.sve.frintn.nxv2f32(<vscale x 2 x float> poison, <vscale x 2 x i1> %pg, <vscale x 2 x float> %x)
3387 ret <vscale x 2 x float> %0
3390 define <vscale x 2 x float> @test_svfrintn_nxv2f32_ptrue(double %z0, <vscale x 2 x float> %x, <vscale x 2 x float> %y) {
3391 ; CHECK-LABEL: test_svfrintn_nxv2f32_ptrue:
3392 ; CHECK: // %bb.0: // %entry
3393 ; CHECK-NEXT: ptrue p0.d
3394 ; CHECK-NEXT: movprfx z0, z2
3395 ; CHECK-NEXT: frintn z0.s, p0/m, z2.s
3398 ; CHECK-2p2-LABEL: test_svfrintn_nxv2f32_ptrue:
3399 ; CHECK-2p2: // %bb.0: // %entry
3400 ; CHECK-2p2-NEXT: ptrue p0.d
3401 ; CHECK-2p2-NEXT: frintn z0.s, p0/z, z2.s
3402 ; CHECK-2p2-NEXT: ret
3404 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)
3405 %0 = tail call <vscale x 2 x float> @llvm.aarch64.sve.frintn.nxv2f32(<vscale x 2 x float> %x, <vscale x 2 x i1> %pg, <vscale x 2 x float> %y)
3406 ret <vscale x 2 x float> %0
3410 define <vscale x 4 x float> @test_svfrintn_nxv4f32_ptrue_u(double %z0, <vscale x 4 x float> %x) {
3411 ; CHECK-LABEL: test_svfrintn_nxv4f32_ptrue_u:
3412 ; CHECK: // %bb.0: // %entry
3413 ; CHECK-NEXT: ptrue p0.s
3414 ; CHECK-NEXT: movprfx z0, z1
3415 ; CHECK-NEXT: frintn z0.s, p0/m, z1.s
3418 ; CHECK-2p2-LABEL: test_svfrintn_nxv4f32_ptrue_u:
3419 ; CHECK-2p2: // %bb.0: // %entry
3420 ; CHECK-2p2-NEXT: ptrue p0.s
3421 ; CHECK-2p2-NEXT: frintn z0.s, p0/z, z1.s
3422 ; CHECK-2p2-NEXT: ret
3424 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)
3425 %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.frintn.nxv4f32(<vscale x 4 x float> poison, <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)
3426 ret <vscale x 4 x float> %0
3429 define <vscale x 4 x float> @test_svfrintn_nxv4f32_ptrue(double %z0, <vscale x 4 x float> %x, <vscale x 4 x float> %y) {
3430 ; CHECK-LABEL: test_svfrintn_nxv4f32_ptrue:
3431 ; CHECK: // %bb.0: // %entry
3432 ; CHECK-NEXT: ptrue p0.s
3433 ; CHECK-NEXT: movprfx z0, z2
3434 ; CHECK-NEXT: frintn z0.s, p0/m, z2.s
3437 ; CHECK-2p2-LABEL: test_svfrintn_nxv4f32_ptrue:
3438 ; CHECK-2p2: // %bb.0: // %entry
3439 ; CHECK-2p2-NEXT: ptrue p0.s
3440 ; CHECK-2p2-NEXT: frintn z0.s, p0/z, z2.s
3441 ; CHECK-2p2-NEXT: ret
3443 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)
3444 %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.frintn.nxv4f32(<vscale x 4 x float> %x, <vscale x 4 x i1> %pg, <vscale x 4 x float> %y)
3445 ret <vscale x 4 x float> %0
3449 define <vscale x 2 x double> @test_svfrintn_nxv2f64_ptrue_u(double %z0, <vscale x 2 x double> %x) {
3450 ; CHECK-LABEL: test_svfrintn_nxv2f64_ptrue_u:
3451 ; CHECK: // %bb.0: // %entry
3452 ; CHECK-NEXT: ptrue p0.d
3453 ; CHECK-NEXT: movprfx z0, z1
3454 ; CHECK-NEXT: frintn z0.d, p0/m, z1.d
3457 ; CHECK-2p2-LABEL: test_svfrintn_nxv2f64_ptrue_u:
3458 ; CHECK-2p2: // %bb.0: // %entry
3459 ; CHECK-2p2-NEXT: ptrue p0.d
3460 ; CHECK-2p2-NEXT: frintn z0.d, p0/z, z1.d
3461 ; CHECK-2p2-NEXT: ret
3463 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)
3464 %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.frintn.nxv2f64(<vscale x 2 x double> poison, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)
3465 ret <vscale x 2 x double> %0
3468 define <vscale x 2 x double> @test_svfrintn_nxv2f64_ptrue(double %z0, <vscale x 2 x double> %x, <vscale x 2 x double> %y) {
3469 ; CHECK-LABEL: test_svfrintn_nxv2f64_ptrue:
3470 ; CHECK: // %bb.0: // %entry
3471 ; CHECK-NEXT: ptrue p0.d
3472 ; CHECK-NEXT: movprfx z0, z2
3473 ; CHECK-NEXT: frintn z0.d, p0/m, z2.d
3476 ; CHECK-2p2-LABEL: test_svfrintn_nxv2f64_ptrue:
3477 ; CHECK-2p2: // %bb.0: // %entry
3478 ; CHECK-2p2-NEXT: ptrue p0.d
3479 ; CHECK-2p2-NEXT: frintn z0.d, p0/z, z2.d
3480 ; CHECK-2p2-NEXT: ret
3482 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)
3483 %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.frintn.nxv2f64(<vscale x 2 x double> %x, <vscale x 2 x i1> %pg, <vscale x 2 x double> %y)
3484 ret <vscale x 2 x double> %0
3488 define <vscale x 8 x half> @test_svfrintp_nxv8f16_ptrue_u(double %z0, <vscale x 8 x half> %x) {
3489 ; CHECK-LABEL: test_svfrintp_nxv8f16_ptrue_u:
3490 ; CHECK: // %bb.0: // %entry
3491 ; CHECK-NEXT: ptrue p0.h
3492 ; CHECK-NEXT: movprfx z0, z1
3493 ; CHECK-NEXT: frintp z0.h, p0/m, z1.h
3496 ; CHECK-2p2-LABEL: test_svfrintp_nxv8f16_ptrue_u:
3497 ; CHECK-2p2: // %bb.0: // %entry
3498 ; CHECK-2p2-NEXT: ptrue p0.h
3499 ; CHECK-2p2-NEXT: frintp z0.h, p0/z, z1.h
3500 ; CHECK-2p2-NEXT: ret
3502 %pg = call <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 31)
3503 %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.frintp.nxv8f16(<vscale x 8 x half> poison, <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)
3504 ret <vscale x 8 x half> %0
3507 define <vscale x 8 x half> @test_svfrintp_nxv8f16_ptrue(double %z0, <vscale x 8 x half> %x, <vscale x 8 x half> %y) {
3508 ; CHECK-LABEL: test_svfrintp_nxv8f16_ptrue:
3509 ; CHECK: // %bb.0: // %entry
3510 ; CHECK-NEXT: ptrue p0.h
3511 ; CHECK-NEXT: movprfx z0, z2
3512 ; CHECK-NEXT: frintp z0.h, p0/m, z2.h
3515 ; CHECK-2p2-LABEL: test_svfrintp_nxv8f16_ptrue:
3516 ; CHECK-2p2: // %bb.0: // %entry
3517 ; CHECK-2p2-NEXT: ptrue p0.h
3518 ; CHECK-2p2-NEXT: frintp z0.h, p0/z, z2.h
3519 ; CHECK-2p2-NEXT: ret
3521 %pg = call <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 31)
3522 %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.frintp.nxv8f16(<vscale x 8 x half> %x, <vscale x 8 x i1> %pg, <vscale x 8 x half> %y)
3523 ret <vscale x 8 x half> %0
3527 define <vscale x 4 x half> @test_svfrintp_nxv4f16_ptrue_u(double %z0, <vscale x 4 x half> %x) {
3528 ; CHECK-LABEL: test_svfrintp_nxv4f16_ptrue_u:
3529 ; CHECK: // %bb.0: // %entry
3530 ; CHECK-NEXT: ptrue p0.s
3531 ; CHECK-NEXT: movprfx z0, z1
3532 ; CHECK-NEXT: frintp z0.h, p0/m, z1.h
3535 ; CHECK-2p2-LABEL: test_svfrintp_nxv4f16_ptrue_u:
3536 ; CHECK-2p2: // %bb.0: // %entry
3537 ; CHECK-2p2-NEXT: ptrue p0.s
3538 ; CHECK-2p2-NEXT: frintp z0.h, p0/z, z1.h
3539 ; CHECK-2p2-NEXT: ret
3541 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)
3542 %0 = tail call <vscale x 4 x half> @llvm.aarch64.sve.frintp.nxv4f16(<vscale x 4 x half> poison, <vscale x 4 x i1> %pg, <vscale x 4 x half> %x)
3543 ret <vscale x 4 x half> %0
3546 define <vscale x 4 x half> @test_svfrintp_nxv4f16_ptrue(double %z0, <vscale x 4 x half> %x, <vscale x 4 x half> %y) {
3547 ; CHECK-LABEL: test_svfrintp_nxv4f16_ptrue:
3548 ; CHECK: // %bb.0: // %entry
3549 ; CHECK-NEXT: ptrue p0.s
3550 ; CHECK-NEXT: movprfx z0, z2
3551 ; CHECK-NEXT: frintp z0.h, p0/m, z2.h
3554 ; CHECK-2p2-LABEL: test_svfrintp_nxv4f16_ptrue:
3555 ; CHECK-2p2: // %bb.0: // %entry
3556 ; CHECK-2p2-NEXT: ptrue p0.s
3557 ; CHECK-2p2-NEXT: frintp z0.h, p0/z, z2.h
3558 ; CHECK-2p2-NEXT: ret
3560 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)
3561 %0 = tail call <vscale x 4 x half> @llvm.aarch64.sve.frintp.nxv4f16(<vscale x 4 x half> %x, <vscale x 4 x i1> %pg, <vscale x 4 x half> %y)
3562 ret <vscale x 4 x half> %0
3566 define <vscale x 2 x half> @test_svfrintp_nxv2f16_ptrue_u(double %z0, <vscale x 2 x half> %x) {
3567 ; CHECK-LABEL: test_svfrintp_nxv2f16_ptrue_u:
3568 ; CHECK: // %bb.0: // %entry
3569 ; CHECK-NEXT: ptrue p0.d
3570 ; CHECK-NEXT: movprfx z0, z1
3571 ; CHECK-NEXT: frintp z0.h, p0/m, z1.h
3574 ; CHECK-2p2-LABEL: test_svfrintp_nxv2f16_ptrue_u:
3575 ; CHECK-2p2: // %bb.0: // %entry
3576 ; CHECK-2p2-NEXT: ptrue p0.d
3577 ; CHECK-2p2-NEXT: frintp z0.h, p0/z, z1.h
3578 ; CHECK-2p2-NEXT: ret
3580 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)
3581 %0 = tail call <vscale x 2 x half> @llvm.aarch64.sve.frintp.nxv2f16(<vscale x 2 x half> poison, <vscale x 2 x i1> %pg, <vscale x 2 x half> %x)
3582 ret <vscale x 2 x half> %0
3585 define <vscale x 2 x half> @test_svfrintp_nxv2f16_ptrue(double %z0, <vscale x 2 x half> %x, <vscale x 2 x half> %y) {
3586 ; CHECK-LABEL: test_svfrintp_nxv2f16_ptrue:
3587 ; CHECK: // %bb.0: // %entry
3588 ; CHECK-NEXT: ptrue p0.d
3589 ; CHECK-NEXT: movprfx z0, z2
3590 ; CHECK-NEXT: frintp z0.h, p0/m, z2.h
3593 ; CHECK-2p2-LABEL: test_svfrintp_nxv2f16_ptrue:
3594 ; CHECK-2p2: // %bb.0: // %entry
3595 ; CHECK-2p2-NEXT: ptrue p0.d
3596 ; CHECK-2p2-NEXT: frintp z0.h, p0/z, z2.h
3597 ; CHECK-2p2-NEXT: ret
3599 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)
3600 %0 = tail call <vscale x 2 x half> @llvm.aarch64.sve.frintp.nxv2f16(<vscale x 2 x half> %x, <vscale x 2 x i1> %pg, <vscale x 2 x half> %y)
3601 ret <vscale x 2 x half> %0
3605 define <vscale x 2 x float> @test_svfrintp_nxv2f32_ptrue_u(double %z0, <vscale x 2 x float> %x) {
3606 ; CHECK-LABEL: test_svfrintp_nxv2f32_ptrue_u:
3607 ; CHECK: // %bb.0: // %entry
3608 ; CHECK-NEXT: ptrue p0.d
3609 ; CHECK-NEXT: movprfx z0, z1
3610 ; CHECK-NEXT: frintp z0.s, p0/m, z1.s
3613 ; CHECK-2p2-LABEL: test_svfrintp_nxv2f32_ptrue_u:
3614 ; CHECK-2p2: // %bb.0: // %entry
3615 ; CHECK-2p2-NEXT: ptrue p0.d
3616 ; CHECK-2p2-NEXT: frintp z0.s, p0/z, z1.s
3617 ; CHECK-2p2-NEXT: ret
3619 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)
3620 %0 = tail call <vscale x 2 x float> @llvm.aarch64.sve.frintp.nxv2f32(<vscale x 2 x float> poison, <vscale x 2 x i1> %pg, <vscale x 2 x float> %x)
3621 ret <vscale x 2 x float> %0
3624 define <vscale x 2 x float> @test_svfrintp_nxv2f32_ptrue(double %z0, <vscale x 2 x float> %x, <vscale x 2 x float> %y) {
3625 ; CHECK-LABEL: test_svfrintp_nxv2f32_ptrue:
3626 ; CHECK: // %bb.0: // %entry
3627 ; CHECK-NEXT: ptrue p0.d
3628 ; CHECK-NEXT: movprfx z0, z2
3629 ; CHECK-NEXT: frintp z0.s, p0/m, z2.s
3632 ; CHECK-2p2-LABEL: test_svfrintp_nxv2f32_ptrue:
3633 ; CHECK-2p2: // %bb.0: // %entry
3634 ; CHECK-2p2-NEXT: ptrue p0.d
3635 ; CHECK-2p2-NEXT: frintp z0.s, p0/z, z2.s
3636 ; CHECK-2p2-NEXT: ret
3638 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)
3639 %0 = tail call <vscale x 2 x float> @llvm.aarch64.sve.frintp.nxv2f32(<vscale x 2 x float> %x, <vscale x 2 x i1> %pg, <vscale x 2 x float> %y)
3640 ret <vscale x 2 x float> %0
3644 define <vscale x 4 x float> @test_svfrintp_nxv4f32_ptrue_u(double %z0, <vscale x 4 x float> %x) {
3645 ; CHECK-LABEL: test_svfrintp_nxv4f32_ptrue_u:
3646 ; CHECK: // %bb.0: // %entry
3647 ; CHECK-NEXT: ptrue p0.s
3648 ; CHECK-NEXT: movprfx z0, z1
3649 ; CHECK-NEXT: frintp z0.s, p0/m, z1.s
3652 ; CHECK-2p2-LABEL: test_svfrintp_nxv4f32_ptrue_u:
3653 ; CHECK-2p2: // %bb.0: // %entry
3654 ; CHECK-2p2-NEXT: ptrue p0.s
3655 ; CHECK-2p2-NEXT: frintp z0.s, p0/z, z1.s
3656 ; CHECK-2p2-NEXT: ret
3658 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)
3659 %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.frintp.nxv4f32(<vscale x 4 x float> poison, <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)
3660 ret <vscale x 4 x float> %0
3663 define <vscale x 4 x float> @test_svfrintp_nxv4f32_ptrue(double %z0, <vscale x 4 x float> %x, <vscale x 4 x float> %y) {
3664 ; CHECK-LABEL: test_svfrintp_nxv4f32_ptrue:
3665 ; CHECK: // %bb.0: // %entry
3666 ; CHECK-NEXT: ptrue p0.s
3667 ; CHECK-NEXT: movprfx z0, z2
3668 ; CHECK-NEXT: frintp z0.s, p0/m, z2.s
3671 ; CHECK-2p2-LABEL: test_svfrintp_nxv4f32_ptrue:
3672 ; CHECK-2p2: // %bb.0: // %entry
3673 ; CHECK-2p2-NEXT: ptrue p0.s
3674 ; CHECK-2p2-NEXT: frintp z0.s, p0/z, z2.s
3675 ; CHECK-2p2-NEXT: ret
3677 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)
3678 %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.frintp.nxv4f32(<vscale x 4 x float> %x, <vscale x 4 x i1> %pg, <vscale x 4 x float> %y)
3679 ret <vscale x 4 x float> %0
3683 define <vscale x 2 x double> @test_svfrintp_nxv2f64_ptrue_u(double %z0, <vscale x 2 x double> %x) {
3684 ; CHECK-LABEL: test_svfrintp_nxv2f64_ptrue_u:
3685 ; CHECK: // %bb.0: // %entry
3686 ; CHECK-NEXT: ptrue p0.d
3687 ; CHECK-NEXT: movprfx z0, z1
3688 ; CHECK-NEXT: frintp z0.d, p0/m, z1.d
3691 ; CHECK-2p2-LABEL: test_svfrintp_nxv2f64_ptrue_u:
3692 ; CHECK-2p2: // %bb.0: // %entry
3693 ; CHECK-2p2-NEXT: ptrue p0.d
3694 ; CHECK-2p2-NEXT: frintp z0.d, p0/z, z1.d
3695 ; CHECK-2p2-NEXT: ret
3697 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)
3698 %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.frintp.nxv2f64(<vscale x 2 x double> poison, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)
3699 ret <vscale x 2 x double> %0
3702 define <vscale x 2 x double> @test_svfrintp_nxv2f64_ptrue(double %z0, <vscale x 2 x double> %x, <vscale x 2 x double> %y) {
3703 ; CHECK-LABEL: test_svfrintp_nxv2f64_ptrue:
3704 ; CHECK: // %bb.0: // %entry
3705 ; CHECK-NEXT: ptrue p0.d
3706 ; CHECK-NEXT: movprfx z0, z2
3707 ; CHECK-NEXT: frintp z0.d, p0/m, z2.d
3710 ; CHECK-2p2-LABEL: test_svfrintp_nxv2f64_ptrue:
3711 ; CHECK-2p2: // %bb.0: // %entry
3712 ; CHECK-2p2-NEXT: ptrue p0.d
3713 ; CHECK-2p2-NEXT: frintp z0.d, p0/z, z2.d
3714 ; CHECK-2p2-NEXT: ret
3716 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)
3717 %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.frintp.nxv2f64(<vscale x 2 x double> %x, <vscale x 2 x i1> %pg, <vscale x 2 x double> %y)
3718 ret <vscale x 2 x double> %0
3722 define <vscale x 8 x half> @test_svfrintx_nxv8f16_ptrue_u(double %z0, <vscale x 8 x half> %x) {
3723 ; CHECK-LABEL: test_svfrintx_nxv8f16_ptrue_u:
3724 ; CHECK: // %bb.0: // %entry
3725 ; CHECK-NEXT: ptrue p0.h
3726 ; CHECK-NEXT: movprfx z0, z1
3727 ; CHECK-NEXT: frintx z0.h, p0/m, z1.h
3730 ; CHECK-2p2-LABEL: test_svfrintx_nxv8f16_ptrue_u:
3731 ; CHECK-2p2: // %bb.0: // %entry
3732 ; CHECK-2p2-NEXT: ptrue p0.h
3733 ; CHECK-2p2-NEXT: frintx z0.h, p0/z, z1.h
3734 ; CHECK-2p2-NEXT: ret
3736 %pg = call <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 31)
3737 %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.frintx.nxv8f16(<vscale x 8 x half> poison, <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)
3738 ret <vscale x 8 x half> %0
3741 define <vscale x 8 x half> @test_svfrintx_nxv8f16_ptrue(double %z0, <vscale x 8 x half> %x, <vscale x 8 x half> %y) {
3742 ; CHECK-LABEL: test_svfrintx_nxv8f16_ptrue:
3743 ; CHECK: // %bb.0: // %entry
3744 ; CHECK-NEXT: ptrue p0.h
3745 ; CHECK-NEXT: movprfx z0, z2
3746 ; CHECK-NEXT: frintx z0.h, p0/m, z2.h
3749 ; CHECK-2p2-LABEL: test_svfrintx_nxv8f16_ptrue:
3750 ; CHECK-2p2: // %bb.0: // %entry
3751 ; CHECK-2p2-NEXT: ptrue p0.h
3752 ; CHECK-2p2-NEXT: frintx z0.h, p0/z, z2.h
3753 ; CHECK-2p2-NEXT: ret
3755 %pg = call <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 31)
3756 %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.frintx.nxv8f16(<vscale x 8 x half> %x, <vscale x 8 x i1> %pg, <vscale x 8 x half> %y)
3757 ret <vscale x 8 x half> %0
3761 define <vscale x 4 x half> @test_svfrintx_nxv4f16_ptrue_u(double %z0, <vscale x 4 x half> %x) {
3762 ; CHECK-LABEL: test_svfrintx_nxv4f16_ptrue_u:
3763 ; CHECK: // %bb.0: // %entry
3764 ; CHECK-NEXT: ptrue p0.s
3765 ; CHECK-NEXT: movprfx z0, z1
3766 ; CHECK-NEXT: frintx z0.h, p0/m, z1.h
3769 ; CHECK-2p2-LABEL: test_svfrintx_nxv4f16_ptrue_u:
3770 ; CHECK-2p2: // %bb.0: // %entry
3771 ; CHECK-2p2-NEXT: ptrue p0.s
3772 ; CHECK-2p2-NEXT: frintx z0.h, p0/z, z1.h
3773 ; CHECK-2p2-NEXT: ret
3775 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)
3776 %0 = tail call <vscale x 4 x half> @llvm.aarch64.sve.frintx.nxv4f16(<vscale x 4 x half> poison, <vscale x 4 x i1> %pg, <vscale x 4 x half> %x)
3777 ret <vscale x 4 x half> %0
3780 define <vscale x 4 x half> @test_svfrintx_nxv4f16_ptrue(double %z0, <vscale x 4 x half> %x, <vscale x 4 x half> %y) {
3781 ; CHECK-LABEL: test_svfrintx_nxv4f16_ptrue:
3782 ; CHECK: // %bb.0: // %entry
3783 ; CHECK-NEXT: ptrue p0.s
3784 ; CHECK-NEXT: movprfx z0, z2
3785 ; CHECK-NEXT: frintx z0.h, p0/m, z2.h
3788 ; CHECK-2p2-LABEL: test_svfrintx_nxv4f16_ptrue:
3789 ; CHECK-2p2: // %bb.0: // %entry
3790 ; CHECK-2p2-NEXT: ptrue p0.s
3791 ; CHECK-2p2-NEXT: frintx z0.h, p0/z, z2.h
3792 ; CHECK-2p2-NEXT: ret
3794 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)
3795 %0 = tail call <vscale x 4 x half> @llvm.aarch64.sve.frintx.nxv4f16(<vscale x 4 x half> %x, <vscale x 4 x i1> %pg, <vscale x 4 x half> %y)
3796 ret <vscale x 4 x half> %0
3800 define <vscale x 2 x half> @test_svfrintx_nxv2f16_ptrue_u(double %z0, <vscale x 2 x half> %x) {
3801 ; CHECK-LABEL: test_svfrintx_nxv2f16_ptrue_u:
3802 ; CHECK: // %bb.0: // %entry
3803 ; CHECK-NEXT: ptrue p0.d
3804 ; CHECK-NEXT: movprfx z0, z1
3805 ; CHECK-NEXT: frintx z0.h, p0/m, z1.h
3808 ; CHECK-2p2-LABEL: test_svfrintx_nxv2f16_ptrue_u:
3809 ; CHECK-2p2: // %bb.0: // %entry
3810 ; CHECK-2p2-NEXT: ptrue p0.d
3811 ; CHECK-2p2-NEXT: frintx z0.h, p0/z, z1.h
3812 ; CHECK-2p2-NEXT: ret
3814 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)
3815 %0 = tail call <vscale x 2 x half> @llvm.aarch64.sve.frintx.nxv2f16(<vscale x 2 x half> poison, <vscale x 2 x i1> %pg, <vscale x 2 x half> %x)
3816 ret <vscale x 2 x half> %0
3819 define <vscale x 2 x half> @test_svfrintx_nxv2f16_ptrue(double %z0, <vscale x 2 x half> %x, <vscale x 2 x half> %y) {
3820 ; CHECK-LABEL: test_svfrintx_nxv2f16_ptrue:
3821 ; CHECK: // %bb.0: // %entry
3822 ; CHECK-NEXT: ptrue p0.d
3823 ; CHECK-NEXT: movprfx z0, z2
3824 ; CHECK-NEXT: frintx z0.h, p0/m, z2.h
3827 ; CHECK-2p2-LABEL: test_svfrintx_nxv2f16_ptrue:
3828 ; CHECK-2p2: // %bb.0: // %entry
3829 ; CHECK-2p2-NEXT: ptrue p0.d
3830 ; CHECK-2p2-NEXT: frintx z0.h, p0/z, z2.h
3831 ; CHECK-2p2-NEXT: ret
3833 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)
3834 %0 = tail call <vscale x 2 x half> @llvm.aarch64.sve.frintx.nxv2f16(<vscale x 2 x half> %x, <vscale x 2 x i1> %pg, <vscale x 2 x half> %y)
3835 ret <vscale x 2 x half> %0
3839 define <vscale x 2 x float> @test_svfrintx_nxv2f32_ptrue_u(double %z0, <vscale x 2 x float> %x) {
3840 ; CHECK-LABEL: test_svfrintx_nxv2f32_ptrue_u:
3841 ; CHECK: // %bb.0: // %entry
3842 ; CHECK-NEXT: ptrue p0.d
3843 ; CHECK-NEXT: movprfx z0, z1
3844 ; CHECK-NEXT: frintx z0.s, p0/m, z1.s
3847 ; CHECK-2p2-LABEL: test_svfrintx_nxv2f32_ptrue_u:
3848 ; CHECK-2p2: // %bb.0: // %entry
3849 ; CHECK-2p2-NEXT: ptrue p0.d
3850 ; CHECK-2p2-NEXT: frintx z0.s, p0/z, z1.s
3851 ; CHECK-2p2-NEXT: ret
3853 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)
3854 %0 = tail call <vscale x 2 x float> @llvm.aarch64.sve.frintx.nxv2f32(<vscale x 2 x float> poison, <vscale x 2 x i1> %pg, <vscale x 2 x float> %x)
3855 ret <vscale x 2 x float> %0
3858 define <vscale x 2 x float> @test_svfrintx_nxv2f32_ptrue(double %z0, <vscale x 2 x float> %x, <vscale x 2 x float> %y) {
3859 ; CHECK-LABEL: test_svfrintx_nxv2f32_ptrue:
3860 ; CHECK: // %bb.0: // %entry
3861 ; CHECK-NEXT: ptrue p0.d
3862 ; CHECK-NEXT: movprfx z0, z2
3863 ; CHECK-NEXT: frintx z0.s, p0/m, z2.s
3866 ; CHECK-2p2-LABEL: test_svfrintx_nxv2f32_ptrue:
3867 ; CHECK-2p2: // %bb.0: // %entry
3868 ; CHECK-2p2-NEXT: ptrue p0.d
3869 ; CHECK-2p2-NEXT: frintx z0.s, p0/z, z2.s
3870 ; CHECK-2p2-NEXT: ret
3872 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)
3873 %0 = tail call <vscale x 2 x float> @llvm.aarch64.sve.frintx.nxv2f32(<vscale x 2 x float> %x, <vscale x 2 x i1> %pg, <vscale x 2 x float> %y)
3874 ret <vscale x 2 x float> %0
3878 define <vscale x 4 x float> @test_svfrintx_nxv4f32_ptrue_u(double %z0, <vscale x 4 x float> %x) {
3879 ; CHECK-LABEL: test_svfrintx_nxv4f32_ptrue_u:
3880 ; CHECK: // %bb.0: // %entry
3881 ; CHECK-NEXT: ptrue p0.s
3882 ; CHECK-NEXT: movprfx z0, z1
3883 ; CHECK-NEXT: frintx z0.s, p0/m, z1.s
3886 ; CHECK-2p2-LABEL: test_svfrintx_nxv4f32_ptrue_u:
3887 ; CHECK-2p2: // %bb.0: // %entry
3888 ; CHECK-2p2-NEXT: ptrue p0.s
3889 ; CHECK-2p2-NEXT: frintx z0.s, p0/z, z1.s
3890 ; CHECK-2p2-NEXT: ret
3892 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)
3893 %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.frintx.nxv4f32(<vscale x 4 x float> poison, <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)
3894 ret <vscale x 4 x float> %0
3897 define <vscale x 4 x float> @test_svfrintx_nxv4f32_ptrue(double %z0, <vscale x 4 x float> %x, <vscale x 4 x float> %y) {
3898 ; CHECK-LABEL: test_svfrintx_nxv4f32_ptrue:
3899 ; CHECK: // %bb.0: // %entry
3900 ; CHECK-NEXT: ptrue p0.s
3901 ; CHECK-NEXT: movprfx z0, z2
3902 ; CHECK-NEXT: frintx z0.s, p0/m, z2.s
3905 ; CHECK-2p2-LABEL: test_svfrintx_nxv4f32_ptrue:
3906 ; CHECK-2p2: // %bb.0: // %entry
3907 ; CHECK-2p2-NEXT: ptrue p0.s
3908 ; CHECK-2p2-NEXT: frintx z0.s, p0/z, z2.s
3909 ; CHECK-2p2-NEXT: ret
3911 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)
3912 %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.frintx.nxv4f32(<vscale x 4 x float> %x, <vscale x 4 x i1> %pg, <vscale x 4 x float> %y)
3913 ret <vscale x 4 x float> %0
3917 define <vscale x 2 x double> @test_svfrintx_nxv2f64_ptrue_u(double %z0, <vscale x 2 x double> %x) {
3918 ; CHECK-LABEL: test_svfrintx_nxv2f64_ptrue_u:
3919 ; CHECK: // %bb.0: // %entry
3920 ; CHECK-NEXT: ptrue p0.d
3921 ; CHECK-NEXT: movprfx z0, z1
3922 ; CHECK-NEXT: frintx z0.d, p0/m, z1.d
3925 ; CHECK-2p2-LABEL: test_svfrintx_nxv2f64_ptrue_u:
3926 ; CHECK-2p2: // %bb.0: // %entry
3927 ; CHECK-2p2-NEXT: ptrue p0.d
3928 ; CHECK-2p2-NEXT: frintx z0.d, p0/z, z1.d
3929 ; CHECK-2p2-NEXT: ret
3931 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)
3932 %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.frintx.nxv2f64(<vscale x 2 x double> poison, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)
3933 ret <vscale x 2 x double> %0
3936 define <vscale x 2 x double> @test_svfrintx_nxv2f64_ptrue(double %z0, <vscale x 2 x double> %x, <vscale x 2 x double> %y) {
3937 ; CHECK-LABEL: test_svfrintx_nxv2f64_ptrue:
3938 ; CHECK: // %bb.0: // %entry
3939 ; CHECK-NEXT: ptrue p0.d
3940 ; CHECK-NEXT: movprfx z0, z2
3941 ; CHECK-NEXT: frintx z0.d, p0/m, z2.d
3944 ; CHECK-2p2-LABEL: test_svfrintx_nxv2f64_ptrue:
3945 ; CHECK-2p2: // %bb.0: // %entry
3946 ; CHECK-2p2-NEXT: ptrue p0.d
3947 ; CHECK-2p2-NEXT: frintx z0.d, p0/z, z2.d
3948 ; CHECK-2p2-NEXT: ret
3950 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)
3951 %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.frintx.nxv2f64(<vscale x 2 x double> %x, <vscale x 2 x i1> %pg, <vscale x 2 x double> %y)
3952 ret <vscale x 2 x double> %0
3956 define <vscale x 8 x half> @test_svfrintz_nxv8f16_ptrue_u(double %z0, <vscale x 8 x half> %x) {
3957 ; CHECK-LABEL: test_svfrintz_nxv8f16_ptrue_u:
3958 ; CHECK: // %bb.0: // %entry
3959 ; CHECK-NEXT: ptrue p0.h
3960 ; CHECK-NEXT: movprfx z0, z1
3961 ; CHECK-NEXT: frintz z0.h, p0/m, z1.h
3964 ; CHECK-2p2-LABEL: test_svfrintz_nxv8f16_ptrue_u:
3965 ; CHECK-2p2: // %bb.0: // %entry
3966 ; CHECK-2p2-NEXT: ptrue p0.h
3967 ; CHECK-2p2-NEXT: frintz z0.h, p0/z, z1.h
3968 ; CHECK-2p2-NEXT: ret
3970 %pg = call <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 31)
3971 %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.frintz.nxv8f16(<vscale x 8 x half> poison, <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)
3972 ret <vscale x 8 x half> %0
3975 define <vscale x 8 x half> @test_svfrintz_nxv8f16_ptrue(double %z0, <vscale x 8 x half> %x, <vscale x 8 x half> %y) {
3976 ; CHECK-LABEL: test_svfrintz_nxv8f16_ptrue:
3977 ; CHECK: // %bb.0: // %entry
3978 ; CHECK-NEXT: ptrue p0.h
3979 ; CHECK-NEXT: movprfx z0, z2
3980 ; CHECK-NEXT: frintz z0.h, p0/m, z2.h
3983 ; CHECK-2p2-LABEL: test_svfrintz_nxv8f16_ptrue:
3984 ; CHECK-2p2: // %bb.0: // %entry
3985 ; CHECK-2p2-NEXT: ptrue p0.h
3986 ; CHECK-2p2-NEXT: frintz z0.h, p0/z, z2.h
3987 ; CHECK-2p2-NEXT: ret
3989 %pg = call <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 31)
3990 %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.frintz.nxv8f16(<vscale x 8 x half> %x, <vscale x 8 x i1> %pg, <vscale x 8 x half> %y)
3991 ret <vscale x 8 x half> %0
3995 define <vscale x 4 x half> @test_svfrintz_nxv4f16_ptrue_u(double %z0, <vscale x 4 x half> %x) {
3996 ; CHECK-LABEL: test_svfrintz_nxv4f16_ptrue_u:
3997 ; CHECK: // %bb.0: // %entry
3998 ; CHECK-NEXT: ptrue p0.s
3999 ; CHECK-NEXT: movprfx z0, z1
4000 ; CHECK-NEXT: frintz z0.h, p0/m, z1.h
4003 ; CHECK-2p2-LABEL: test_svfrintz_nxv4f16_ptrue_u:
4004 ; CHECK-2p2: // %bb.0: // %entry
4005 ; CHECK-2p2-NEXT: ptrue p0.s
4006 ; CHECK-2p2-NEXT: frintz z0.h, p0/z, z1.h
4007 ; CHECK-2p2-NEXT: ret
4009 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)
4010 %0 = tail call <vscale x 4 x half> @llvm.aarch64.sve.frintz.nxv4f16(<vscale x 4 x half> poison, <vscale x 4 x i1> %pg, <vscale x 4 x half> %x)
4011 ret <vscale x 4 x half> %0
4014 define <vscale x 4 x half> @test_svfrintz_nxv4f16_ptrue(double %z0, <vscale x 4 x half> %x, <vscale x 4 x half> %y) {
4015 ; CHECK-LABEL: test_svfrintz_nxv4f16_ptrue:
4016 ; CHECK: // %bb.0: // %entry
4017 ; CHECK-NEXT: ptrue p0.s
4018 ; CHECK-NEXT: movprfx z0, z2
4019 ; CHECK-NEXT: frintz z0.h, p0/m, z2.h
4022 ; CHECK-2p2-LABEL: test_svfrintz_nxv4f16_ptrue:
4023 ; CHECK-2p2: // %bb.0: // %entry
4024 ; CHECK-2p2-NEXT: ptrue p0.s
4025 ; CHECK-2p2-NEXT: frintz z0.h, p0/z, z2.h
4026 ; CHECK-2p2-NEXT: ret
4028 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)
4029 %0 = tail call <vscale x 4 x half> @llvm.aarch64.sve.frintz.nxv4f16(<vscale x 4 x half> %x, <vscale x 4 x i1> %pg, <vscale x 4 x half> %y)
4030 ret <vscale x 4 x half> %0
4034 define <vscale x 2 x half> @test_svfrintz_nxv2f16_ptrue_u(double %z0, <vscale x 2 x half> %x) {
4035 ; CHECK-LABEL: test_svfrintz_nxv2f16_ptrue_u:
4036 ; CHECK: // %bb.0: // %entry
4037 ; CHECK-NEXT: ptrue p0.d
4038 ; CHECK-NEXT: movprfx z0, z1
4039 ; CHECK-NEXT: frintz z0.h, p0/m, z1.h
4042 ; CHECK-2p2-LABEL: test_svfrintz_nxv2f16_ptrue_u:
4043 ; CHECK-2p2: // %bb.0: // %entry
4044 ; CHECK-2p2-NEXT: ptrue p0.d
4045 ; CHECK-2p2-NEXT: frintz z0.h, p0/z, z1.h
4046 ; CHECK-2p2-NEXT: ret
4048 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)
4049 %0 = tail call <vscale x 2 x half> @llvm.aarch64.sve.frintz.nxv2f16(<vscale x 2 x half> poison, <vscale x 2 x i1> %pg, <vscale x 2 x half> %x)
4050 ret <vscale x 2 x half> %0
4053 define <vscale x 2 x half> @test_svfrintz_nxv2f16_ptrue(double %z0, <vscale x 2 x half> %x, <vscale x 2 x half> %y) {
4054 ; CHECK-LABEL: test_svfrintz_nxv2f16_ptrue:
4055 ; CHECK: // %bb.0: // %entry
4056 ; CHECK-NEXT: ptrue p0.d
4057 ; CHECK-NEXT: movprfx z0, z2
4058 ; CHECK-NEXT: frintz z0.h, p0/m, z2.h
4061 ; CHECK-2p2-LABEL: test_svfrintz_nxv2f16_ptrue:
4062 ; CHECK-2p2: // %bb.0: // %entry
4063 ; CHECK-2p2-NEXT: ptrue p0.d
4064 ; CHECK-2p2-NEXT: frintz z0.h, p0/z, z2.h
4065 ; CHECK-2p2-NEXT: ret
4067 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)
4068 %0 = tail call <vscale x 2 x half> @llvm.aarch64.sve.frintz.nxv2f16(<vscale x 2 x half> %x, <vscale x 2 x i1> %pg, <vscale x 2 x half> %y)
4069 ret <vscale x 2 x half> %0
4073 define <vscale x 2 x float> @test_svfrintz_nxv2f32_ptrue_u(double %z0, <vscale x 2 x float> %x) {
4074 ; CHECK-LABEL: test_svfrintz_nxv2f32_ptrue_u:
4075 ; CHECK: // %bb.0: // %entry
4076 ; CHECK-NEXT: ptrue p0.d
4077 ; CHECK-NEXT: movprfx z0, z1
4078 ; CHECK-NEXT: frintz z0.s, p0/m, z1.s
4081 ; CHECK-2p2-LABEL: test_svfrintz_nxv2f32_ptrue_u:
4082 ; CHECK-2p2: // %bb.0: // %entry
4083 ; CHECK-2p2-NEXT: ptrue p0.d
4084 ; CHECK-2p2-NEXT: frintz z0.s, p0/z, z1.s
4085 ; CHECK-2p2-NEXT: ret
4087 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)
4088 %0 = tail call <vscale x 2 x float> @llvm.aarch64.sve.frintz.nxv2f32(<vscale x 2 x float> poison, <vscale x 2 x i1> %pg, <vscale x 2 x float> %x)
4089 ret <vscale x 2 x float> %0
4092 define <vscale x 2 x float> @test_svfrintz_nxv2f32_ptrue(double %z0, <vscale x 2 x float> %x, <vscale x 2 x float> %y) {
4093 ; CHECK-LABEL: test_svfrintz_nxv2f32_ptrue:
4094 ; CHECK: // %bb.0: // %entry
4095 ; CHECK-NEXT: ptrue p0.d
4096 ; CHECK-NEXT: movprfx z0, z2
4097 ; CHECK-NEXT: frintz z0.s, p0/m, z2.s
4100 ; CHECK-2p2-LABEL: test_svfrintz_nxv2f32_ptrue:
4101 ; CHECK-2p2: // %bb.0: // %entry
4102 ; CHECK-2p2-NEXT: ptrue p0.d
4103 ; CHECK-2p2-NEXT: frintz z0.s, p0/z, z2.s
4104 ; CHECK-2p2-NEXT: ret
4106 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)
4107 %0 = tail call <vscale x 2 x float> @llvm.aarch64.sve.frintz.nxv2f32(<vscale x 2 x float> %x, <vscale x 2 x i1> %pg, <vscale x 2 x float> %y)
4108 ret <vscale x 2 x float> %0
4112 define <vscale x 4 x float> @test_svfrintz_nxv4f32_ptrue_u(double %z0, <vscale x 4 x float> %x) {
4113 ; CHECK-LABEL: test_svfrintz_nxv4f32_ptrue_u:
4114 ; CHECK: // %bb.0: // %entry
4115 ; CHECK-NEXT: ptrue p0.s
4116 ; CHECK-NEXT: movprfx z0, z1
4117 ; CHECK-NEXT: frintz z0.s, p0/m, z1.s
4120 ; CHECK-2p2-LABEL: test_svfrintz_nxv4f32_ptrue_u:
4121 ; CHECK-2p2: // %bb.0: // %entry
4122 ; CHECK-2p2-NEXT: ptrue p0.s
4123 ; CHECK-2p2-NEXT: frintz z0.s, p0/z, z1.s
4124 ; CHECK-2p2-NEXT: ret
4126 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)
4127 %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.frintz.nxv4f32(<vscale x 4 x float> poison, <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)
4128 ret <vscale x 4 x float> %0
4131 define <vscale x 4 x float> @test_svfrintz_nxv4f32_ptrue(double %z0, <vscale x 4 x float> %x, <vscale x 4 x float> %y) {
4132 ; CHECK-LABEL: test_svfrintz_nxv4f32_ptrue:
4133 ; CHECK: // %bb.0: // %entry
4134 ; CHECK-NEXT: ptrue p0.s
4135 ; CHECK-NEXT: movprfx z0, z2
4136 ; CHECK-NEXT: frintz z0.s, p0/m, z2.s
4139 ; CHECK-2p2-LABEL: test_svfrintz_nxv4f32_ptrue:
4140 ; CHECK-2p2: // %bb.0: // %entry
4141 ; CHECK-2p2-NEXT: ptrue p0.s
4142 ; CHECK-2p2-NEXT: frintz z0.s, p0/z, z2.s
4143 ; CHECK-2p2-NEXT: ret
4145 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)
4146 %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.frintz.nxv4f32(<vscale x 4 x float> %x, <vscale x 4 x i1> %pg, <vscale x 4 x float> %y)
4147 ret <vscale x 4 x float> %0
4151 define <vscale x 2 x double> @test_svfrintz_nxv2f64_ptrue_u(double %z0, <vscale x 2 x double> %x) {
4152 ; CHECK-LABEL: test_svfrintz_nxv2f64_ptrue_u:
4153 ; CHECK: // %bb.0: // %entry
4154 ; CHECK-NEXT: ptrue p0.d
4155 ; CHECK-NEXT: movprfx z0, z1
4156 ; CHECK-NEXT: frintz z0.d, p0/m, z1.d
4159 ; CHECK-2p2-LABEL: test_svfrintz_nxv2f64_ptrue_u:
4160 ; CHECK-2p2: // %bb.0: // %entry
4161 ; CHECK-2p2-NEXT: ptrue p0.d
4162 ; CHECK-2p2-NEXT: frintz z0.d, p0/z, z1.d
4163 ; CHECK-2p2-NEXT: ret
4165 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)
4166 %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.frintz.nxv2f64(<vscale x 2 x double> poison, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)
4167 ret <vscale x 2 x double> %0
4170 define <vscale x 2 x double> @test_svfrintz_nxv2f64_ptrue(double %z0, <vscale x 2 x double> %x, <vscale x 2 x double> %y) {
4171 ; CHECK-LABEL: test_svfrintz_nxv2f64_ptrue:
4172 ; CHECK: // %bb.0: // %entry
4173 ; CHECK-NEXT: ptrue p0.d
4174 ; CHECK-NEXT: movprfx z0, z2
4175 ; CHECK-NEXT: frintz z0.d, p0/m, z2.d
4178 ; CHECK-2p2-LABEL: test_svfrintz_nxv2f64_ptrue:
4179 ; CHECK-2p2: // %bb.0: // %entry
4180 ; CHECK-2p2-NEXT: ptrue p0.d
4181 ; CHECK-2p2-NEXT: frintz z0.d, p0/z, z2.d
4182 ; CHECK-2p2-NEXT: ret
4184 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)
4185 %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.frintz.nxv2f64(<vscale x 2 x double> %x, <vscale x 2 x i1> %pg, <vscale x 2 x double> %y)
4186 ret <vscale x 2 x double> %0
4190 define <vscale x 8 x half> @test_svfrecpx_nxv8f16_ptrue_u(double %z0, <vscale x 8 x half> %x) {
4191 ; CHECK-LABEL: test_svfrecpx_nxv8f16_ptrue_u:
4192 ; CHECK: // %bb.0: // %entry
4193 ; CHECK-NEXT: ptrue p0.h
4194 ; CHECK-NEXT: movprfx z0, z1
4195 ; CHECK-NEXT: frecpx z0.h, p0/m, z1.h
4198 ; CHECK-2p2-LABEL: test_svfrecpx_nxv8f16_ptrue_u:
4199 ; CHECK-2p2: // %bb.0: // %entry
4200 ; CHECK-2p2-NEXT: ptrue p0.h
4201 ; CHECK-2p2-NEXT: frecpx z0.h, p0/z, z1.h
4202 ; CHECK-2p2-NEXT: ret
4204 %pg = call <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 31)
4205 %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.frecpx.nxv8f16(<vscale x 8 x half> poison, <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)
4206 ret <vscale x 8 x half> %0
4209 define <vscale x 8 x half> @test_svfrecpx_nxv8f16_ptrue(double %z0, <vscale x 8 x half> %x, <vscale x 8 x half> %y) {
4210 ; CHECK-LABEL: test_svfrecpx_nxv8f16_ptrue:
4211 ; CHECK: // %bb.0: // %entry
4212 ; CHECK-NEXT: ptrue p0.h
4213 ; CHECK-NEXT: movprfx z0, z2
4214 ; CHECK-NEXT: frecpx z0.h, p0/m, z2.h
4217 ; CHECK-2p2-LABEL: test_svfrecpx_nxv8f16_ptrue:
4218 ; CHECK-2p2: // %bb.0: // %entry
4219 ; CHECK-2p2-NEXT: ptrue p0.h
4220 ; CHECK-2p2-NEXT: frecpx z0.h, p0/z, z2.h
4221 ; CHECK-2p2-NEXT: ret
4223 %pg = call <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 31)
4224 %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.frecpx.nxv8f16(<vscale x 8 x half> %x, <vscale x 8 x i1> %pg, <vscale x 8 x half> %y)
4225 ret <vscale x 8 x half> %0
4229 define <vscale x 4 x half> @test_svfrecpx_nxv4f16_ptrue_u(double %z0, <vscale x 4 x half> %x) {
4230 ; CHECK-LABEL: test_svfrecpx_nxv4f16_ptrue_u:
4231 ; CHECK: // %bb.0: // %entry
4232 ; CHECK-NEXT: ptrue p0.s
4233 ; CHECK-NEXT: movprfx z0, z1
4234 ; CHECK-NEXT: frecpx z0.h, p0/m, z1.h
4237 ; CHECK-2p2-LABEL: test_svfrecpx_nxv4f16_ptrue_u:
4238 ; CHECK-2p2: // %bb.0: // %entry
4239 ; CHECK-2p2-NEXT: ptrue p0.s
4240 ; CHECK-2p2-NEXT: frecpx z0.h, p0/z, z1.h
4241 ; CHECK-2p2-NEXT: ret
4243 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)
4244 %0 = tail call <vscale x 4 x half> @llvm.aarch64.sve.frecpx.nxv4f16(<vscale x 4 x half> poison, <vscale x 4 x i1> %pg, <vscale x 4 x half> %x)
4245 ret <vscale x 4 x half> %0
4248 define <vscale x 4 x half> @test_svfrecpx_nxv4f16_ptrue(double %z0, <vscale x 4 x half> %x, <vscale x 4 x half> %y) {
4249 ; CHECK-LABEL: test_svfrecpx_nxv4f16_ptrue:
4250 ; CHECK: // %bb.0: // %entry
4251 ; CHECK-NEXT: ptrue p0.s
4252 ; CHECK-NEXT: movprfx z0, z2
4253 ; CHECK-NEXT: frecpx z0.h, p0/m, z2.h
4256 ; CHECK-2p2-LABEL: test_svfrecpx_nxv4f16_ptrue:
4257 ; CHECK-2p2: // %bb.0: // %entry
4258 ; CHECK-2p2-NEXT: ptrue p0.s
4259 ; CHECK-2p2-NEXT: frecpx z0.h, p0/z, z2.h
4260 ; CHECK-2p2-NEXT: ret
4262 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)
4263 %0 = tail call <vscale x 4 x half> @llvm.aarch64.sve.frecpx.nxv4f16(<vscale x 4 x half> %x, <vscale x 4 x i1> %pg, <vscale x 4 x half> %y)
4264 ret <vscale x 4 x half> %0
4268 define <vscale x 2 x half> @test_svfrecpx_nxv2f16_ptrue_u(double %z0, <vscale x 2 x half> %x) {
4269 ; CHECK-LABEL: test_svfrecpx_nxv2f16_ptrue_u:
4270 ; CHECK: // %bb.0: // %entry
4271 ; CHECK-NEXT: ptrue p0.d
4272 ; CHECK-NEXT: movprfx z0, z1
4273 ; CHECK-NEXT: frecpx z0.h, p0/m, z1.h
4276 ; CHECK-2p2-LABEL: test_svfrecpx_nxv2f16_ptrue_u:
4277 ; CHECK-2p2: // %bb.0: // %entry
4278 ; CHECK-2p2-NEXT: ptrue p0.d
4279 ; CHECK-2p2-NEXT: frecpx z0.h, p0/z, z1.h
4280 ; CHECK-2p2-NEXT: ret
4282 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)
4283 %0 = tail call <vscale x 2 x half> @llvm.aarch64.sve.frecpx.nxv2f16(<vscale x 2 x half> poison, <vscale x 2 x i1> %pg, <vscale x 2 x half> %x)
4284 ret <vscale x 2 x half> %0
4287 define <vscale x 2 x half> @test_svfrecpx_nxv2f16_ptrue(double %z0, <vscale x 2 x half> %x, <vscale x 2 x half> %y) {
4288 ; CHECK-LABEL: test_svfrecpx_nxv2f16_ptrue:
4289 ; CHECK: // %bb.0: // %entry
4290 ; CHECK-NEXT: ptrue p0.d
4291 ; CHECK-NEXT: movprfx z0, z2
4292 ; CHECK-NEXT: frecpx z0.h, p0/m, z2.h
4295 ; CHECK-2p2-LABEL: test_svfrecpx_nxv2f16_ptrue:
4296 ; CHECK-2p2: // %bb.0: // %entry
4297 ; CHECK-2p2-NEXT: ptrue p0.d
4298 ; CHECK-2p2-NEXT: frecpx z0.h, p0/z, z2.h
4299 ; CHECK-2p2-NEXT: ret
4301 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)
4302 %0 = tail call <vscale x 2 x half> @llvm.aarch64.sve.frecpx.nxv2f16(<vscale x 2 x half> %x, <vscale x 2 x i1> %pg, <vscale x 2 x half> %y)
4303 ret <vscale x 2 x half> %0
4307 define <vscale x 2 x float> @test_svfrecpx_nxv2f32_ptrue_u(double %z0, <vscale x 2 x float> %x) {
4308 ; CHECK-LABEL: test_svfrecpx_nxv2f32_ptrue_u:
4309 ; CHECK: // %bb.0: // %entry
4310 ; CHECK-NEXT: ptrue p0.d
4311 ; CHECK-NEXT: movprfx z0, z1
4312 ; CHECK-NEXT: frecpx z0.s, p0/m, z1.s
4315 ; CHECK-2p2-LABEL: test_svfrecpx_nxv2f32_ptrue_u:
4316 ; CHECK-2p2: // %bb.0: // %entry
4317 ; CHECK-2p2-NEXT: ptrue p0.d
4318 ; CHECK-2p2-NEXT: frecpx z0.s, p0/z, z1.s
4319 ; CHECK-2p2-NEXT: ret
4321 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)
4322 %0 = tail call <vscale x 2 x float> @llvm.aarch64.sve.frecpx.nxv2f32(<vscale x 2 x float> poison, <vscale x 2 x i1> %pg, <vscale x 2 x float> %x)
4323 ret <vscale x 2 x float> %0
4326 define <vscale x 2 x float> @test_svfrecpx_nxv2f32_ptrue(double %z0, <vscale x 2 x float> %x, <vscale x 2 x float> %y) {
4327 ; CHECK-LABEL: test_svfrecpx_nxv2f32_ptrue:
4328 ; CHECK: // %bb.0: // %entry
4329 ; CHECK-NEXT: ptrue p0.d
4330 ; CHECK-NEXT: movprfx z0, z2
4331 ; CHECK-NEXT: frecpx z0.s, p0/m, z2.s
4334 ; CHECK-2p2-LABEL: test_svfrecpx_nxv2f32_ptrue:
4335 ; CHECK-2p2: // %bb.0: // %entry
4336 ; CHECK-2p2-NEXT: ptrue p0.d
4337 ; CHECK-2p2-NEXT: frecpx z0.s, p0/z, z2.s
4338 ; CHECK-2p2-NEXT: ret
4340 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)
4341 %0 = tail call <vscale x 2 x float> @llvm.aarch64.sve.frecpx.nxv2f32(<vscale x 2 x float> %x, <vscale x 2 x i1> %pg, <vscale x 2 x float> %y)
4342 ret <vscale x 2 x float> %0
4346 define <vscale x 4 x float> @test_svfrecpx_nxv4f32_ptrue_u(double %z0, <vscale x 4 x float> %x) {
4347 ; CHECK-LABEL: test_svfrecpx_nxv4f32_ptrue_u:
4348 ; CHECK: // %bb.0: // %entry
4349 ; CHECK-NEXT: ptrue p0.s
4350 ; CHECK-NEXT: movprfx z0, z1
4351 ; CHECK-NEXT: frecpx z0.s, p0/m, z1.s
4354 ; CHECK-2p2-LABEL: test_svfrecpx_nxv4f32_ptrue_u:
4355 ; CHECK-2p2: // %bb.0: // %entry
4356 ; CHECK-2p2-NEXT: ptrue p0.s
4357 ; CHECK-2p2-NEXT: frecpx z0.s, p0/z, z1.s
4358 ; CHECK-2p2-NEXT: ret
4360 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)
4361 %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.frecpx.nxv4f32(<vscale x 4 x float> poison, <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)
4362 ret <vscale x 4 x float> %0
4365 define <vscale x 4 x float> @test_svfrecpx_nxv4f32_ptrue(double %z0, <vscale x 4 x float> %x, <vscale x 4 x float> %y) {
4366 ; CHECK-LABEL: test_svfrecpx_nxv4f32_ptrue:
4367 ; CHECK: // %bb.0: // %entry
4368 ; CHECK-NEXT: ptrue p0.s
4369 ; CHECK-NEXT: movprfx z0, z2
4370 ; CHECK-NEXT: frecpx z0.s, p0/m, z2.s
4373 ; CHECK-2p2-LABEL: test_svfrecpx_nxv4f32_ptrue:
4374 ; CHECK-2p2: // %bb.0: // %entry
4375 ; CHECK-2p2-NEXT: ptrue p0.s
4376 ; CHECK-2p2-NEXT: frecpx z0.s, p0/z, z2.s
4377 ; CHECK-2p2-NEXT: ret
4379 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)
4380 %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.frecpx.nxv4f32(<vscale x 4 x float> %x, <vscale x 4 x i1> %pg, <vscale x 4 x float> %y)
4381 ret <vscale x 4 x float> %0
4385 define <vscale x 2 x double> @test_svfrecpx_nxv2f64_ptrue_u(double %z0, <vscale x 2 x double> %x) {
4386 ; CHECK-LABEL: test_svfrecpx_nxv2f64_ptrue_u:
4387 ; CHECK: // %bb.0: // %entry
4388 ; CHECK-NEXT: ptrue p0.d
4389 ; CHECK-NEXT: movprfx z0, z1
4390 ; CHECK-NEXT: frecpx z0.d, p0/m, z1.d
4393 ; CHECK-2p2-LABEL: test_svfrecpx_nxv2f64_ptrue_u:
4394 ; CHECK-2p2: // %bb.0: // %entry
4395 ; CHECK-2p2-NEXT: ptrue p0.d
4396 ; CHECK-2p2-NEXT: frecpx z0.d, p0/z, z1.d
4397 ; CHECK-2p2-NEXT: ret
4399 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)
4400 %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.frecpx.nxv2f64(<vscale x 2 x double> poison, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)
4401 ret <vscale x 2 x double> %0
4404 define <vscale x 2 x double> @test_svfrecpx_nxv2f64_ptrue(double %z0, <vscale x 2 x double> %x, <vscale x 2 x double> %y) {
4405 ; CHECK-LABEL: test_svfrecpx_nxv2f64_ptrue:
4406 ; CHECK: // %bb.0: // %entry
4407 ; CHECK-NEXT: ptrue p0.d
4408 ; CHECK-NEXT: movprfx z0, z2
4409 ; CHECK-NEXT: frecpx z0.d, p0/m, z2.d
4412 ; CHECK-2p2-LABEL: test_svfrecpx_nxv2f64_ptrue:
4413 ; CHECK-2p2: // %bb.0: // %entry
4414 ; CHECK-2p2-NEXT: ptrue p0.d
4415 ; CHECK-2p2-NEXT: frecpx z0.d, p0/z, z2.d
4416 ; CHECK-2p2-NEXT: ret
4418 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)
4419 %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.frecpx.nxv2f64(<vscale x 2 x double> %x, <vscale x 2 x i1> %pg, <vscale x 2 x double> %y)
4420 ret <vscale x 2 x double> %0
4424 define <vscale x 8 x half> @test_svfsqrt_nxv8f16_ptrue_u(double %z0, <vscale x 8 x half> %x) {
4425 ; CHECK-LABEL: test_svfsqrt_nxv8f16_ptrue_u:
4426 ; CHECK: // %bb.0: // %entry
4427 ; CHECK-NEXT: ptrue p0.h
4428 ; CHECK-NEXT: movprfx z0, z1
4429 ; CHECK-NEXT: fsqrt z0.h, p0/m, z1.h
4432 ; CHECK-2p2-LABEL: test_svfsqrt_nxv8f16_ptrue_u:
4433 ; CHECK-2p2: // %bb.0: // %entry
4434 ; CHECK-2p2-NEXT: ptrue p0.h
4435 ; CHECK-2p2-NEXT: fsqrt z0.h, p0/z, z1.h
4436 ; CHECK-2p2-NEXT: ret
4438 %pg = call <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 31)
4439 %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.fsqrt.nxv8f16(<vscale x 8 x half> poison, <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)
4440 ret <vscale x 8 x half> %0
4443 define <vscale x 8 x half> @test_svfsqrt_nxv8f16_ptrue(double %z0, <vscale x 8 x half> %x, <vscale x 8 x half> %y) {
4444 ; CHECK-LABEL: test_svfsqrt_nxv8f16_ptrue:
4445 ; CHECK: // %bb.0: // %entry
4446 ; CHECK-NEXT: ptrue p0.h
4447 ; CHECK-NEXT: movprfx z0, z2
4448 ; CHECK-NEXT: fsqrt z0.h, p0/m, z2.h
4451 ; CHECK-2p2-LABEL: test_svfsqrt_nxv8f16_ptrue:
4452 ; CHECK-2p2: // %bb.0: // %entry
4453 ; CHECK-2p2-NEXT: ptrue p0.h
4454 ; CHECK-2p2-NEXT: fsqrt z0.h, p0/z, z2.h
4455 ; CHECK-2p2-NEXT: ret
4457 %pg = call <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 31)
4458 %0 = tail call <vscale x 8 x half> @llvm.aarch64.sve.fsqrt.nxv8f16(<vscale x 8 x half> %x, <vscale x 8 x i1> %pg, <vscale x 8 x half> %y)
4459 ret <vscale x 8 x half> %0
4463 define <vscale x 4 x half> @test_svfsqrt_nxv4f16_ptrue_u(double %z0, <vscale x 4 x half> %x) {
4464 ; CHECK-LABEL: test_svfsqrt_nxv4f16_ptrue_u:
4465 ; CHECK: // %bb.0: // %entry
4466 ; CHECK-NEXT: ptrue p0.s
4467 ; CHECK-NEXT: movprfx z0, z1
4468 ; CHECK-NEXT: fsqrt z0.h, p0/m, z1.h
4471 ; CHECK-2p2-LABEL: test_svfsqrt_nxv4f16_ptrue_u:
4472 ; CHECK-2p2: // %bb.0: // %entry
4473 ; CHECK-2p2-NEXT: ptrue p0.s
4474 ; CHECK-2p2-NEXT: fsqrt z0.h, p0/z, z1.h
4475 ; CHECK-2p2-NEXT: ret
4477 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)
4478 %0 = tail call <vscale x 4 x half> @llvm.aarch64.sve.fsqrt.nxv4f16(<vscale x 4 x half> poison, <vscale x 4 x i1> %pg, <vscale x 4 x half> %x)
4479 ret <vscale x 4 x half> %0
4482 define <vscale x 4 x half> @test_svfsqrt_nxv4f16_ptrue(double %z0, <vscale x 4 x half> %x, <vscale x 4 x half> %y) {
4483 ; CHECK-LABEL: test_svfsqrt_nxv4f16_ptrue:
4484 ; CHECK: // %bb.0: // %entry
4485 ; CHECK-NEXT: ptrue p0.s
4486 ; CHECK-NEXT: movprfx z0, z2
4487 ; CHECK-NEXT: fsqrt z0.h, p0/m, z2.h
4490 ; CHECK-2p2-LABEL: test_svfsqrt_nxv4f16_ptrue:
4491 ; CHECK-2p2: // %bb.0: // %entry
4492 ; CHECK-2p2-NEXT: ptrue p0.s
4493 ; CHECK-2p2-NEXT: fsqrt z0.h, p0/z, z2.h
4494 ; CHECK-2p2-NEXT: ret
4496 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)
4497 %0 = tail call <vscale x 4 x half> @llvm.aarch64.sve.fsqrt.nxv4f16(<vscale x 4 x half> %x, <vscale x 4 x i1> %pg, <vscale x 4 x half> %y)
4498 ret <vscale x 4 x half> %0
4502 define <vscale x 2 x half> @test_svfsqrt_nxv2f16_ptrue_u(double %z0, <vscale x 2 x half> %x) {
4503 ; CHECK-LABEL: test_svfsqrt_nxv2f16_ptrue_u:
4504 ; CHECK: // %bb.0: // %entry
4505 ; CHECK-NEXT: ptrue p0.d
4506 ; CHECK-NEXT: movprfx z0, z1
4507 ; CHECK-NEXT: fsqrt z0.h, p0/m, z1.h
4510 ; CHECK-2p2-LABEL: test_svfsqrt_nxv2f16_ptrue_u:
4511 ; CHECK-2p2: // %bb.0: // %entry
4512 ; CHECK-2p2-NEXT: ptrue p0.d
4513 ; CHECK-2p2-NEXT: fsqrt z0.h, p0/z, z1.h
4514 ; CHECK-2p2-NEXT: ret
4516 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)
4517 %0 = tail call <vscale x 2 x half> @llvm.aarch64.sve.fsqrt.nxv2f16(<vscale x 2 x half> poison, <vscale x 2 x i1> %pg, <vscale x 2 x half> %x)
4518 ret <vscale x 2 x half> %0
4521 define <vscale x 2 x half> @test_svfsqrt_nxv2f16_ptrue(double %z0, <vscale x 2 x half> %x, <vscale x 2 x half> %y) {
4522 ; CHECK-LABEL: test_svfsqrt_nxv2f16_ptrue:
4523 ; CHECK: // %bb.0: // %entry
4524 ; CHECK-NEXT: ptrue p0.d
4525 ; CHECK-NEXT: movprfx z0, z2
4526 ; CHECK-NEXT: fsqrt z0.h, p0/m, z2.h
4529 ; CHECK-2p2-LABEL: test_svfsqrt_nxv2f16_ptrue:
4530 ; CHECK-2p2: // %bb.0: // %entry
4531 ; CHECK-2p2-NEXT: ptrue p0.d
4532 ; CHECK-2p2-NEXT: fsqrt z0.h, p0/z, z2.h
4533 ; CHECK-2p2-NEXT: ret
4535 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)
4536 %0 = tail call <vscale x 2 x half> @llvm.aarch64.sve.fsqrt.nxv2f16(<vscale x 2 x half> %x, <vscale x 2 x i1> %pg, <vscale x 2 x half> %y)
4537 ret <vscale x 2 x half> %0
4541 define <vscale x 2 x float> @test_svfsqrt_nxv2f32_ptrue_u(double %z0, <vscale x 2 x float> %x) {
4542 ; CHECK-LABEL: test_svfsqrt_nxv2f32_ptrue_u:
4543 ; CHECK: // %bb.0: // %entry
4544 ; CHECK-NEXT: ptrue p0.d
4545 ; CHECK-NEXT: movprfx z0, z1
4546 ; CHECK-NEXT: fsqrt z0.s, p0/m, z1.s
4549 ; CHECK-2p2-LABEL: test_svfsqrt_nxv2f32_ptrue_u:
4550 ; CHECK-2p2: // %bb.0: // %entry
4551 ; CHECK-2p2-NEXT: ptrue p0.d
4552 ; CHECK-2p2-NEXT: fsqrt z0.s, p0/z, z1.s
4553 ; CHECK-2p2-NEXT: ret
4555 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)
4556 %0 = tail call <vscale x 2 x float> @llvm.aarch64.sve.fsqrt.nxv2f32(<vscale x 2 x float> poison, <vscale x 2 x i1> %pg, <vscale x 2 x float> %x)
4557 ret <vscale x 2 x float> %0
4560 define <vscale x 2 x float> @test_svfsqrt_nxv2f32_ptrue(double %z0, <vscale x 2 x float> %x, <vscale x 2 x float> %y) {
4561 ; CHECK-LABEL: test_svfsqrt_nxv2f32_ptrue:
4562 ; CHECK: // %bb.0: // %entry
4563 ; CHECK-NEXT: ptrue p0.d
4564 ; CHECK-NEXT: movprfx z0, z2
4565 ; CHECK-NEXT: fsqrt z0.s, p0/m, z2.s
4568 ; CHECK-2p2-LABEL: test_svfsqrt_nxv2f32_ptrue:
4569 ; CHECK-2p2: // %bb.0: // %entry
4570 ; CHECK-2p2-NEXT: ptrue p0.d
4571 ; CHECK-2p2-NEXT: fsqrt z0.s, p0/z, z2.s
4572 ; CHECK-2p2-NEXT: ret
4574 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)
4575 %0 = tail call <vscale x 2 x float> @llvm.aarch64.sve.fsqrt.nxv2f32(<vscale x 2 x float> %x, <vscale x 2 x i1> %pg, <vscale x 2 x float> %y)
4576 ret <vscale x 2 x float> %0
4580 define <vscale x 4 x float> @test_svfsqrt_nxv4f32_ptrue_u(double %z0, <vscale x 4 x float> %x) {
4581 ; CHECK-LABEL: test_svfsqrt_nxv4f32_ptrue_u:
4582 ; CHECK: // %bb.0: // %entry
4583 ; CHECK-NEXT: ptrue p0.s
4584 ; CHECK-NEXT: movprfx z0, z1
4585 ; CHECK-NEXT: fsqrt z0.s, p0/m, z1.s
4588 ; CHECK-2p2-LABEL: test_svfsqrt_nxv4f32_ptrue_u:
4589 ; CHECK-2p2: // %bb.0: // %entry
4590 ; CHECK-2p2-NEXT: ptrue p0.s
4591 ; CHECK-2p2-NEXT: fsqrt z0.s, p0/z, z1.s
4592 ; CHECK-2p2-NEXT: ret
4594 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)
4595 %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.fsqrt.nxv4f32(<vscale x 4 x float> poison, <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)
4596 ret <vscale x 4 x float> %0
4599 define <vscale x 4 x float> @test_svfsqrt_nxv4f32_ptrue(double %z0, <vscale x 4 x float> %x, <vscale x 4 x float> %y) {
4600 ; CHECK-LABEL: test_svfsqrt_nxv4f32_ptrue:
4601 ; CHECK: // %bb.0: // %entry
4602 ; CHECK-NEXT: ptrue p0.s
4603 ; CHECK-NEXT: movprfx z0, z2
4604 ; CHECK-NEXT: fsqrt z0.s, p0/m, z2.s
4607 ; CHECK-2p2-LABEL: test_svfsqrt_nxv4f32_ptrue:
4608 ; CHECK-2p2: // %bb.0: // %entry
4609 ; CHECK-2p2-NEXT: ptrue p0.s
4610 ; CHECK-2p2-NEXT: fsqrt z0.s, p0/z, z2.s
4611 ; CHECK-2p2-NEXT: ret
4613 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)
4614 %0 = tail call <vscale x 4 x float> @llvm.aarch64.sve.fsqrt.nxv4f32(<vscale x 4 x float> %x, <vscale x 4 x i1> %pg, <vscale x 4 x float> %y)
4615 ret <vscale x 4 x float> %0
4619 define <vscale x 2 x double> @test_svfsqrt_nxv2f64_ptrue_u(double %z0, <vscale x 2 x double> %x) {
4620 ; CHECK-LABEL: test_svfsqrt_nxv2f64_ptrue_u:
4621 ; CHECK: // %bb.0: // %entry
4622 ; CHECK-NEXT: ptrue p0.d
4623 ; CHECK-NEXT: movprfx z0, z1
4624 ; CHECK-NEXT: fsqrt z0.d, p0/m, z1.d
4627 ; CHECK-2p2-LABEL: test_svfsqrt_nxv2f64_ptrue_u:
4628 ; CHECK-2p2: // %bb.0: // %entry
4629 ; CHECK-2p2-NEXT: ptrue p0.d
4630 ; CHECK-2p2-NEXT: fsqrt z0.d, p0/z, z1.d
4631 ; CHECK-2p2-NEXT: ret
4633 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)
4634 %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.fsqrt.nxv2f64(<vscale x 2 x double> poison, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)
4635 ret <vscale x 2 x double> %0
4638 define <vscale x 2 x double> @test_svfsqrt_nxv2f64_ptrue(double %z0, <vscale x 2 x double> %x, <vscale x 2 x double> %y) {
4639 ; CHECK-LABEL: test_svfsqrt_nxv2f64_ptrue:
4640 ; CHECK: // %bb.0: // %entry
4641 ; CHECK-NEXT: ptrue p0.d
4642 ; CHECK-NEXT: movprfx z0, z2
4643 ; CHECK-NEXT: fsqrt z0.d, p0/m, z2.d
4646 ; CHECK-2p2-LABEL: test_svfsqrt_nxv2f64_ptrue:
4647 ; CHECK-2p2: // %bb.0: // %entry
4648 ; CHECK-2p2-NEXT: ptrue p0.d
4649 ; CHECK-2p2-NEXT: fsqrt z0.d, p0/z, z2.d
4650 ; CHECK-2p2-NEXT: ret
4652 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)
4653 %0 = tail call <vscale x 2 x double> @llvm.aarch64.sve.fsqrt.nxv2f64(<vscale x 2 x double> %x, <vscale x 2 x i1> %pg, <vscale x 2 x double> %y)
4654 ret <vscale x 2 x double> %0