[TTI] getTypeBasedIntrinsicInstrCost - add basic handling for strided load/store...
[llvm-project.git] / llvm / test / CodeGen / AArch64 / zeroing-forms-fcvtzsu.ll
blob7259502bf440025e4a8027574289c72a59a92369
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 4 x i32> @test_fcvtzs_s32_f64_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x double> %x) {
11 ; CHECK-LABEL: test_fcvtzs_s32_f64_x_1:
12 ; CHECK:       // %bb.0: // %entry
13 ; CHECK-NEXT:    fcvtzs z0.s, p0/m, z0.d
14 ; CHECK-NEXT:    ret
16 ; CHECK-2p2-LABEL: test_fcvtzs_s32_f64_x_1:
17 ; CHECK-2p2:       // %bb.0: // %entry
18 ; CHECK-2p2-NEXT:    fcvtzs z0.s, p0/z, z0.d
19 ; CHECK-2p2-NEXT:    ret
20 entry:
21   %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.fcvtzs.i32f64(<vscale x 4 x i32> poison, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)
22   ret <vscale x 4 x i32> %0
25 define <vscale x 4 x i32> @test_fcvtzs_s32_f64_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x double> %x) {
26 ; CHECK-LABEL: test_fcvtzs_s32_f64_x_2:
27 ; CHECK:       // %bb.0: // %entry
28 ; CHECK-NEXT:    fcvtzs z0.s, p0/m, z1.d
29 ; CHECK-NEXT:    ret
31 ; CHECK-2p2-LABEL: test_fcvtzs_s32_f64_x_2:
32 ; CHECK-2p2:       // %bb.0: // %entry
33 ; CHECK-2p2-NEXT:    fcvtzs z0.s, p0/z, z1.d
34 ; CHECK-2p2-NEXT:    ret
35 entry:
36   %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.fcvtzs.i32f64(<vscale x 4 x i32> poison, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)
37   ret <vscale x 4 x i32> %0
40 define <vscale x 4 x i32> @test_fcvtzs_s32_f64_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x double> %x) {
41 ; CHECK-LABEL: test_fcvtzs_s32_f64_z:
42 ; CHECK:       // %bb.0: // %entry
43 ; CHECK-NEXT:    mov z0.s, #0 // =0x0
44 ; CHECK-NEXT:    fcvtzs z0.s, p0/m, z1.d
45 ; CHECK-NEXT:    ret
47 ; CHECK-2p2-LABEL: test_fcvtzs_s32_f64_z:
48 ; CHECK-2p2:       // %bb.0: // %entry
49 ; CHECK-2p2-NEXT:    fcvtzs z0.s, p0/z, z1.d
50 ; CHECK-2p2-NEXT:    ret
51 entry:
52   %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.fcvtzs.i32f64(<vscale x 4 x i32> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)
53   ret <vscale x 4 x i32> %0
56 define <vscale x 2 x i64> @test_fcvtzs_s64_f32_x_1(<vscale x 2 x i1> %pg, <vscale x 4 x float> %x) {
57 ; CHECK-LABEL: test_fcvtzs_s64_f32_x_1:
58 ; CHECK:       // %bb.0: // %entry
59 ; CHECK-NEXT:    fcvtzs z0.d, p0/m, z0.s
60 ; CHECK-NEXT:    ret
62 ; CHECK-2p2-LABEL: test_fcvtzs_s64_f32_x_1:
63 ; CHECK-2p2:       // %bb.0: // %entry
64 ; CHECK-2p2-NEXT:    fcvtzs z0.d, p0/z, z0.s
65 ; CHECK-2p2-NEXT:    ret
66 entry:
67   %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.fcvtzs.i64f32(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 4 x float> %x)
68   ret <vscale x 2 x i64> %0
71 define <vscale x 2 x i64> @test_fcvtzs_s64_f32_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 4 x float> %x) {
72 ; CHECK-LABEL: test_fcvtzs_s64_f32_x_2:
73 ; CHECK:       // %bb.0: // %entry
74 ; CHECK-NEXT:    fcvtzs z0.d, p0/m, z1.s
75 ; CHECK-NEXT:    ret
77 ; CHECK-2p2-LABEL: test_fcvtzs_s64_f32_x_2:
78 ; CHECK-2p2:       // %bb.0: // %entry
79 ; CHECK-2p2-NEXT:    fcvtzs z0.d, p0/z, z1.s
80 ; CHECK-2p2-NEXT:    ret
81 entry:
82   %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.fcvtzs.i64f32(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 4 x float> %x)
83   ret <vscale x 2 x i64> %0
86 define <vscale x 2 x i64> @test_fcvtzs_s64_f32_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 4 x float> %x) {
87 ; CHECK-LABEL: test_fcvtzs_s64_f32_z:
88 ; CHECK:       // %bb.0: // %entry
89 ; CHECK-NEXT:    mov z0.d, #0 // =0x0
90 ; CHECK-NEXT:    fcvtzs z0.d, p0/m, z1.s
91 ; CHECK-NEXT:    ret
93 ; CHECK-2p2-LABEL: test_fcvtzs_s64_f32_z:
94 ; CHECK-2p2:       // %bb.0: // %entry
95 ; CHECK-2p2-NEXT:    fcvtzs z0.d, p0/z, z1.s
96 ; CHECK-2p2-NEXT:    ret
97 entry:
98   %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.fcvtzs.i64f32(<vscale x 2 x i64> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 4 x float> %x)
99   ret <vscale x 2 x i64> %0
102 define <vscale x 4 x i32> @test_fcvtzs_s32_f16_x_1(<vscale x 4 x i1> %pg, <vscale x 8 x half> %x) {
103 ; CHECK-LABEL: test_fcvtzs_s32_f16_x_1:
104 ; CHECK:       // %bb.0: // %entry
105 ; CHECK-NEXT:    fcvtzs z0.s, p0/m, z0.h
106 ; CHECK-NEXT:    ret
108 ; CHECK-2p2-LABEL: test_fcvtzs_s32_f16_x_1:
109 ; CHECK-2p2:       // %bb.0: // %entry
110 ; CHECK-2p2-NEXT:    fcvtzs z0.s, p0/z, z0.h
111 ; CHECK-2p2-NEXT:    ret
112 entry:
113   %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.fcvtzs.i32f16(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 8 x half> %x)
114   ret <vscale x 4 x i32> %0
117 define <vscale x 4 x i32> @test_fcvtzs_s32_f16_x_2(<vscale x 4 x i1> %pg, double %z0, <vscale x 8 x half> %x) {
118 ; CHECK-LABEL: test_fcvtzs_s32_f16_x_2:
119 ; CHECK:       // %bb.0: // %entry
120 ; CHECK-NEXT:    fcvtzs z0.s, p0/m, z1.h
121 ; CHECK-NEXT:    ret
123 ; CHECK-2p2-LABEL: test_fcvtzs_s32_f16_x_2:
124 ; CHECK-2p2:       // %bb.0: // %entry
125 ; CHECK-2p2-NEXT:    fcvtzs z0.s, p0/z, z1.h
126 ; CHECK-2p2-NEXT:    ret
127 entry:
128   %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.fcvtzs.i32f16(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 8 x half> %x)
129   ret <vscale x 4 x i32> %0
132 define <vscale x 4 x i32> @test_fcvtzs_s32_f16_z(<vscale x 4 x i1> %pg, double %z0, <vscale x 8 x half> %x) {
133 ; CHECK-LABEL: test_fcvtzs_s32_f16_z:
134 ; CHECK:       // %bb.0: // %entry
135 ; CHECK-NEXT:    mov z0.s, #0 // =0x0
136 ; CHECK-NEXT:    fcvtzs z0.s, p0/m, z1.h
137 ; CHECK-NEXT:    ret
139 ; CHECK-2p2-LABEL: test_fcvtzs_s32_f16_z:
140 ; CHECK-2p2:       // %bb.0: // %entry
141 ; CHECK-2p2-NEXT:    fcvtzs z0.s, p0/z, z1.h
142 ; CHECK-2p2-NEXT:    ret
143 entry:
144   %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.fcvtzs.i32f16(<vscale x 4 x i32> zeroinitializer, <vscale x 4 x i1> %pg, <vscale x 8 x half> %x)
145   ret <vscale x 4 x i32> %0
148 define <vscale x 2 x i64> @test_fcvtzs_s64_f16_x_1(<vscale x 2 x i1> %pg, <vscale x 8 x half> %x) {
149 ; CHECK-LABEL: test_fcvtzs_s64_f16_x_1:
150 ; CHECK:       // %bb.0: // %entry
151 ; CHECK-NEXT:    fcvtzs z0.d, p0/m, z0.h
152 ; CHECK-NEXT:    ret
154 ; CHECK-2p2-LABEL: test_fcvtzs_s64_f16_x_1:
155 ; CHECK-2p2:       // %bb.0: // %entry
156 ; CHECK-2p2-NEXT:    fcvtzs z0.d, p0/z, z0.h
157 ; CHECK-2p2-NEXT:    ret
158 entry:
159   %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.fcvtzs.i64f16(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 8 x half> %x)
160   ret <vscale x 2 x i64> %0
163 define <vscale x 2 x i64> @test_fcvtzs_s64_f16_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 8 x half> %x) {
164 ; CHECK-LABEL: test_fcvtzs_s64_f16_x_2:
165 ; CHECK:       // %bb.0: // %entry
166 ; CHECK-NEXT:    fcvtzs z0.d, p0/m, z1.h
167 ; CHECK-NEXT:    ret
169 ; CHECK-2p2-LABEL: test_fcvtzs_s64_f16_x_2:
170 ; CHECK-2p2:       // %bb.0: // %entry
171 ; CHECK-2p2-NEXT:    fcvtzs z0.d, p0/z, z1.h
172 ; CHECK-2p2-NEXT:    ret
173 entry:
174   %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.fcvtzs.i64f16(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 8 x half> %x)
175   ret <vscale x 2 x i64> %0
178 define <vscale x 2 x i64> @test_fcvtzs_s64_f16_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 8 x half> %x) {
179 ; CHECK-LABEL: test_fcvtzs_s64_f16_z:
180 ; CHECK:       // %bb.0: // %entry
181 ; CHECK-NEXT:    mov z0.d, #0 // =0x0
182 ; CHECK-NEXT:    fcvtzs z0.d, p0/m, z1.h
183 ; CHECK-NEXT:    ret
185 ; CHECK-2p2-LABEL: test_fcvtzs_s64_f16_z:
186 ; CHECK-2p2:       // %bb.0: // %entry
187 ; CHECK-2p2-NEXT:    fcvtzs z0.d, p0/z, z1.h
188 ; CHECK-2p2-NEXT:    ret
189 entry:
190   %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.fcvtzs.i64f16(<vscale x 2 x i64> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 8 x half> %x)
191   ret <vscale x 2 x i64> %0
194 define <vscale x 4 x i32> @test_fcvtzu_u32_f64_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x double> %x) {
195 ; CHECK-LABEL: test_fcvtzu_u32_f64_x_1:
196 ; CHECK:       // %bb.0: // %entry
197 ; CHECK-NEXT:    fcvtzu z0.s, p0/m, z0.d
198 ; CHECK-NEXT:    ret
200 ; CHECK-2p2-LABEL: test_fcvtzu_u32_f64_x_1:
201 ; CHECK-2p2:       // %bb.0: // %entry
202 ; CHECK-2p2-NEXT:    fcvtzu z0.s, p0/z, z0.d
203 ; CHECK-2p2-NEXT:    ret
204 entry:
205   %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.fcvtzu.i32f64(<vscale x 4 x i32> poison, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)
206   ret <vscale x 4 x i32> %0
209 define <vscale x 4 x i32> @test_fcvtzu_u32_f64_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x double> %x) {
210 ; CHECK-LABEL: test_fcvtzu_u32_f64_x_2:
211 ; CHECK:       // %bb.0: // %entry
212 ; CHECK-NEXT:    fcvtzu z0.s, p0/m, z1.d
213 ; CHECK-NEXT:    ret
215 ; CHECK-2p2-LABEL: test_fcvtzu_u32_f64_x_2:
216 ; CHECK-2p2:       // %bb.0: // %entry
217 ; CHECK-2p2-NEXT:    fcvtzu z0.s, p0/z, z1.d
218 ; CHECK-2p2-NEXT:    ret
219 entry:
220   %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.fcvtzu.i32f64(<vscale x 4 x i32> poison, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)
221   ret <vscale x 4 x i32> %0
224 define <vscale x 4 x i32> @test_fcvtzu_u32_f64_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x double> %x) {
225 ; CHECK-LABEL: test_fcvtzu_u32_f64_z:
226 ; CHECK:       // %bb.0: // %entry
227 ; CHECK-NEXT:    mov z0.s, #0 // =0x0
228 ; CHECK-NEXT:    fcvtzu z0.s, p0/m, z1.d
229 ; CHECK-NEXT:    ret
231 ; CHECK-2p2-LABEL: test_fcvtzu_u32_f64_z:
232 ; CHECK-2p2:       // %bb.0: // %entry
233 ; CHECK-2p2-NEXT:    fcvtzu z0.s, p0/z, z1.d
234 ; CHECK-2p2-NEXT:    ret
235 entry:
236   %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.fcvtzu.i32f64(<vscale x 4 x i32> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)
237   ret <vscale x 4 x i32> %0
240 define <vscale x 2 x i64> @test_fcvtzu_u64_f32_x_1(<vscale x 2 x i1> %pg, <vscale x 4 x float> %x) {
241 ; CHECK-LABEL: test_fcvtzu_u64_f32_x_1:
242 ; CHECK:       // %bb.0: // %entry
243 ; CHECK-NEXT:    fcvtzu z0.d, p0/m, z0.s
244 ; CHECK-NEXT:    ret
246 ; CHECK-2p2-LABEL: test_fcvtzu_u64_f32_x_1:
247 ; CHECK-2p2:       // %bb.0: // %entry
248 ; CHECK-2p2-NEXT:    fcvtzu z0.d, p0/z, z0.s
249 ; CHECK-2p2-NEXT:    ret
250 entry:
251   %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.fcvtzu.i64f32(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 4 x float> %x)
252   ret <vscale x 2 x i64> %0
255 define <vscale x 2 x i64> @test_fcvtzu_u64_f32_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 4 x float> %x) {
256 ; CHECK-LABEL: test_fcvtzu_u64_f32_x_2:
257 ; CHECK:       // %bb.0: // %entry
258 ; CHECK-NEXT:    fcvtzu z0.d, p0/m, z1.s
259 ; CHECK-NEXT:    ret
261 ; CHECK-2p2-LABEL: test_fcvtzu_u64_f32_x_2:
262 ; CHECK-2p2:       // %bb.0: // %entry
263 ; CHECK-2p2-NEXT:    fcvtzu z0.d, p0/z, z1.s
264 ; CHECK-2p2-NEXT:    ret
265 entry:
266   %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.fcvtzu.i64f32(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 4 x float> %x)
267   ret <vscale x 2 x i64> %0
270 define <vscale x 2 x i64> @test_fcvtzu_u64_f32_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 4 x float> %x) {
271 ; CHECK-LABEL: test_fcvtzu_u64_f32_z:
272 ; CHECK:       // %bb.0: // %entry
273 ; CHECK-NEXT:    mov z0.d, #0 // =0x0
274 ; CHECK-NEXT:    fcvtzu z0.d, p0/m, z1.s
275 ; CHECK-NEXT:    ret
277 ; CHECK-2p2-LABEL: test_fcvtzu_u64_f32_z:
278 ; CHECK-2p2:       // %bb.0: // %entry
279 ; CHECK-2p2-NEXT:    fcvtzu z0.d, p0/z, z1.s
280 ; CHECK-2p2-NEXT:    ret
281 entry:
282   %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.fcvtzu.i64f32(<vscale x 2 x i64> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 4 x float> %x)
283   ret <vscale x 2 x i64> %0
286 define <vscale x 4 x i32> @test_fcvtzu_u32_f16_x_1(<vscale x 4 x i1> %pg, <vscale x 8 x half> %x) {
287 ; CHECK-LABEL: test_fcvtzu_u32_f16_x_1:
288 ; CHECK:       // %bb.0: // %entry
289 ; CHECK-NEXT:    fcvtzu z0.s, p0/m, z0.h
290 ; CHECK-NEXT:    ret
292 ; CHECK-2p2-LABEL: test_fcvtzu_u32_f16_x_1:
293 ; CHECK-2p2:       // %bb.0: // %entry
294 ; CHECK-2p2-NEXT:    fcvtzu z0.s, p0/z, z0.h
295 ; CHECK-2p2-NEXT:    ret
296 entry:
297   %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.fcvtzu.i32f16(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 8 x half> %x)
298   ret <vscale x 4 x i32> %0
301 define <vscale x 4 x i32> @test_fcvtzu_u32_f16_x_2(<vscale x 4 x i1> %pg, double %z0, <vscale x 8 x half> %x) {
302 ; CHECK-LABEL: test_fcvtzu_u32_f16_x_2:
303 ; CHECK:       // %bb.0: // %entry
304 ; CHECK-NEXT:    fcvtzu z0.s, p0/m, z1.h
305 ; CHECK-NEXT:    ret
307 ; CHECK-2p2-LABEL: test_fcvtzu_u32_f16_x_2:
308 ; CHECK-2p2:       // %bb.0: // %entry
309 ; CHECK-2p2-NEXT:    fcvtzu z0.s, p0/z, z1.h
310 ; CHECK-2p2-NEXT:    ret
311 entry:
312   %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.fcvtzu.i32f16(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 8 x half> %x)
313   ret <vscale x 4 x i32> %0
316 define <vscale x 4 x i32> @test_fcvtzu_u32_f16_z(<vscale x 4 x i1> %pg, double %z0, <vscale x 8 x half> %x) {
317 ; CHECK-LABEL: test_fcvtzu_u32_f16_z:
318 ; CHECK:       // %bb.0: // %entry
319 ; CHECK-NEXT:    mov z0.s, #0 // =0x0
320 ; CHECK-NEXT:    fcvtzu z0.s, p0/m, z1.h
321 ; CHECK-NEXT:    ret
323 ; CHECK-2p2-LABEL: test_fcvtzu_u32_f16_z:
324 ; CHECK-2p2:       // %bb.0: // %entry
325 ; CHECK-2p2-NEXT:    fcvtzu z0.s, p0/z, z1.h
326 ; CHECK-2p2-NEXT:    ret
327 entry:
328   %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.fcvtzu.i32f16(<vscale x 4 x i32> zeroinitializer, <vscale x 4 x i1> %pg, <vscale x 8 x half> %x)
329   ret <vscale x 4 x i32> %0
332 define <vscale x 2 x i64> @test_fcvtzu_u64_f16_x_1(<vscale x 2 x i1> %pg, <vscale x 8 x half> %x) {
333 ; CHECK-LABEL: test_fcvtzu_u64_f16_x_1:
334 ; CHECK:       // %bb.0: // %entry
335 ; CHECK-NEXT:    fcvtzu z0.d, p0/m, z0.h
336 ; CHECK-NEXT:    ret
338 ; CHECK-2p2-LABEL: test_fcvtzu_u64_f16_x_1:
339 ; CHECK-2p2:       // %bb.0: // %entry
340 ; CHECK-2p2-NEXT:    fcvtzu z0.d, p0/z, z0.h
341 ; CHECK-2p2-NEXT:    ret
342 entry:
343   %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.fcvtzu.i64f16(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 8 x half> %x)
344   ret <vscale x 2 x i64> %0
347 define <vscale x 2 x i64> @test_fcvtzu_u64_f16_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 8 x half> %x) {
348 ; CHECK-LABEL: test_fcvtzu_u64_f16_x_2:
349 ; CHECK:       // %bb.0: // %entry
350 ; CHECK-NEXT:    fcvtzu z0.d, p0/m, z1.h
351 ; CHECK-NEXT:    ret
353 ; CHECK-2p2-LABEL: test_fcvtzu_u64_f16_x_2:
354 ; CHECK-2p2:       // %bb.0: // %entry
355 ; CHECK-2p2-NEXT:    fcvtzu z0.d, p0/z, z1.h
356 ; CHECK-2p2-NEXT:    ret
357 entry:
358   %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.fcvtzu.i64f16(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 8 x half> %x)
359   ret <vscale x 2 x i64> %0
362 define <vscale x 2 x i64> @test_fcvtzu_u64_f16_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 8 x half> %x) {
363 ; CHECK-LABEL: test_fcvtzu_u64_f16_z:
364 ; CHECK:       // %bb.0: // %entry
365 ; CHECK-NEXT:    mov z0.d, #0 // =0x0
366 ; CHECK-NEXT:    fcvtzu z0.d, p0/m, z1.h
367 ; CHECK-NEXT:    ret
369 ; CHECK-2p2-LABEL: test_fcvtzu_u64_f16_z:
370 ; CHECK-2p2:       // %bb.0: // %entry
371 ; CHECK-2p2-NEXT:    fcvtzu z0.d, p0/z, z1.h
372 ; CHECK-2p2-NEXT:    ret
373 entry:
374   %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.fcvtzu.i64f16(<vscale x 2 x i64> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 8 x half> %x)
375   ret <vscale x 2 x i64> %0
379 define <vscale x 8 x i16> @test_svcvt_s16_f16_x_1(<vscale x 8 x i1> %pg, <vscale x 8 x half> %x) {
380 ; CHECK-LABEL: test_svcvt_s16_f16_x_1:
381 ; CHECK:       // %bb.0: // %entry
382 ; CHECK-NEXT:    fcvtzs z0.h, p0/m, z0.h
383 ; CHECK-NEXT:    ret
385 ; CHECK-2p2-LABEL: test_svcvt_s16_f16_x_1:
386 ; CHECK-2p2:       // %bb.0: // %entry
387 ; CHECK-2p2-NEXT:    fcvtzs z0.h, p0/z, z0.h
388 ; CHECK-2p2-NEXT:    ret
389 entry:
390   %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.fcvtzs.nxv8i16.nxv8f16(<vscale x 8 x i16> poison, <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)
391   ret <vscale x 8 x i16> %0
394 define <vscale x 8 x i16> @test_svcvt_s16_f16_x_2(<vscale x 8 x i1> %pg, double %z0, <vscale x 8 x half> %x) {
395 ; CHECK-LABEL: test_svcvt_s16_f16_x_2:
396 ; CHECK:       // %bb.0: // %entry
397 ; CHECK-NEXT:    movprfx z0, z1
398 ; CHECK-NEXT:    fcvtzs z0.h, p0/m, z1.h
399 ; CHECK-NEXT:    ret
401 ; CHECK-2p2-LABEL: test_svcvt_s16_f16_x_2:
402 ; CHECK-2p2:       // %bb.0: // %entry
403 ; CHECK-2p2-NEXT:    fcvtzs z0.h, p0/z, z1.h
404 ; CHECK-2p2-NEXT:    ret
405 entry:
406   %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.fcvtzs.nxv8i16.nxv8f16(<vscale x 8 x i16> poison, <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)
407   ret <vscale x 8 x i16> %0
410 define <vscale x 8 x i16> @test_svcvt_s16_f16_z(<vscale x 8 x i1> %pg, double %z0, <vscale x 8 x half> %x) {
411 ; CHECK-LABEL: test_svcvt_s16_f16_z:
412 ; CHECK:       // %bb.0: // %entry
413 ; CHECK-NEXT:    mov z0.h, #0 // =0x0
414 ; CHECK-NEXT:    fcvtzs z0.h, p0/m, z1.h
415 ; CHECK-NEXT:    ret
417 ; CHECK-2p2-LABEL: test_svcvt_s16_f16_z:
418 ; CHECK-2p2:       // %bb.0: // %entry
419 ; CHECK-2p2-NEXT:    fcvtzs z0.h, p0/z, z1.h
420 ; CHECK-2p2-NEXT:    ret
421 entry:
422   %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.fcvtzs.nxv8i16.nxv8f16(<vscale x 8 x i16> zeroinitializer, <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)
423   ret <vscale x 8 x i16> %0
426 define <vscale x 8 x i16> @test_svcvt_u16_f16_x_1(<vscale x 8 x i1> %pg, <vscale x 8 x half> %x) {
427 ; CHECK-LABEL: test_svcvt_u16_f16_x_1:
428 ; CHECK:       // %bb.0: // %entry
429 ; CHECK-NEXT:    fcvtzu z0.h, p0/m, z0.h
430 ; CHECK-NEXT:    ret
432 ; CHECK-2p2-LABEL: test_svcvt_u16_f16_x_1:
433 ; CHECK-2p2:       // %bb.0: // %entry
434 ; CHECK-2p2-NEXT:    fcvtzu z0.h, p0/z, z0.h
435 ; CHECK-2p2-NEXT:    ret
436 entry:
437   %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.fcvtzu.nxv8i16.nxv8f16(<vscale x 8 x i16> poison, <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)
438   ret <vscale x 8 x i16> %0
441 define <vscale x 8 x i16> @test_svcvt_u16_f16_x_2(<vscale x 8 x i1> %pg, double %z0, <vscale x 8 x half> %x) {
442 ; CHECK-LABEL: test_svcvt_u16_f16_x_2:
443 ; CHECK:       // %bb.0: // %entry
444 ; CHECK-NEXT:    movprfx z0, z1
445 ; CHECK-NEXT:    fcvtzu z0.h, p0/m, z1.h
446 ; CHECK-NEXT:    ret
448 ; CHECK-2p2-LABEL: test_svcvt_u16_f16_x_2:
449 ; CHECK-2p2:       // %bb.0: // %entry
450 ; CHECK-2p2-NEXT:    fcvtzu z0.h, p0/z, z1.h
451 ; CHECK-2p2-NEXT:    ret
452 entry:
453   %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.fcvtzu.nxv8i16.nxv8f16(<vscale x 8 x i16> poison, <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)
454   ret <vscale x 8 x i16> %0
457 define <vscale x 8 x i16> @test_svcvt_u16_f16_z(<vscale x 8 x i1> %pg, double %z0, <vscale x 8 x half> %x) {
458 ; CHECK-LABEL: test_svcvt_u16_f16_z:
459 ; CHECK:       // %bb.0: // %entry
460 ; CHECK-NEXT:    mov z0.h, #0 // =0x0
461 ; CHECK-NEXT:    fcvtzu z0.h, p0/m, z1.h
462 ; CHECK-NEXT:    ret
464 ; CHECK-2p2-LABEL: test_svcvt_u16_f16_z:
465 ; CHECK-2p2:       // %bb.0: // %entry
466 ; CHECK-2p2-NEXT:    fcvtzu z0.h, p0/z, z1.h
467 ; CHECK-2p2-NEXT:    ret
468 entry:
469   %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.fcvtzu.nxv8i16.nxv8f16(<vscale x 8 x i16> zeroinitializer, <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)
470   ret <vscale x 8 x i16> %0
473 define <vscale x 4 x i32> @test_svcvt_s32_f32_x_1(<vscale x 4 x i1> %pg, <vscale x 4 x float> %x) {
474 ; CHECK-LABEL: test_svcvt_s32_f32_x_1:
475 ; CHECK:       // %bb.0: // %entry
476 ; CHECK-NEXT:    fcvtzs z0.s, p0/m, z0.s
477 ; CHECK-NEXT:    ret
479 ; CHECK-2p2-LABEL: test_svcvt_s32_f32_x_1:
480 ; CHECK-2p2:       // %bb.0: // %entry
481 ; CHECK-2p2-NEXT:    fcvtzs z0.s, p0/z, z0.s
482 ; CHECK-2p2-NEXT:    ret
483 entry:
484   %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.fcvtzs.nxv4i32.nxv4f32(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)
485   ret <vscale x 4 x i32> %0
488 define <vscale x 4 x i32> @test_svcvt_s32_f32_x_2(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x float> %x) {
489 ; CHECK-LABEL: test_svcvt_s32_f32_x_2:
490 ; CHECK:       // %bb.0: // %entry
491 ; CHECK-NEXT:    movprfx z0, z1
492 ; CHECK-NEXT:    fcvtzs z0.s, p0/m, z1.s
493 ; CHECK-NEXT:    ret
495 ; CHECK-2p2-LABEL: test_svcvt_s32_f32_x_2:
496 ; CHECK-2p2:       // %bb.0: // %entry
497 ; CHECK-2p2-NEXT:    fcvtzs z0.s, p0/z, z1.s
498 ; CHECK-2p2-NEXT:    ret
499 entry:
500   %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.fcvtzs.nxv4i32.nxv4f32(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)
501   ret <vscale x 4 x i32> %0
504 define <vscale x 4 x i32> @test_svcvt_s32_f32_z(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x float> %x) {
505 ; CHECK-LABEL: test_svcvt_s32_f32_z:
506 ; CHECK:       // %bb.0: // %entry
507 ; CHECK-NEXT:    mov z0.s, #0 // =0x0
508 ; CHECK-NEXT:    fcvtzs z0.s, p0/m, z1.s
509 ; CHECK-NEXT:    ret
511 ; CHECK-2p2-LABEL: test_svcvt_s32_f32_z:
512 ; CHECK-2p2:       // %bb.0: // %entry
513 ; CHECK-2p2-NEXT:    fcvtzs z0.s, p0/z, z1.s
514 ; CHECK-2p2-NEXT:    ret
515 entry:
516   %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.fcvtzs.nxv4i32.nxv4f32(<vscale x 4 x i32> zeroinitializer, <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)
517   ret <vscale x 4 x i32> %0
520 define <vscale x 4 x i32> @test_svcvt_u32_f32_x_1(<vscale x 4 x i1> %pg, <vscale x 4 x float> %x) {
521 ; CHECK-LABEL: test_svcvt_u32_f32_x_1:
522 ; CHECK:       // %bb.0: // %entry
523 ; CHECK-NEXT:    fcvtzu z0.s, p0/m, z0.s
524 ; CHECK-NEXT:    ret
526 ; CHECK-2p2-LABEL: test_svcvt_u32_f32_x_1:
527 ; CHECK-2p2:       // %bb.0: // %entry
528 ; CHECK-2p2-NEXT:    fcvtzu z0.s, p0/z, z0.s
529 ; CHECK-2p2-NEXT:    ret
530 entry:
531   %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.fcvtzu.nxv4i32.nxv4f32(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)
532   ret <vscale x 4 x i32> %0
535 define <vscale x 4 x i32> @test_svcvt_u32_f32_x_2(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x float> %x) {
536 ; CHECK-LABEL: test_svcvt_u32_f32_x_2:
537 ; CHECK:       // %bb.0: // %entry
538 ; CHECK-NEXT:    movprfx z0, z1
539 ; CHECK-NEXT:    fcvtzu z0.s, p0/m, z1.s
540 ; CHECK-NEXT:    ret
542 ; CHECK-2p2-LABEL: test_svcvt_u32_f32_x_2:
543 ; CHECK-2p2:       // %bb.0: // %entry
544 ; CHECK-2p2-NEXT:    fcvtzu z0.s, p0/z, z1.s
545 ; CHECK-2p2-NEXT:    ret
546 entry:
547   %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.fcvtzu.nxv4i32.nxv4f32(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)
548   ret <vscale x 4 x i32> %0
551 define <vscale x 4 x i32> @test_svcvt_u32_f32_z(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x float> %x) {
552 ; CHECK-LABEL: test_svcvt_u32_f32_z:
553 ; CHECK:       // %bb.0: // %entry
554 ; CHECK-NEXT:    mov z0.s, #0 // =0x0
555 ; CHECK-NEXT:    fcvtzu z0.s, p0/m, z1.s
556 ; CHECK-NEXT:    ret
558 ; CHECK-2p2-LABEL: test_svcvt_u32_f32_z:
559 ; CHECK-2p2:       // %bb.0: // %entry
560 ; CHECK-2p2-NEXT:    fcvtzu z0.s, p0/z, z1.s
561 ; CHECK-2p2-NEXT:    ret
562 entry:
563   %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.fcvtzu.nxv4i32.nxv4f32(<vscale x 4 x i32> zeroinitializer, <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)
564   ret <vscale x 4 x i32> %0
567 define <vscale x 2 x i64> @test_svcvt_s64_f64_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x double> %x) {
568 ; CHECK-LABEL: test_svcvt_s64_f64_x_1:
569 ; CHECK:       // %bb.0: // %entry
570 ; CHECK-NEXT:    fcvtzs z0.d, p0/m, z0.d
571 ; CHECK-NEXT:    ret
573 ; CHECK-2p2-LABEL: test_svcvt_s64_f64_x_1:
574 ; CHECK-2p2:       // %bb.0: // %entry
575 ; CHECK-2p2-NEXT:    fcvtzs z0.d, p0/z, z0.d
576 ; CHECK-2p2-NEXT:    ret
577 entry:
578   %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.fcvtzs.nxv2i64.nxv2f64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)
579   ret <vscale x 2 x i64> %0
582 define <vscale x 2 x i64> @test_svcvt_s64_f64_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x double> %x) {
583 ; CHECK-LABEL: test_svcvt_s64_f64_x_2:
584 ; CHECK:       // %bb.0: // %entry
585 ; CHECK-NEXT:    movprfx z0, z1
586 ; CHECK-NEXT:    fcvtzs z0.d, p0/m, z1.d
587 ; CHECK-NEXT:    ret
589 ; CHECK-2p2-LABEL: test_svcvt_s64_f64_x_2:
590 ; CHECK-2p2:       // %bb.0: // %entry
591 ; CHECK-2p2-NEXT:    fcvtzs z0.d, p0/z, z1.d
592 ; CHECK-2p2-NEXT:    ret
593 entry:
594   %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.fcvtzs.nxv2i64.nxv2f64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)
595   ret <vscale x 2 x i64> %0
598 define <vscale x 2 x i64> @test_svcvt_s64_f64_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x double> %x) {
599 ; CHECK-LABEL: test_svcvt_s64_f64_z:
600 ; CHECK:       // %bb.0: // %entry
601 ; CHECK-NEXT:    mov z0.d, #0 // =0x0
602 ; CHECK-NEXT:    fcvtzs z0.d, p0/m, z1.d
603 ; CHECK-NEXT:    ret
605 ; CHECK-2p2-LABEL: test_svcvt_s64_f64_z:
606 ; CHECK-2p2:       // %bb.0: // %entry
607 ; CHECK-2p2-NEXT:    fcvtzs z0.d, p0/z, z1.d
608 ; CHECK-2p2-NEXT:    ret
609 entry:
610   %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.fcvtzs.nxv2i64.nxv2f64(<vscale x 2 x i64> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)
611   ret <vscale x 2 x i64> %0
614 define <vscale x 2 x i64> @test_svcvt_u64_f64_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x double> %x) {
615 ; CHECK-LABEL: test_svcvt_u64_f64_x_1:
616 ; CHECK:       // %bb.0: // %entry
617 ; CHECK-NEXT:    fcvtzu z0.d, p0/m, z0.d
618 ; CHECK-NEXT:    ret
620 ; CHECK-2p2-LABEL: test_svcvt_u64_f64_x_1:
621 ; CHECK-2p2:       // %bb.0: // %entry
622 ; CHECK-2p2-NEXT:    fcvtzu z0.d, p0/z, z0.d
623 ; CHECK-2p2-NEXT:    ret
624 entry:
625   %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.fcvtzu.nxv2i64.nxv2f64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)
626   ret <vscale x 2 x i64> %0
629 define <vscale x 2 x i64> @test_svcvt_u64_f64_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x double> %x) {
630 ; CHECK-LABEL: test_svcvt_u64_f64_x_2:
631 ; CHECK:       // %bb.0: // %entry
632 ; CHECK-NEXT:    movprfx z0, z1
633 ; CHECK-NEXT:    fcvtzu z0.d, p0/m, z1.d
634 ; CHECK-NEXT:    ret
636 ; CHECK-2p2-LABEL: test_svcvt_u64_f64_x_2:
637 ; CHECK-2p2:       // %bb.0: // %entry
638 ; CHECK-2p2-NEXT:    fcvtzu z0.d, p0/z, z1.d
639 ; CHECK-2p2-NEXT:    ret
640 entry:
641   %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.fcvtzu.nxv2i64.nxv2f64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)
642   ret <vscale x 2 x i64> %0
645 define <vscale x 2 x i64> @test_svcvt_u64_f64_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x double> %x) {
646 ; CHECK-LABEL: test_svcvt_u64_f64_z:
647 ; CHECK:       // %bb.0: // %entry
648 ; CHECK-NEXT:    mov z0.d, #0 // =0x0
649 ; CHECK-NEXT:    fcvtzu z0.d, p0/m, z1.d
650 ; CHECK-NEXT:    ret
652 ; CHECK-2p2-LABEL: test_svcvt_u64_f64_z:
653 ; CHECK-2p2:       // %bb.0: // %entry
654 ; CHECK-2p2-NEXT:    fcvtzu z0.d, p0/z, z1.d
655 ; CHECK-2p2-NEXT:    ret
656 entry:
657   %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.fcvtzu.nxv2i64.nxv2f64(<vscale x 2 x i64> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)
658   ret <vscale x 2 x i64> %0
661 define <vscale x 4 x i32> @test_fcvtzs_i32_f64_ptrue_u(double %z0, <vscale x 2 x double> %x) {
662 ; CHECK-LABEL: test_fcvtzs_i32_f64_ptrue_u:
663 ; CHECK:       // %bb.0: // %entry
664 ; CHECK-NEXT:    ptrue p0.d
665 ; CHECK-NEXT:    fcvtzs z0.s, p0/m, z1.d
666 ; CHECK-NEXT:    ret
668 ; CHECK-2p2-LABEL: test_fcvtzs_i32_f64_ptrue_u:
669 ; CHECK-2p2:       // %bb.0: // %entry
670 ; CHECK-2p2-NEXT:    ptrue p0.d
671 ; CHECK-2p2-NEXT:    fcvtzs z0.s, p0/z, z1.d
672 ; CHECK-2p2-NEXT:    ret
673 entry:
674   %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)
675   %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.fcvtzs.i32f64(<vscale x 4 x i32> poison, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)
676   ret <vscale x 4 x i32> %0
679 define <vscale x 4 x i32> @test_fcvtzs_i32_f64_ptrue(double %z0, <vscale x 4 x i32> %x, <vscale x 2 x double> %y) {
680 ; CHECK-LABEL: test_fcvtzs_i32_f64_ptrue:
681 ; CHECK:       // %bb.0: // %entry
682 ; CHECK-NEXT:    mov z0.d, z1.d
683 ; CHECK-NEXT:    ptrue p0.d
684 ; CHECK-NEXT:    fcvtzs z0.s, p0/m, z2.d
685 ; CHECK-NEXT:    ret
687 ; CHECK-2p2-LABEL: test_fcvtzs_i32_f64_ptrue:
688 ; CHECK-2p2:       // %bb.0: // %entry
689 ; CHECK-2p2-NEXT:    ptrue p0.d
690 ; CHECK-2p2-NEXT:    fcvtzs z0.s, p0/z, z2.d
691 ; CHECK-2p2-NEXT:    ret
692 entry:
693   %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)
694   %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.fcvtzs.i32f64(<vscale x 4 x i32> %x, <vscale x 2 x i1> %pg, <vscale x 2 x double> %y)
695   ret <vscale x 4 x i32> %0
698 define <vscale x 4 x i32> @test_fcvtzu_i32_f64_ptrue_u(double %z0, <vscale x 2 x double> %x) {
699 ; CHECK-LABEL: test_fcvtzu_i32_f64_ptrue_u:
700 ; CHECK:       // %bb.0: // %entry
701 ; CHECK-NEXT:    ptrue p0.d
702 ; CHECK-NEXT:    fcvtzu z0.s, p0/m, z1.d
703 ; CHECK-NEXT:    ret
705 ; CHECK-2p2-LABEL: test_fcvtzu_i32_f64_ptrue_u:
706 ; CHECK-2p2:       // %bb.0: // %entry
707 ; CHECK-2p2-NEXT:    ptrue p0.d
708 ; CHECK-2p2-NEXT:    fcvtzu z0.s, p0/z, z1.d
709 ; CHECK-2p2-NEXT:    ret
710 entry:
711   %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)
712   %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.fcvtzu.i32f64(<vscale x 4 x i32> poison, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)
713   ret <vscale x 4 x i32> %0
716 define <vscale x 4 x i32> @test_fcvtzu_i32_f64_ptrue(double %z0, <vscale x 4 x i32> %x, <vscale x 2 x double> %y) {
717 ; CHECK-LABEL: test_fcvtzu_i32_f64_ptrue:
718 ; CHECK:       // %bb.0: // %entry
719 ; CHECK-NEXT:    mov z0.d, z1.d
720 ; CHECK-NEXT:    ptrue p0.d
721 ; CHECK-NEXT:    fcvtzu z0.s, p0/m, z2.d
722 ; CHECK-NEXT:    ret
724 ; CHECK-2p2-LABEL: test_fcvtzu_i32_f64_ptrue:
725 ; CHECK-2p2:       // %bb.0: // %entry
726 ; CHECK-2p2-NEXT:    ptrue p0.d
727 ; CHECK-2p2-NEXT:    fcvtzu z0.s, p0/z, z2.d
728 ; CHECK-2p2-NEXT:    ret
729 entry:
730   %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)
731   %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.fcvtzu.i32f64(<vscale x 4 x i32> %x, <vscale x 2 x i1> %pg, <vscale x 2 x double> %y)
732   ret <vscale x 4 x i32> %0
735 define <vscale x 2 x i64> @test_fcvtzs_i64_f32_ptrue_u(double %z0, <vscale x 4 x float> %x) {
736 ; CHECK-LABEL: test_fcvtzs_i64_f32_ptrue_u:
737 ; CHECK:       // %bb.0: // %entry
738 ; CHECK-NEXT:    ptrue p0.d
739 ; CHECK-NEXT:    fcvtzs z0.d, p0/m, z1.s
740 ; CHECK-NEXT:    ret
742 ; CHECK-2p2-LABEL: test_fcvtzs_i64_f32_ptrue_u:
743 ; CHECK-2p2:       // %bb.0: // %entry
744 ; CHECK-2p2-NEXT:    ptrue p0.d
745 ; CHECK-2p2-NEXT:    fcvtzs z0.d, p0/z, z1.s
746 ; CHECK-2p2-NEXT:    ret
747 entry:
748   %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)
749   %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.fcvtzs.i64f32(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 4 x float> %x)
750   ret <vscale x 2 x i64> %0
753 define <vscale x 2 x i64> @test_fcvtzs_i64_f32_ptrue(double %z0, <vscale x 2 x i64> %x, <vscale x 4 x float> %y) {
754 ; CHECK-LABEL: test_fcvtzs_i64_f32_ptrue:
755 ; CHECK:       // %bb.0: // %entry
756 ; CHECK-NEXT:    mov z0.d, z1.d
757 ; CHECK-NEXT:    ptrue p0.d
758 ; CHECK-NEXT:    fcvtzs z0.d, p0/m, z2.s
759 ; CHECK-NEXT:    ret
761 ; CHECK-2p2-LABEL: test_fcvtzs_i64_f32_ptrue:
762 ; CHECK-2p2:       // %bb.0: // %entry
763 ; CHECK-2p2-NEXT:    ptrue p0.d
764 ; CHECK-2p2-NEXT:    fcvtzs z0.d, p0/z, z2.s
765 ; CHECK-2p2-NEXT:    ret
766 entry:
767   %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)
768   %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.fcvtzs.i64f32(<vscale x 2 x i64> %x, <vscale x 2 x i1> %pg, <vscale x 4 x float> %y)
769   ret <vscale x 2 x i64> %0
772 define <vscale x 2 x i64> @test_fcvtzu_i64_f32_ptrue_u(double %z0, <vscale x 4 x float> %x) {
773 ; CHECK-LABEL: test_fcvtzu_i64_f32_ptrue_u:
774 ; CHECK:       // %bb.0: // %entry
775 ; CHECK-NEXT:    ptrue p0.d
776 ; CHECK-NEXT:    fcvtzu z0.d, p0/m, z1.s
777 ; CHECK-NEXT:    ret
779 ; CHECK-2p2-LABEL: test_fcvtzu_i64_f32_ptrue_u:
780 ; CHECK-2p2:       // %bb.0: // %entry
781 ; CHECK-2p2-NEXT:    ptrue p0.d
782 ; CHECK-2p2-NEXT:    fcvtzu z0.d, p0/z, z1.s
783 ; CHECK-2p2-NEXT:    ret
784 entry:
785   %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)
786   %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.fcvtzu.i64f32(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 4 x float> %x)
787   ret <vscale x 2 x i64> %0
790 define <vscale x 2 x i64> @test_fcvtzu_i64_f32_ptrue(double %z0, <vscale x 2 x i64> %x, <vscale x 4 x float> %y) {
791 ; CHECK-LABEL: test_fcvtzu_i64_f32_ptrue:
792 ; CHECK:       // %bb.0: // %entry
793 ; CHECK-NEXT:    mov z0.d, z1.d
794 ; CHECK-NEXT:    ptrue p0.d
795 ; CHECK-NEXT:    fcvtzu z0.d, p0/m, z2.s
796 ; CHECK-NEXT:    ret
798 ; CHECK-2p2-LABEL: test_fcvtzu_i64_f32_ptrue:
799 ; CHECK-2p2:       // %bb.0: // %entry
800 ; CHECK-2p2-NEXT:    ptrue p0.d
801 ; CHECK-2p2-NEXT:    fcvtzu z0.d, p0/z, z2.s
802 ; CHECK-2p2-NEXT:    ret
803 entry:
804   %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)
805   %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.fcvtzu.i64f32(<vscale x 2 x i64> %x, <vscale x 2 x i1> %pg, <vscale x 4 x float> %y)
806   ret <vscale x 2 x i64> %0
809 define <vscale x 4 x i32> @test_fcvtzs_i32_f16_ptrue_u(double %z0, <vscale x 8 x half> %x) {
810 ; CHECK-LABEL: test_fcvtzs_i32_f16_ptrue_u:
811 ; CHECK:       // %bb.0: // %entry
812 ; CHECK-NEXT:    ptrue p0.s
813 ; CHECK-NEXT:    fcvtzs z0.s, p0/m, z1.h
814 ; CHECK-NEXT:    ret
816 ; CHECK-2p2-LABEL: test_fcvtzs_i32_f16_ptrue_u:
817 ; CHECK-2p2:       // %bb.0: // %entry
818 ; CHECK-2p2-NEXT:    ptrue p0.s
819 ; CHECK-2p2-NEXT:    fcvtzs z0.s, p0/z, z1.h
820 ; CHECK-2p2-NEXT:    ret
821 entry:
822   %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)
823   %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.fcvtzs.i32f16(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 8 x half> %x)
824   ret <vscale x 4 x i32> %0
827 define <vscale x 4 x i32> @test_fcvtzs_i32_f16_ptrue(double %z0, <vscale x 4 x i32> %x, <vscale x 8 x half> %y) {
828 ; CHECK-LABEL: test_fcvtzs_i32_f16_ptrue:
829 ; CHECK:       // %bb.0: // %entry
830 ; CHECK-NEXT:    mov z0.d, z1.d
831 ; CHECK-NEXT:    ptrue p0.s
832 ; CHECK-NEXT:    fcvtzs z0.s, p0/m, z2.h
833 ; CHECK-NEXT:    ret
835 ; CHECK-2p2-LABEL: test_fcvtzs_i32_f16_ptrue:
836 ; CHECK-2p2:       // %bb.0: // %entry
837 ; CHECK-2p2-NEXT:    ptrue p0.s
838 ; CHECK-2p2-NEXT:    fcvtzs z0.s, p0/z, z2.h
839 ; CHECK-2p2-NEXT:    ret
840 entry:
841   %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)
842   %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.fcvtzs.i32f16(<vscale x 4 x i32> %x, <vscale x 4 x i1> %pg, <vscale x 8 x half> %y)
843   ret <vscale x 4 x i32> %0
846 define <vscale x 4 x i32> @test_fcvtzu_i32_f16_ptrue_u(double %z0, <vscale x 8 x half> %x) {
847 ; CHECK-LABEL: test_fcvtzu_i32_f16_ptrue_u:
848 ; CHECK:       // %bb.0: // %entry
849 ; CHECK-NEXT:    ptrue p0.s
850 ; CHECK-NEXT:    fcvtzu z0.s, p0/m, z1.h
851 ; CHECK-NEXT:    ret
853 ; CHECK-2p2-LABEL: test_fcvtzu_i32_f16_ptrue_u:
854 ; CHECK-2p2:       // %bb.0: // %entry
855 ; CHECK-2p2-NEXT:    ptrue p0.s
856 ; CHECK-2p2-NEXT:    fcvtzu z0.s, p0/z, z1.h
857 ; CHECK-2p2-NEXT:    ret
858 entry:
859   %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)
860   %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.fcvtzu.i32f16(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 8 x half> %x)
861   ret <vscale x 4 x i32> %0
864 define <vscale x 4 x i32> @test_fcvtzu_i32_f16_ptrue(double %z0, <vscale x 4 x i32> %x, <vscale x 8 x half> %y) {
865 ; CHECK-LABEL: test_fcvtzu_i32_f16_ptrue:
866 ; CHECK:       // %bb.0: // %entry
867 ; CHECK-NEXT:    mov z0.d, z1.d
868 ; CHECK-NEXT:    ptrue p0.s
869 ; CHECK-NEXT:    fcvtzu z0.s, p0/m, z2.h
870 ; CHECK-NEXT:    ret
872 ; CHECK-2p2-LABEL: test_fcvtzu_i32_f16_ptrue:
873 ; CHECK-2p2:       // %bb.0: // %entry
874 ; CHECK-2p2-NEXT:    ptrue p0.s
875 ; CHECK-2p2-NEXT:    fcvtzu z0.s, p0/z, z2.h
876 ; CHECK-2p2-NEXT:    ret
877 entry:
878   %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)
879   %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.fcvtzu.i32f16(<vscale x 4 x i32> %x, <vscale x 4 x i1> %pg, <vscale x 8 x half> %y)
880   ret <vscale x 4 x i32> %0
883 define <vscale x 2 x i64> @test_fcvtzs_i64_f16_ptrue_u(double %z0, <vscale x 8 x half> %x) {
884 ; CHECK-LABEL: test_fcvtzs_i64_f16_ptrue_u:
885 ; CHECK:       // %bb.0: // %entry
886 ; CHECK-NEXT:    ptrue p0.d
887 ; CHECK-NEXT:    fcvtzs z0.d, p0/m, z1.h
888 ; CHECK-NEXT:    ret
890 ; CHECK-2p2-LABEL: test_fcvtzs_i64_f16_ptrue_u:
891 ; CHECK-2p2:       // %bb.0: // %entry
892 ; CHECK-2p2-NEXT:    ptrue p0.d
893 ; CHECK-2p2-NEXT:    fcvtzs z0.d, p0/z, z1.h
894 ; CHECK-2p2-NEXT:    ret
895 entry:
896   %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)
897   %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.fcvtzs.i64f16(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 8 x half> %x)
898   ret <vscale x 2 x i64> %0
901 define <vscale x 2 x i64> @test_fcvtzs_i64_f16_ptrue(double %z0, <vscale x 2 x i64> %x, <vscale x 8 x half> %y) {
902 ; CHECK-LABEL: test_fcvtzs_i64_f16_ptrue:
903 ; CHECK:       // %bb.0: // %entry
904 ; CHECK-NEXT:    mov z0.d, z1.d
905 ; CHECK-NEXT:    ptrue p0.d
906 ; CHECK-NEXT:    fcvtzs z0.d, p0/m, z2.h
907 ; CHECK-NEXT:    ret
909 ; CHECK-2p2-LABEL: test_fcvtzs_i64_f16_ptrue:
910 ; CHECK-2p2:       // %bb.0: // %entry
911 ; CHECK-2p2-NEXT:    ptrue p0.d
912 ; CHECK-2p2-NEXT:    fcvtzs z0.d, p0/z, z2.h
913 ; CHECK-2p2-NEXT:    ret
914 entry:
915   %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)
916   %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.fcvtzs.i64f16(<vscale x 2 x i64> %x, <vscale x 2 x i1> %pg, <vscale x 8 x half> %y)
917   ret <vscale x 2 x i64> %0
920 define <vscale x 2 x i64> @test_fcvtzu_i64_f16_ptrue_u(double %z0, <vscale x 8 x half> %x) {
921 ; CHECK-LABEL: test_fcvtzu_i64_f16_ptrue_u:
922 ; CHECK:       // %bb.0: // %entry
923 ; CHECK-NEXT:    ptrue p0.d
924 ; CHECK-NEXT:    fcvtzu z0.d, p0/m, z1.h
925 ; CHECK-NEXT:    ret
927 ; CHECK-2p2-LABEL: test_fcvtzu_i64_f16_ptrue_u:
928 ; CHECK-2p2:       // %bb.0: // %entry
929 ; CHECK-2p2-NEXT:    ptrue p0.d
930 ; CHECK-2p2-NEXT:    fcvtzu z0.d, p0/z, z1.h
931 ; CHECK-2p2-NEXT:    ret
932 entry:
933   %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)
934   %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.fcvtzu.i64f16(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 8 x half> %x)
935   ret <vscale x 2 x i64> %0
938 define <vscale x 2 x i64> @test_fcvtzu_i64_f16_ptrue(double %z0, <vscale x 2 x i64> %x, <vscale x 8 x half> %y) {
939 ; CHECK-LABEL: test_fcvtzu_i64_f16_ptrue:
940 ; CHECK:       // %bb.0: // %entry
941 ; CHECK-NEXT:    mov z0.d, z1.d
942 ; CHECK-NEXT:    ptrue p0.d
943 ; CHECK-NEXT:    fcvtzu z0.d, p0/m, z2.h
944 ; CHECK-NEXT:    ret
946 ; CHECK-2p2-LABEL: test_fcvtzu_i64_f16_ptrue:
947 ; CHECK-2p2:       // %bb.0: // %entry
948 ; CHECK-2p2-NEXT:    ptrue p0.d
949 ; CHECK-2p2-NEXT:    fcvtzu z0.d, p0/z, z2.h
950 ; CHECK-2p2-NEXT:    ret
951 entry:
952   %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)
953   %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.fcvtzu.i64f16(<vscale x 2 x i64> %x, <vscale x 2 x i1> %pg, <vscale x 8 x half> %y)
954   ret <vscale x 2 x i64> %0
957 define <vscale x 8 x i16> @test_fcvtzs_i16_f16_ptrue_u(double %z0, <vscale x 8 x half> %x) {
958 ; CHECK-LABEL: test_fcvtzs_i16_f16_ptrue_u:
959 ; CHECK:       // %bb.0: // %entry
960 ; CHECK-NEXT:    ptrue p0.h
961 ; CHECK-NEXT:    movprfx z0, z1
962 ; CHECK-NEXT:    fcvtzs z0.h, p0/m, z1.h
963 ; CHECK-NEXT:    ret
965 ; CHECK-2p2-LABEL: test_fcvtzs_i16_f16_ptrue_u:
966 ; CHECK-2p2:       // %bb.0: // %entry
967 ; CHECK-2p2-NEXT:    ptrue p0.h
968 ; CHECK-2p2-NEXT:    fcvtzs z0.h, p0/z, z1.h
969 ; CHECK-2p2-NEXT:    ret
970 entry:
971   %pg = call <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 31)
972   %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.fcvtzs.nxv8i16.nxv8f16(<vscale x 8 x i16> poison, <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)
973   ret <vscale x 8 x i16> %0
976 define <vscale x 8 x i16> @test_fcvtzs_i16_f16_ptrue(double %z0, <vscale x 8 x i16> %x, <vscale x 8 x half> %y) {
977 ; CHECK-LABEL: test_fcvtzs_i16_f16_ptrue:
978 ; CHECK:       // %bb.0: // %entry
979 ; CHECK-NEXT:    ptrue p0.h
980 ; CHECK-NEXT:    movprfx z0, z2
981 ; CHECK-NEXT:    fcvtzs z0.h, p0/m, z2.h
982 ; CHECK-NEXT:    ret
984 ; CHECK-2p2-LABEL: test_fcvtzs_i16_f16_ptrue:
985 ; CHECK-2p2:       // %bb.0: // %entry
986 ; CHECK-2p2-NEXT:    ptrue p0.h
987 ; CHECK-2p2-NEXT:    fcvtzs z0.h, p0/z, z2.h
988 ; CHECK-2p2-NEXT:    ret
989 entry:
990   %pg = call <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 31)
991   %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.fcvtzs.nxv8i16.nxv8f16(<vscale x 8 x i16> %x, <vscale x 8 x i1> %pg, <vscale x 8 x half> %y)
992   ret <vscale x 8 x i16> %0
995 define <vscale x 8 x i16> @test_fcvtzu_i16_f16_ptrue_u(double %z0, <vscale x 8 x half> %x) {
996 ; CHECK-LABEL: test_fcvtzu_i16_f16_ptrue_u:
997 ; CHECK:       // %bb.0: // %entry
998 ; CHECK-NEXT:    ptrue p0.h
999 ; CHECK-NEXT:    movprfx z0, z1
1000 ; CHECK-NEXT:    fcvtzu z0.h, p0/m, z1.h
1001 ; CHECK-NEXT:    ret
1003 ; CHECK-2p2-LABEL: test_fcvtzu_i16_f16_ptrue_u:
1004 ; CHECK-2p2:       // %bb.0: // %entry
1005 ; CHECK-2p2-NEXT:    ptrue p0.h
1006 ; CHECK-2p2-NEXT:    fcvtzu z0.h, p0/z, z1.h
1007 ; CHECK-2p2-NEXT:    ret
1008 entry:
1009   %pg = call <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 31)
1010   %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.fcvtzu.nxv8i16.nxv8f16(<vscale x 8 x i16> poison, <vscale x 8 x i1> %pg, <vscale x 8 x half> %x)
1011   ret <vscale x 8 x i16> %0
1014 define <vscale x 8 x i16> @test_fcvtzu_i16_f16_ptrue(double %z0, <vscale x 8 x i16> %x, <vscale x 8 x half> %y) {
1015 ; CHECK-LABEL: test_fcvtzu_i16_f16_ptrue:
1016 ; CHECK:       // %bb.0: // %entry
1017 ; CHECK-NEXT:    ptrue p0.h
1018 ; CHECK-NEXT:    movprfx z0, z2
1019 ; CHECK-NEXT:    fcvtzu z0.h, p0/m, z2.h
1020 ; CHECK-NEXT:    ret
1022 ; CHECK-2p2-LABEL: test_fcvtzu_i16_f16_ptrue:
1023 ; CHECK-2p2:       // %bb.0: // %entry
1024 ; CHECK-2p2-NEXT:    ptrue p0.h
1025 ; CHECK-2p2-NEXT:    fcvtzu z0.h, p0/z, z2.h
1026 ; CHECK-2p2-NEXT:    ret
1027 entry:
1028   %pg = call <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 31)
1029   %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.fcvtzu.nxv8i16.nxv8f16(<vscale x 8 x i16> %x, <vscale x 8 x i1> %pg, <vscale x 8 x half> %y)
1030   ret <vscale x 8 x i16> %0
1033 define <vscale x 4 x i32> @test_fcvtzs_i32_f32_ptrue_u(double %z0, <vscale x 4 x float> %x) {
1034 ; CHECK-LABEL: test_fcvtzs_i32_f32_ptrue_u:
1035 ; CHECK:       // %bb.0: // %entry
1036 ; CHECK-NEXT:    ptrue p0.s
1037 ; CHECK-NEXT:    movprfx z0, z1
1038 ; CHECK-NEXT:    fcvtzs z0.s, p0/m, z1.s
1039 ; CHECK-NEXT:    ret
1041 ; CHECK-2p2-LABEL: test_fcvtzs_i32_f32_ptrue_u:
1042 ; CHECK-2p2:       // %bb.0: // %entry
1043 ; CHECK-2p2-NEXT:    ptrue p0.s
1044 ; CHECK-2p2-NEXT:    fcvtzs z0.s, p0/z, z1.s
1045 ; CHECK-2p2-NEXT:    ret
1046 entry:
1047   %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)
1048   %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.fcvtzs.nxv4i32.nxv4f32(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)
1049   ret <vscale x 4 x i32> %0
1052 define <vscale x 4 x i32> @test_fcvtzs_i32_f32_ptrue(double %z0, <vscale x 4 x i32> %x, <vscale x 4 x float> %y) {
1053 ; CHECK-LABEL: test_fcvtzs_i32_f32_ptrue:
1054 ; CHECK:       // %bb.0: // %entry
1055 ; CHECK-NEXT:    ptrue p0.s
1056 ; CHECK-NEXT:    movprfx z0, z2
1057 ; CHECK-NEXT:    fcvtzs z0.s, p0/m, z2.s
1058 ; CHECK-NEXT:    ret
1060 ; CHECK-2p2-LABEL: test_fcvtzs_i32_f32_ptrue:
1061 ; CHECK-2p2:       // %bb.0: // %entry
1062 ; CHECK-2p2-NEXT:    ptrue p0.s
1063 ; CHECK-2p2-NEXT:    fcvtzs z0.s, p0/z, z2.s
1064 ; CHECK-2p2-NEXT:    ret
1065 entry:
1066   %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)
1067   %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.fcvtzs.nxv4i32.nxv4f32(<vscale x 4 x i32> %x, <vscale x 4 x i1> %pg, <vscale x 4 x float> %y)
1068   ret <vscale x 4 x i32> %0
1071 define <vscale x 4 x i32> @test_fcvtzu_i32_f32_ptrue_u(double %z0, <vscale x 4 x float> %x) {
1072 ; CHECK-LABEL: test_fcvtzu_i32_f32_ptrue_u:
1073 ; CHECK:       // %bb.0: // %entry
1074 ; CHECK-NEXT:    ptrue p0.s
1075 ; CHECK-NEXT:    movprfx z0, z1
1076 ; CHECK-NEXT:    fcvtzu z0.s, p0/m, z1.s
1077 ; CHECK-NEXT:    ret
1079 ; CHECK-2p2-LABEL: test_fcvtzu_i32_f32_ptrue_u:
1080 ; CHECK-2p2:       // %bb.0: // %entry
1081 ; CHECK-2p2-NEXT:    ptrue p0.s
1082 ; CHECK-2p2-NEXT:    fcvtzu z0.s, p0/z, z1.s
1083 ; CHECK-2p2-NEXT:    ret
1084 entry:
1085   %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)
1086   %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.fcvtzu.nxv4i32.nxv4f32(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 4 x float> %x)
1087   ret <vscale x 4 x i32> %0
1090 define <vscale x 4 x i32> @test_fcvtzu_i32_f32_ptrue(double %z0, <vscale x 4 x i32> %x, <vscale x 4 x float> %y) {
1091 ; CHECK-LABEL: test_fcvtzu_i32_f32_ptrue:
1092 ; CHECK:       // %bb.0: // %entry
1093 ; CHECK-NEXT:    ptrue p0.s
1094 ; CHECK-NEXT:    movprfx z0, z2
1095 ; CHECK-NEXT:    fcvtzu z0.s, p0/m, z2.s
1096 ; CHECK-NEXT:    ret
1098 ; CHECK-2p2-LABEL: test_fcvtzu_i32_f32_ptrue:
1099 ; CHECK-2p2:       // %bb.0: // %entry
1100 ; CHECK-2p2-NEXT:    ptrue p0.s
1101 ; CHECK-2p2-NEXT:    fcvtzu z0.s, p0/z, z2.s
1102 ; CHECK-2p2-NEXT:    ret
1103 entry:
1104   %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)
1105   %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.fcvtzu.nxv4i32.nxv4f32(<vscale x 4 x i32> %x, <vscale x 4 x i1> %pg, <vscale x 4 x float> %y)
1106   ret <vscale x 4 x i32> %0
1109 define <vscale x 2 x i64> @test_fcvtzs_i64_f64_ptrue_u(double %z0, <vscale x 2 x double> %x) {
1110 ; CHECK-LABEL: test_fcvtzs_i64_f64_ptrue_u:
1111 ; CHECK:       // %bb.0: // %entry
1112 ; CHECK-NEXT:    ptrue p0.d
1113 ; CHECK-NEXT:    movprfx z0, z1
1114 ; CHECK-NEXT:    fcvtzs z0.d, p0/m, z1.d
1115 ; CHECK-NEXT:    ret
1117 ; CHECK-2p2-LABEL: test_fcvtzs_i64_f64_ptrue_u:
1118 ; CHECK-2p2:       // %bb.0: // %entry
1119 ; CHECK-2p2-NEXT:    ptrue p0.d
1120 ; CHECK-2p2-NEXT:    fcvtzs z0.d, p0/z, z1.d
1121 ; CHECK-2p2-NEXT:    ret
1122 entry:
1123   %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)
1124   %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.fcvtzs.nxv2i64.nxv2f64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)
1125   ret <vscale x 2 x i64> %0
1128 define <vscale x 2 x i64> @test_fcvtzs_i64_f64_ptrue(double %z0, <vscale x 2 x i64> %x, <vscale x 2 x double> %y) {
1129 ; CHECK-LABEL: test_fcvtzs_i64_f64_ptrue:
1130 ; CHECK:       // %bb.0: // %entry
1131 ; CHECK-NEXT:    ptrue p0.d
1132 ; CHECK-NEXT:    movprfx z0, z2
1133 ; CHECK-NEXT:    fcvtzs z0.d, p0/m, z2.d
1134 ; CHECK-NEXT:    ret
1136 ; CHECK-2p2-LABEL: test_fcvtzs_i64_f64_ptrue:
1137 ; CHECK-2p2:       // %bb.0: // %entry
1138 ; CHECK-2p2-NEXT:    ptrue p0.d
1139 ; CHECK-2p2-NEXT:    fcvtzs z0.d, p0/z, z2.d
1140 ; CHECK-2p2-NEXT:    ret
1141 entry:
1142   %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)
1143   %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.fcvtzs.nxv2i64.nxv2f64(<vscale x 2 x i64> %x, <vscale x 2 x i1> %pg, <vscale x 2 x double> %y)
1144   ret <vscale x 2 x i64> %0
1147 define <vscale x 2 x i64> @test_fcvtzu_i64_f64_ptrue_u(double %z0, <vscale x 2 x double> %x) {
1148 ; CHECK-LABEL: test_fcvtzu_i64_f64_ptrue_u:
1149 ; CHECK:       // %bb.0: // %entry
1150 ; CHECK-NEXT:    ptrue p0.d
1151 ; CHECK-NEXT:    movprfx z0, z1
1152 ; CHECK-NEXT:    fcvtzu z0.d, p0/m, z1.d
1153 ; CHECK-NEXT:    ret
1155 ; CHECK-2p2-LABEL: test_fcvtzu_i64_f64_ptrue_u:
1156 ; CHECK-2p2:       // %bb.0: // %entry
1157 ; CHECK-2p2-NEXT:    ptrue p0.d
1158 ; CHECK-2p2-NEXT:    fcvtzu z0.d, p0/z, z1.d
1159 ; CHECK-2p2-NEXT:    ret
1160 entry:
1161   %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)
1162   %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.fcvtzu.nxv2i64.nxv2f64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x double> %x)
1163   ret <vscale x 2 x i64> %0
1166 define <vscale x 2 x i64> @test_fcvtzu_i64_f64_ptrue(double %z0, <vscale x 2 x i64> %x, <vscale x 2 x double> %y) {
1167 ; CHECK-LABEL: test_fcvtzu_i64_f64_ptrue:
1168 ; CHECK:       // %bb.0: // %entry
1169 ; CHECK-NEXT:    ptrue p0.d
1170 ; CHECK-NEXT:    movprfx z0, z2
1171 ; CHECK-NEXT:    fcvtzu z0.d, p0/m, z2.d
1172 ; CHECK-NEXT:    ret
1174 ; CHECK-2p2-LABEL: test_fcvtzu_i64_f64_ptrue:
1175 ; CHECK-2p2:       // %bb.0: // %entry
1176 ; CHECK-2p2-NEXT:    ptrue p0.d
1177 ; CHECK-2p2-NEXT:    fcvtzu z0.d, p0/z, z2.d
1178 ; CHECK-2p2-NEXT:    ret
1179 entry:
1180   %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31)
1181   %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.fcvtzu.nxv2i64.nxv2f64(<vscale x 2 x i64> %x, <vscale x 2 x i1> %pg, <vscale x 2 x double> %y)
1182   ret <vscale x 2 x i64> %0