[Xtensa] Implement Windowed Register Option. (#124656)
[llvm-project.git] / llvm / test / CodeGen / AArch64 / zeroing-forms-frint-frecpx-fsqrt.ll
blobc493ec2dcc95d827e211dae06ff346382017f9de
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
14 ; CHECK-NEXT:    ret
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
19 ; CHECK-2p2-NEXT:    ret
20 entry:
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
30 ; CHECK-NEXT:    ret
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
35 ; CHECK-2p2-NEXT:    ret
36 entry:
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
46 ; CHECK-NEXT:    ret
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
51 ; CHECK-2p2-NEXT:    ret
52 entry:
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
61 ; CHECK-NEXT:    ret
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
66 ; CHECK-2p2-NEXT:    ret
67 entry:
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
77 ; CHECK-NEXT:    ret
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
82 ; CHECK-2p2-NEXT:    ret
83 entry:
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
93 ; CHECK-NEXT:    ret
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
98 ; CHECK-2p2-NEXT:    ret
99 entry:
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
108 ; CHECK-NEXT:    ret
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
114 entry:
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
124 ; CHECK-NEXT:    ret
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
130 entry:
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
140 ; CHECK-NEXT:    ret
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
146 entry:
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
155 ; CHECK-NEXT:    ret
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
161 entry:
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
171 ; CHECK-NEXT:    ret
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
177 entry:
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
187 ; CHECK-NEXT:    ret
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
193 entry:
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
202 ; CHECK-NEXT:    ret
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
208 entry:
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
218 ; CHECK-NEXT:    ret
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
224 entry:
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
234 ; CHECK-NEXT:    ret
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
240 entry:
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
249 ; CHECK-NEXT:    ret
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
255 entry:
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
265 ; CHECK-NEXT:    ret
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
271 entry:
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
281 ; CHECK-NEXT:    ret
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
287 entry:
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
296 ; CHECK-NEXT:    ret
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
302 entry:
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
312 ; CHECK-NEXT:    ret
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
318 entry:
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
328 ; CHECK-NEXT:    ret
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
334 entry:
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
343 ; CHECK-NEXT:    ret
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
349 entry:
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
359 ; CHECK-NEXT:    ret
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
365 entry:
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
375 ; CHECK-NEXT:    ret
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
381 entry:
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
390 ; CHECK-NEXT:    ret
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
396 entry:
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
406 ; CHECK-NEXT:    ret
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
412 entry:
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
422 ; CHECK-NEXT:    ret
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
428 entry:
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
437 ; CHECK-NEXT:    ret
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
443 entry:
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
453 ; CHECK-NEXT:    ret
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
459 entry:
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
469 ; CHECK-NEXT:    ret
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
475 entry:
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
484 ; CHECK-NEXT:    ret
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
490 entry:
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
500 ; CHECK-NEXT:    ret
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
506 entry:
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
516 ; CHECK-NEXT:    ret
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
522 entry:
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
531 ; CHECK-NEXT:    ret
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
537 entry:
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
547 ; CHECK-NEXT:    ret
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
553 entry:
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
564 ; CHECK-NEXT:    ret
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
570 entry:
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
580 ; CHECK-NEXT:    ret
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
586 entry:
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
596 ; CHECK-NEXT:    ret
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
602 entry:
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
613 ; CHECK-NEXT:    ret
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
619 entry:
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
628 ; CHECK-NEXT:    ret
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
634 entry:
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
644 ; CHECK-NEXT:    ret
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
650 entry:
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
660 ; CHECK-NEXT:    ret
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
666 entry:
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
675 ; CHECK-NEXT:    ret
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
681 entry:
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
691 ; CHECK-NEXT:    ret
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
697 entry:
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
707 ; CHECK-NEXT:    ret
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
713 entry:
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
722 ; CHECK-NEXT:    ret
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
728 entry:
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
738 ; CHECK-NEXT:    ret
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
744 entry:
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
754 ; CHECK-NEXT:    ret
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
760 entry:
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
769 ; CHECK-NEXT:    ret
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
775 entry:
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
785 ; CHECK-NEXT:    ret
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
791 entry:
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
801 ; CHECK-NEXT:    ret
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
807 entry:
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
816 ; CHECK-NEXT:    ret
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
822 entry:
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
832 ; CHECK-NEXT:    ret
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
838 entry:
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
848 ; CHECK-NEXT:    ret
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
854 entry:
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
863 ; CHECK-NEXT:    ret
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
869 entry:
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
879 ; CHECK-NEXT:    ret
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
885 entry:
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
895 ; CHECK-NEXT:    ret
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
901 entry:
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
910 ; CHECK-NEXT:    ret
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
916 entry:
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
926 ; CHECK-NEXT:    ret
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
932 entry:
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
942 ; CHECK-NEXT:    ret
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
948 entry:
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
957 ; CHECK-NEXT:    ret
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
963 entry:
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
973 ; CHECK-NEXT:    ret
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
979 entry:
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
989 ; CHECK-NEXT:    ret
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
995 entry:
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
1004 ; CHECK-NEXT:    ret
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
1010 entry:
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
1020 ; CHECK-NEXT:    ret
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
1026 entry:
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
1036 ; CHECK-NEXT:    ret
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
1042 entry:
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
1051 ; CHECK-NEXT:    ret
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
1057 entry:
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
1067 ; CHECK-NEXT:    ret
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
1073 entry:
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
1083 ; CHECK-NEXT:    ret
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
1089 entry:
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
1098 ; CHECK-NEXT:    ret
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
1104 entry:
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
1114 ; CHECK-NEXT:    ret
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
1120 entry:
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
1130 ; CHECK-NEXT:    ret
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
1136 entry:
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
1145 ; CHECK-NEXT:    ret
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
1151 entry:
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
1161 ; CHECK-NEXT:    ret
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
1167 entry:
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
1177 ; CHECK-NEXT:    ret
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
1183 entry:
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
1192 ; CHECK-NEXT:    ret
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
1198 entry:
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
1208 ; CHECK-NEXT:    ret
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
1214 entry:
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
1224 ; CHECK-NEXT:    ret
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
1230 entry:
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
1239 ; CHECK-NEXT:    ret
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
1245 entry:
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
1255 ; CHECK-NEXT:    ret
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
1261 entry:
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
1271 ; CHECK-NEXT:    ret
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
1277 entry:
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
1286 ; CHECK-NEXT:    ret
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
1292 entry:
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
1302 ; CHECK-NEXT:    ret
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
1308 entry:
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
1318 ; CHECK-NEXT:    ret
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
1324 entry:
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
1333 ; CHECK-NEXT:    ret
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
1339 entry:
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
1349 ; CHECK-NEXT:    ret
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
1355 entry:
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
1365 ; CHECK-NEXT:    ret
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
1371 entry:
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
1380 ; CHECK-NEXT:    ret
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
1386 entry:
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
1396 ; CHECK-NEXT:    ret
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
1402 entry:
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
1413 ; CHECK-NEXT:    ret
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
1419 entry:
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
1428 ; CHECK-NEXT:    ret
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
1434 entry:
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
1444 ; CHECK-NEXT:    ret
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
1450 entry:
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
1460 ; CHECK-NEXT:    ret
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
1466 entry:
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
1475 ; CHECK-NEXT:    ret
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
1481 entry:
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
1491 ; CHECK-NEXT:    ret
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
1497 entry:
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
1507 ; CHECK-NEXT:    ret
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
1513 entry:
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
1522 ; CHECK-NEXT:    ret
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
1528 entry:
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
1538 ; CHECK-NEXT:    ret
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
1544 entry:
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
1554 ; CHECK-NEXT:    ret
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
1560 entry:
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
1569 ; CHECK-NEXT:    ret
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
1575 entry:
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
1585 ; CHECK-NEXT:    ret
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
1591 entry:
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
1601 ; CHECK-NEXT:    ret
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
1607 entry:
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
1616 ; CHECK-NEXT:    ret
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
1622 entry:
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
1632 ; CHECK-NEXT:    ret
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
1638 entry:
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
1648 ; CHECK-NEXT:    ret
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
1654 entry:
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
1663 ; CHECK-NEXT:    ret
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
1669 entry:
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
1679 ; CHECK-NEXT:    ret
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
1685 entry:
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
1695 ; CHECK-NEXT:    ret
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
1701 entry:
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
1710 ; CHECK-NEXT:    ret
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
1716 entry:
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
1726 ; CHECK-NEXT:    ret
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
1732 entry:
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
1742 ; CHECK-NEXT:    ret
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
1748 entry:
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
1757 ; CHECK-NEXT:    ret
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
1763 entry:
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
1773 ; CHECK-NEXT:    ret
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
1779 entry:
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
1789 ; CHECK-NEXT:    ret
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
1795 entry:
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
1804 ; CHECK-NEXT:    ret
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
1810 entry:
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
1820 ; CHECK-NEXT:    ret
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
1826 entry:
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
1836 ; CHECK-NEXT:    ret
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
1842 entry:
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
1851 ; CHECK-NEXT:    ret
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
1857 entry:
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
1867 ; CHECK-NEXT:    ret
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
1873 entry:
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
1883 ; CHECK-NEXT:    ret
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
1889 entry:
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
1898 ; CHECK-NEXT:    ret
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
1904 entry:
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
1914 ; CHECK-NEXT:    ret
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
1920 entry:
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
1930 ; CHECK-NEXT:    ret
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
1936 entry:
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
1945 ; CHECK-NEXT:    ret
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
1951 entry:
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
1961 ; CHECK-NEXT:    ret
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
1967 entry:
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
1977 ; CHECK-NEXT:    ret
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
1983 entry:
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
1992 ; CHECK-NEXT:    ret
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
1998 entry:
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
2008 ; CHECK-NEXT:    ret
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
2014 entry:
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
2024 ; CHECK-NEXT:    ret
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
2030 entry:
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
2039 ; CHECK-NEXT:    ret
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
2045 entry:
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
2055 ; CHECK-NEXT:    ret
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
2061 entry:
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
2071 ; CHECK-NEXT:    ret
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
2077 entry:
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
2086 ; CHECK-NEXT:    ret
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
2092 entry:
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
2102 ; CHECK-NEXT:    ret
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
2108 entry:
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
2118 ; CHECK-NEXT:    ret
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
2124 entry:
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
2133 ; CHECK-NEXT:    ret
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
2139 entry:
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
2149 ; CHECK-NEXT:    ret
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
2155 entry:
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
2165 ; CHECK-NEXT:    ret
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
2171 entry:
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
2180 ; CHECK-NEXT:    ret
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
2186 entry:
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
2196 ; CHECK-NEXT:    ret
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
2202 entry:
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
2212 ; CHECK-NEXT:    ret
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
2218 entry:
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
2227 ; CHECK-NEXT:    ret
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
2233 entry:
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
2243 ; CHECK-NEXT:    ret
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
2249 entry:
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
2259 ; CHECK-NEXT:    ret
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
2265 entry:
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
2274 ; CHECK-NEXT:    ret
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
2280 entry:
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
2290 ; CHECK-NEXT:    ret
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
2296 entry:
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
2306 ; CHECK-NEXT:    ret
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
2312 entry:
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
2321 ; CHECK-NEXT:    ret
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
2327 entry:
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
2337 ; CHECK-NEXT:    ret
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
2343 entry:
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
2353 ; CHECK-NEXT:    ret
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
2359 entry:
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
2368 ; CHECK-NEXT:    ret
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
2374 entry:
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
2384 ; CHECK-NEXT:    ret
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
2390 entry:
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
2400 ; CHECK-NEXT:    ret
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
2406 entry:
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
2415 ; CHECK-NEXT:    ret
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
2421 entry:
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
2431 ; CHECK-NEXT:    ret
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
2437 entry:
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
2447 ; CHECK-NEXT:    ret
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
2453 entry:
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
2462 ; CHECK-NEXT:    ret
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
2468 entry:
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
2478 ; CHECK-NEXT:    ret
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
2484 entry:
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
2494 ; CHECK-NEXT:    ret
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
2500 entry:
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
2509 ; CHECK-NEXT:    ret
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
2515 entry:
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
2525 ; CHECK-NEXT:    ret
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
2531 entry:
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
2541 ; CHECK-NEXT:    ret
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
2547 entry:
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
2558 ; CHECK-NEXT:    ret
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
2565 entry:
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
2577 ; CHECK-NEXT:    ret
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
2584 entry:
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
2597 ; CHECK-NEXT:    ret
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
2604 entry:
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
2616 ; CHECK-NEXT:    ret
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
2623 entry:
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
2636 ; CHECK-NEXT:    ret
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
2643 entry:
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
2655 ; CHECK-NEXT:    ret
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
2662 entry:
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
2675 ; CHECK-NEXT:    ret
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
2682 entry:
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
2694 ; CHECK-NEXT:    ret
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
2701 entry:
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
2714 ; CHECK-NEXT:    ret
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
2721 entry:
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
2733 ; CHECK-NEXT:    ret
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
2740 entry:
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
2753 ; CHECK-NEXT:    ret
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
2760 entry:
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
2772 ; CHECK-NEXT:    ret
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
2779 entry:
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
2792 ; CHECK-NEXT:    ret
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
2799 entry:
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
2811 ; CHECK-NEXT:    ret
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
2818 entry:
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
2831 ; CHECK-NEXT:    ret
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
2838 entry:
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
2850 ; CHECK-NEXT:    ret
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
2857 entry:
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
2870 ; CHECK-NEXT:    ret
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
2877 entry:
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
2889 ; CHECK-NEXT:    ret
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
2896 entry:
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
2909 ; CHECK-NEXT:    ret
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
2916 entry:
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
2928 ; CHECK-NEXT:    ret
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
2935 entry:
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
2948 ; CHECK-NEXT:    ret
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
2955 entry:
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
2967 ; CHECK-NEXT:    ret
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
2974 entry:
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
2987 ; CHECK-NEXT:    ret
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
2994 entry:
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
3006 ; CHECK-NEXT:    ret
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
3013 entry:
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
3026 ; CHECK-NEXT:    ret
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
3033 entry:
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
3045 ; CHECK-NEXT:    ret
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
3052 entry:
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
3065 ; CHECK-NEXT:    ret
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
3072 entry:
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
3084 ; CHECK-NEXT:    ret
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
3091 entry:
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
3104 ; CHECK-NEXT:    ret
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
3111 entry:
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
3123 ; CHECK-NEXT:    ret
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
3130 entry:
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
3143 ; CHECK-NEXT:    ret
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
3150 entry:
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
3162 ; CHECK-NEXT:    ret
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
3169 entry:
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
3182 ; CHECK-NEXT:    ret
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
3189 entry:
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
3201 ; CHECK-NEXT:    ret
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
3208 entry:
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
3221 ; CHECK-NEXT:    ret
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
3228 entry:
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
3240 ; CHECK-NEXT:    ret
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
3247 entry:
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
3260 ; CHECK-NEXT:    ret
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
3267 entry:
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
3279 ; CHECK-NEXT:    ret
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
3286 entry:
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
3299 ; CHECK-NEXT:    ret
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
3306 entry:
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
3318 ; CHECK-NEXT:    ret
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
3325 entry:
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
3338 ; CHECK-NEXT:    ret
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
3345 entry:
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
3357 ; CHECK-NEXT:    ret
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
3364 entry:
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
3377 ; CHECK-NEXT:    ret
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
3384 entry:
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
3396 ; CHECK-NEXT:    ret
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
3403 entry:
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
3416 ; CHECK-NEXT:    ret
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
3423 entry:
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
3435 ; CHECK-NEXT:    ret
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
3442 entry:
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
3455 ; CHECK-NEXT:    ret
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
3462 entry:
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
3474 ; CHECK-NEXT:    ret
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
3481 entry:
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
3494 ; CHECK-NEXT:    ret
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
3501 entry:
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
3513 ; CHECK-NEXT:    ret
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
3520 entry:
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
3533 ; CHECK-NEXT:    ret
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
3540 entry:
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
3552 ; CHECK-NEXT:    ret
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
3559 entry:
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
3572 ; CHECK-NEXT:    ret
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
3579 entry:
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
3591 ; CHECK-NEXT:    ret
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
3598 entry:
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
3611 ; CHECK-NEXT:    ret
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
3618 entry:
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
3630 ; CHECK-NEXT:    ret
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
3637 entry:
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
3650 ; CHECK-NEXT:    ret
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
3657 entry:
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
3669 ; CHECK-NEXT:    ret
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
3676 entry:
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
3689 ; CHECK-NEXT:    ret
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
3696 entry:
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
3708 ; CHECK-NEXT:    ret
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
3715 entry:
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
3728 ; CHECK-NEXT:    ret
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
3735 entry:
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
3747 ; CHECK-NEXT:    ret
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
3754 entry:
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
3767 ; CHECK-NEXT:    ret
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
3774 entry:
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
3786 ; CHECK-NEXT:    ret
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
3793 entry:
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
3806 ; CHECK-NEXT:    ret
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
3813 entry:
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
3825 ; CHECK-NEXT:    ret
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
3832 entry:
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
3845 ; CHECK-NEXT:    ret
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
3852 entry:
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
3864 ; CHECK-NEXT:    ret
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
3871 entry:
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
3884 ; CHECK-NEXT:    ret
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
3891 entry:
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
3903 ; CHECK-NEXT:    ret
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
3910 entry:
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
3923 ; CHECK-NEXT:    ret
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
3930 entry:
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
3942 ; CHECK-NEXT:    ret
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
3949 entry:
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
3962 ; CHECK-NEXT:    ret
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
3969 entry:
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
3981 ; CHECK-NEXT:    ret
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
3988 entry:
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
4001 ; CHECK-NEXT:    ret
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
4008 entry:
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
4020 ; CHECK-NEXT:    ret
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
4027 entry:
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
4040 ; CHECK-NEXT:    ret
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
4047 entry:
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
4059 ; CHECK-NEXT:    ret
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
4066 entry:
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
4079 ; CHECK-NEXT:    ret
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
4086 entry:
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
4098 ; CHECK-NEXT:    ret
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
4105 entry:
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
4118 ; CHECK-NEXT:    ret
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
4125 entry:
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
4137 ; CHECK-NEXT:    ret
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
4144 entry:
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
4157 ; CHECK-NEXT:    ret
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
4164 entry:
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
4176 ; CHECK-NEXT:    ret
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
4183 entry:
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
4196 ; CHECK-NEXT:    ret
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
4203 entry:
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
4215 ; CHECK-NEXT:    ret
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
4222 entry:
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
4235 ; CHECK-NEXT:    ret
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
4242 entry:
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
4254 ; CHECK-NEXT:    ret
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
4261 entry:
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
4274 ; CHECK-NEXT:    ret
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
4281 entry:
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
4293 ; CHECK-NEXT:    ret
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
4300 entry:
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
4313 ; CHECK-NEXT:    ret
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
4320 entry:
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
4332 ; CHECK-NEXT:    ret
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
4339 entry:
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
4352 ; CHECK-NEXT:    ret
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
4359 entry:
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
4371 ; CHECK-NEXT:    ret
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
4378 entry:
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
4391 ; CHECK-NEXT:    ret
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
4398 entry:
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
4410 ; CHECK-NEXT:    ret
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
4417 entry:
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
4430 ; CHECK-NEXT:    ret
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
4437 entry:
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
4449 ; CHECK-NEXT:    ret
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
4456 entry:
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
4469 ; CHECK-NEXT:    ret
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
4476 entry:
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
4488 ; CHECK-NEXT:    ret
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
4495 entry:
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
4508 ; CHECK-NEXT:    ret
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
4515 entry:
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
4527 ; CHECK-NEXT:    ret
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
4534 entry:
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
4547 ; CHECK-NEXT:    ret
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
4554 entry:
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
4566 ; CHECK-NEXT:    ret
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
4573 entry:
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
4586 ; CHECK-NEXT:    ret
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
4593 entry:
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
4605 ; CHECK-NEXT:    ret
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
4612 entry:
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
4625 ; CHECK-NEXT:    ret
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
4632 entry:
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
4644 ; CHECK-NEXT:    ret
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
4651 entry:
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