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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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