Revert " [LoongArch][ISel] Check the number of sign bits in `PatGprGpr_32` (#107432)"
[llvm-project.git] / llvm / test / CodeGen / AArch64 / sve-bitcast.ll
blob95f43ba5126323175d02588ac2d729e81523fb77
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=aarch64-linux-gnu < %s | FileCheck %s
3 ; RUN: llc -mtriple=aarch64_be < %s | FileCheck %s --check-prefix=CHECK_BE
6 ; bitcast to nxv16i8
9 define <vscale x 16 x i8> @bitcast_nxv8i16_to_nxv16i8(<vscale x 8 x i16> %v) #0 {
10 ; CHECK-LABEL: bitcast_nxv8i16_to_nxv16i8:
11 ; CHECK:       // %bb.0:
12 ; CHECK-NEXT:    ret
14 ; CHECK_BE-LABEL: bitcast_nxv8i16_to_nxv16i8:
15 ; CHECK_BE:       // %bb.0:
16 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
17 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
18 ; CHECK_BE-NEXT:    ptrue p0.h
19 ; CHECK_BE-NEXT:    ptrue p1.b
20 ; CHECK_BE-NEXT:    st1h { z0.h }, p0, [sp]
21 ; CHECK_BE-NEXT:    ld1b { z0.b }, p1/z, [sp]
22 ; CHECK_BE-NEXT:    addvl sp, sp, #1
23 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
24 ; CHECK_BE-NEXT:    ret
25   %bc = bitcast <vscale x 8 x i16> %v to <vscale x 16 x i8>
26   ret <vscale x 16 x i8> %bc
29 define <vscale x 16 x i8> @bitcast_nxv4i32_to_nxv16i8(<vscale x 4 x i32> %v) #0 {
30 ; CHECK-LABEL: bitcast_nxv4i32_to_nxv16i8:
31 ; CHECK:       // %bb.0:
32 ; CHECK-NEXT:    ret
34 ; CHECK_BE-LABEL: bitcast_nxv4i32_to_nxv16i8:
35 ; CHECK_BE:       // %bb.0:
36 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
37 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
38 ; CHECK_BE-NEXT:    ptrue p0.s
39 ; CHECK_BE-NEXT:    ptrue p1.b
40 ; CHECK_BE-NEXT:    st1w { z0.s }, p0, [sp]
41 ; CHECK_BE-NEXT:    ld1b { z0.b }, p1/z, [sp]
42 ; CHECK_BE-NEXT:    addvl sp, sp, #1
43 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
44 ; CHECK_BE-NEXT:    ret
45   %bc = bitcast <vscale x 4 x i32> %v to <vscale x 16 x i8>
46   ret <vscale x 16 x i8> %bc
49 define <vscale x 16 x i8> @bitcast_nxv2i64_to_nxv16i8(<vscale x 2 x i64> %v) #0 {
50 ; CHECK-LABEL: bitcast_nxv2i64_to_nxv16i8:
51 ; CHECK:       // %bb.0:
52 ; CHECK-NEXT:    ret
54 ; CHECK_BE-LABEL: bitcast_nxv2i64_to_nxv16i8:
55 ; CHECK_BE:       // %bb.0:
56 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
57 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
58 ; CHECK_BE-NEXT:    ptrue p0.d
59 ; CHECK_BE-NEXT:    ptrue p1.b
60 ; CHECK_BE-NEXT:    st1d { z0.d }, p0, [sp]
61 ; CHECK_BE-NEXT:    ld1b { z0.b }, p1/z, [sp]
62 ; CHECK_BE-NEXT:    addvl sp, sp, #1
63 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
64 ; CHECK_BE-NEXT:    ret
65   %bc = bitcast <vscale x 2 x i64> %v to <vscale x 16 x i8>
66   ret <vscale x 16 x i8> %bc
69 define <vscale x 16 x i8> @bitcast_nxv8f16_to_nxv16i8(<vscale x 8 x half> %v) #0 {
70 ; CHECK-LABEL: bitcast_nxv8f16_to_nxv16i8:
71 ; CHECK:       // %bb.0:
72 ; CHECK-NEXT:    ret
74 ; CHECK_BE-LABEL: bitcast_nxv8f16_to_nxv16i8:
75 ; CHECK_BE:       // %bb.0:
76 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
77 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
78 ; CHECK_BE-NEXT:    ptrue p0.h
79 ; CHECK_BE-NEXT:    ptrue p1.b
80 ; CHECK_BE-NEXT:    st1h { z0.h }, p0, [sp]
81 ; CHECK_BE-NEXT:    ld1b { z0.b }, p1/z, [sp]
82 ; CHECK_BE-NEXT:    addvl sp, sp, #1
83 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
84 ; CHECK_BE-NEXT:    ret
85   %bc = bitcast <vscale x 8 x half> %v to <vscale x 16 x i8>
86   ret <vscale x 16 x i8> %bc
89 define <vscale x 16 x i8> @bitcast_nxv4f32_to_nxv16i8(<vscale x 4 x float> %v) #0 {
90 ; CHECK-LABEL: bitcast_nxv4f32_to_nxv16i8:
91 ; CHECK:       // %bb.0:
92 ; CHECK-NEXT:    ret
94 ; CHECK_BE-LABEL: bitcast_nxv4f32_to_nxv16i8:
95 ; CHECK_BE:       // %bb.0:
96 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
97 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
98 ; CHECK_BE-NEXT:    ptrue p0.s
99 ; CHECK_BE-NEXT:    ptrue p1.b
100 ; CHECK_BE-NEXT:    st1w { z0.s }, p0, [sp]
101 ; CHECK_BE-NEXT:    ld1b { z0.b }, p1/z, [sp]
102 ; CHECK_BE-NEXT:    addvl sp, sp, #1
103 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
104 ; CHECK_BE-NEXT:    ret
105   %bc = bitcast <vscale x 4 x float> %v to <vscale x 16 x i8>
106   ret <vscale x 16 x i8> %bc
109 define <vscale x 16 x i8> @bitcast_nxv2f64_to_nxv16i8(<vscale x 2 x double> %v) #0 {
110 ; CHECK-LABEL: bitcast_nxv2f64_to_nxv16i8:
111 ; CHECK:       // %bb.0:
112 ; CHECK-NEXT:    ret
114 ; CHECK_BE-LABEL: bitcast_nxv2f64_to_nxv16i8:
115 ; CHECK_BE:       // %bb.0:
116 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
117 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
118 ; CHECK_BE-NEXT:    ptrue p0.d
119 ; CHECK_BE-NEXT:    ptrue p1.b
120 ; CHECK_BE-NEXT:    st1d { z0.d }, p0, [sp]
121 ; CHECK_BE-NEXT:    ld1b { z0.b }, p1/z, [sp]
122 ; CHECK_BE-NEXT:    addvl sp, sp, #1
123 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
124 ; CHECK_BE-NEXT:    ret
125   %bc = bitcast <vscale x 2 x double> %v to <vscale x 16 x i8>
126   ret <vscale x 16 x i8> %bc
129 define <vscale x 16 x i8> @bitcast_nxv8bf16_to_nxv16i8(<vscale x 8 x bfloat> %v) #0 {
130 ; CHECK-LABEL: bitcast_nxv8bf16_to_nxv16i8:
131 ; CHECK:       // %bb.0:
132 ; CHECK-NEXT:    ret
134 ; CHECK_BE-LABEL: bitcast_nxv8bf16_to_nxv16i8:
135 ; CHECK_BE:       // %bb.0:
136 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
137 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
138 ; CHECK_BE-NEXT:    ptrue p0.h
139 ; CHECK_BE-NEXT:    ptrue p1.b
140 ; CHECK_BE-NEXT:    st1h { z0.h }, p0, [sp]
141 ; CHECK_BE-NEXT:    ld1b { z0.b }, p1/z, [sp]
142 ; CHECK_BE-NEXT:    addvl sp, sp, #1
143 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
144 ; CHECK_BE-NEXT:    ret
145   %bc = bitcast <vscale x 8 x bfloat> %v to <vscale x 16 x i8>
146   ret <vscale x 16 x i8> %bc
150 ; bitcast to nxv8i16
153 define <vscale x 8 x i16> @bitcast_nxv16i8_to_nxv8i16(<vscale x 16 x i8> %v) #0 {
154 ; CHECK-LABEL: bitcast_nxv16i8_to_nxv8i16:
155 ; CHECK:       // %bb.0:
156 ; CHECK-NEXT:    ret
158 ; CHECK_BE-LABEL: bitcast_nxv16i8_to_nxv8i16:
159 ; CHECK_BE:       // %bb.0:
160 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
161 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
162 ; CHECK_BE-NEXT:    ptrue p0.b
163 ; CHECK_BE-NEXT:    ptrue p1.h
164 ; CHECK_BE-NEXT:    st1b { z0.b }, p0, [sp]
165 ; CHECK_BE-NEXT:    ld1h { z0.h }, p1/z, [sp]
166 ; CHECK_BE-NEXT:    addvl sp, sp, #1
167 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
168 ; CHECK_BE-NEXT:    ret
169   %bc = bitcast <vscale x 16 x i8> %v to <vscale x 8 x i16>
170   ret <vscale x 8 x i16> %bc
173 define <vscale x 8 x i16> @bitcast_nxv4i32_to_nxv8i16(<vscale x 4 x i32> %v) #0 {
174 ; CHECK-LABEL: bitcast_nxv4i32_to_nxv8i16:
175 ; CHECK:       // %bb.0:
176 ; CHECK-NEXT:    ret
178 ; CHECK_BE-LABEL: bitcast_nxv4i32_to_nxv8i16:
179 ; CHECK_BE:       // %bb.0:
180 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
181 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
182 ; CHECK_BE-NEXT:    ptrue p0.s
183 ; CHECK_BE-NEXT:    ptrue p1.h
184 ; CHECK_BE-NEXT:    st1w { z0.s }, p0, [sp]
185 ; CHECK_BE-NEXT:    ld1h { z0.h }, p1/z, [sp]
186 ; CHECK_BE-NEXT:    addvl sp, sp, #1
187 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
188 ; CHECK_BE-NEXT:    ret
189   %bc = bitcast <vscale x 4 x i32> %v to <vscale x 8 x i16>
190   ret <vscale x 8 x i16> %bc
193 define <vscale x 8 x i16> @bitcast_nxv2i64_to_nxv8i16(<vscale x 2 x i64> %v) #0 {
194 ; CHECK-LABEL: bitcast_nxv2i64_to_nxv8i16:
195 ; CHECK:       // %bb.0:
196 ; CHECK-NEXT:    ret
198 ; CHECK_BE-LABEL: bitcast_nxv2i64_to_nxv8i16:
199 ; CHECK_BE:       // %bb.0:
200 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
201 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
202 ; CHECK_BE-NEXT:    ptrue p0.d
203 ; CHECK_BE-NEXT:    ptrue p1.h
204 ; CHECK_BE-NEXT:    st1d { z0.d }, p0, [sp]
205 ; CHECK_BE-NEXT:    ld1h { z0.h }, p1/z, [sp]
206 ; CHECK_BE-NEXT:    addvl sp, sp, #1
207 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
208 ; CHECK_BE-NEXT:    ret
209   %bc = bitcast <vscale x 2 x i64> %v to <vscale x 8 x i16>
210   ret <vscale x 8 x i16> %bc
213 define <vscale x 8 x i16> @bitcast_nxv8f16_to_nxv8i16(<vscale x 8 x half> %v) #0 {
214 ; CHECK-LABEL: bitcast_nxv8f16_to_nxv8i16:
215 ; CHECK:       // %bb.0:
216 ; CHECK-NEXT:    ret
218 ; CHECK_BE-LABEL: bitcast_nxv8f16_to_nxv8i16:
219 ; CHECK_BE:       // %bb.0:
220 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
221 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
222 ; CHECK_BE-NEXT:    ptrue p0.h
223 ; CHECK_BE-NEXT:    st1h { z0.h }, p0, [sp]
224 ; CHECK_BE-NEXT:    ld1h { z0.h }, p0/z, [sp]
225 ; CHECK_BE-NEXT:    addvl sp, sp, #1
226 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
227 ; CHECK_BE-NEXT:    ret
228   %bc = bitcast <vscale x 8 x half> %v to <vscale x 8 x i16>
229   ret <vscale x 8 x i16> %bc
232 define <vscale x 8 x i16> @bitcast_nxv4f32_to_nxv8i16(<vscale x 4 x float> %v) #0 {
233 ; CHECK-LABEL: bitcast_nxv4f32_to_nxv8i16:
234 ; CHECK:       // %bb.0:
235 ; CHECK-NEXT:    ret
237 ; CHECK_BE-LABEL: bitcast_nxv4f32_to_nxv8i16:
238 ; CHECK_BE:       // %bb.0:
239 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
240 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
241 ; CHECK_BE-NEXT:    ptrue p0.s
242 ; CHECK_BE-NEXT:    ptrue p1.h
243 ; CHECK_BE-NEXT:    st1w { z0.s }, p0, [sp]
244 ; CHECK_BE-NEXT:    ld1h { z0.h }, p1/z, [sp]
245 ; CHECK_BE-NEXT:    addvl sp, sp, #1
246 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
247 ; CHECK_BE-NEXT:    ret
248   %bc = bitcast <vscale x 4 x float> %v to <vscale x 8 x i16>
249   ret <vscale x 8 x i16> %bc
252 define <vscale x 8 x i16> @bitcast_nxv2f64_to_nxv8i16(<vscale x 2 x double> %v) #0 {
253 ; CHECK-LABEL: bitcast_nxv2f64_to_nxv8i16:
254 ; CHECK:       // %bb.0:
255 ; CHECK-NEXT:    ret
257 ; CHECK_BE-LABEL: bitcast_nxv2f64_to_nxv8i16:
258 ; CHECK_BE:       // %bb.0:
259 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
260 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
261 ; CHECK_BE-NEXT:    ptrue p0.d
262 ; CHECK_BE-NEXT:    ptrue p1.h
263 ; CHECK_BE-NEXT:    st1d { z0.d }, p0, [sp]
264 ; CHECK_BE-NEXT:    ld1h { z0.h }, p1/z, [sp]
265 ; CHECK_BE-NEXT:    addvl sp, sp, #1
266 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
267 ; CHECK_BE-NEXT:    ret
268   %bc = bitcast <vscale x 2 x double> %v to <vscale x 8 x i16>
269   ret <vscale x 8 x i16> %bc
272 define <vscale x 8 x i16> @bitcast_nxv8bf16_to_nxv8i16(<vscale x 8 x bfloat> %v) #0 {
273 ; CHECK-LABEL: bitcast_nxv8bf16_to_nxv8i16:
274 ; CHECK:       // %bb.0:
275 ; CHECK-NEXT:    ret
277 ; CHECK_BE-LABEL: bitcast_nxv8bf16_to_nxv8i16:
278 ; CHECK_BE:       // %bb.0:
279 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
280 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
281 ; CHECK_BE-NEXT:    ptrue p0.h
282 ; CHECK_BE-NEXT:    st1h { z0.h }, p0, [sp]
283 ; CHECK_BE-NEXT:    ld1h { z0.h }, p0/z, [sp]
284 ; CHECK_BE-NEXT:    addvl sp, sp, #1
285 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
286 ; CHECK_BE-NEXT:    ret
287   %bc = bitcast <vscale x 8 x bfloat> %v to <vscale x 8 x i16>
288   ret <vscale x 8 x i16> %bc
292 ; bitcast to nxv4i32
295 define <vscale x 4 x i32> @bitcast_nxv16i8_to_nxv4i32(<vscale x 16 x i8> %v) #0 {
296 ; CHECK-LABEL: bitcast_nxv16i8_to_nxv4i32:
297 ; CHECK:       // %bb.0:
298 ; CHECK-NEXT:    ret
300 ; CHECK_BE-LABEL: bitcast_nxv16i8_to_nxv4i32:
301 ; CHECK_BE:       // %bb.0:
302 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
303 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
304 ; CHECK_BE-NEXT:    ptrue p0.b
305 ; CHECK_BE-NEXT:    ptrue p1.s
306 ; CHECK_BE-NEXT:    st1b { z0.b }, p0, [sp]
307 ; CHECK_BE-NEXT:    ld1w { z0.s }, p1/z, [sp]
308 ; CHECK_BE-NEXT:    addvl sp, sp, #1
309 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
310 ; CHECK_BE-NEXT:    ret
311   %bc = bitcast <vscale x 16 x i8> %v to <vscale x 4 x i32>
312   ret <vscale x 4 x i32> %bc
315 define <vscale x 4 x i32> @bitcast_nxv8i16_to_nxv4i32(<vscale x 8 x i16> %v) #0 {
316 ; CHECK-LABEL: bitcast_nxv8i16_to_nxv4i32:
317 ; CHECK:       // %bb.0:
318 ; CHECK-NEXT:    ret
320 ; CHECK_BE-LABEL: bitcast_nxv8i16_to_nxv4i32:
321 ; CHECK_BE:       // %bb.0:
322 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
323 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
324 ; CHECK_BE-NEXT:    ptrue p0.h
325 ; CHECK_BE-NEXT:    ptrue p1.s
326 ; CHECK_BE-NEXT:    st1h { z0.h }, p0, [sp]
327 ; CHECK_BE-NEXT:    ld1w { z0.s }, p1/z, [sp]
328 ; CHECK_BE-NEXT:    addvl sp, sp, #1
329 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
330 ; CHECK_BE-NEXT:    ret
331   %bc = bitcast <vscale x 8 x i16> %v to <vscale x 4 x i32>
332   ret <vscale x 4 x i32> %bc
335 define <vscale x 4 x i32> @bitcast_nxv2i64_to_nxv4i32(<vscale x 2 x i64> %v) #0 {
336 ; CHECK-LABEL: bitcast_nxv2i64_to_nxv4i32:
337 ; CHECK:       // %bb.0:
338 ; CHECK-NEXT:    ret
340 ; CHECK_BE-LABEL: bitcast_nxv2i64_to_nxv4i32:
341 ; CHECK_BE:       // %bb.0:
342 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
343 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
344 ; CHECK_BE-NEXT:    ptrue p0.d
345 ; CHECK_BE-NEXT:    ptrue p1.s
346 ; CHECK_BE-NEXT:    st1d { z0.d }, p0, [sp]
347 ; CHECK_BE-NEXT:    ld1w { z0.s }, p1/z, [sp]
348 ; CHECK_BE-NEXT:    addvl sp, sp, #1
349 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
350 ; CHECK_BE-NEXT:    ret
351   %bc = bitcast <vscale x 2 x i64> %v to <vscale x 4 x i32>
352   ret <vscale x 4 x i32> %bc
355 define <vscale x 4 x i32> @bitcast_nxv8f16_to_nxv4i32(<vscale x 8 x half> %v) #0 {
356 ; CHECK-LABEL: bitcast_nxv8f16_to_nxv4i32:
357 ; CHECK:       // %bb.0:
358 ; CHECK-NEXT:    ret
360 ; CHECK_BE-LABEL: bitcast_nxv8f16_to_nxv4i32:
361 ; CHECK_BE:       // %bb.0:
362 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
363 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
364 ; CHECK_BE-NEXT:    ptrue p0.h
365 ; CHECK_BE-NEXT:    ptrue p1.s
366 ; CHECK_BE-NEXT:    st1h { z0.h }, p0, [sp]
367 ; CHECK_BE-NEXT:    ld1w { z0.s }, p1/z, [sp]
368 ; CHECK_BE-NEXT:    addvl sp, sp, #1
369 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
370 ; CHECK_BE-NEXT:    ret
371   %bc = bitcast <vscale x 8 x half> %v to <vscale x 4 x i32>
372   ret <vscale x 4 x i32> %bc
375 define <vscale x 4 x i32> @bitcast_nxv4f32_to_nxv4i32(<vscale x 4 x float> %v) #0 {
376 ; CHECK-LABEL: bitcast_nxv4f32_to_nxv4i32:
377 ; CHECK:       // %bb.0:
378 ; CHECK-NEXT:    ret
380 ; CHECK_BE-LABEL: bitcast_nxv4f32_to_nxv4i32:
381 ; CHECK_BE:       // %bb.0:
382 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
383 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
384 ; CHECK_BE-NEXT:    ptrue p0.s
385 ; CHECK_BE-NEXT:    st1w { z0.s }, p0, [sp]
386 ; CHECK_BE-NEXT:    ld1w { z0.s }, p0/z, [sp]
387 ; CHECK_BE-NEXT:    addvl sp, sp, #1
388 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
389 ; CHECK_BE-NEXT:    ret
390   %bc = bitcast <vscale x 4 x float> %v to <vscale x 4 x i32>
391   ret <vscale x 4 x i32> %bc
394 define <vscale x 4 x i32> @bitcast_nxv2f64_to_nxv4i32(<vscale x 2 x double> %v) #0 {
395 ; CHECK-LABEL: bitcast_nxv2f64_to_nxv4i32:
396 ; CHECK:       // %bb.0:
397 ; CHECK-NEXT:    ret
399 ; CHECK_BE-LABEL: bitcast_nxv2f64_to_nxv4i32:
400 ; CHECK_BE:       // %bb.0:
401 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
402 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
403 ; CHECK_BE-NEXT:    ptrue p0.d
404 ; CHECK_BE-NEXT:    ptrue p1.s
405 ; CHECK_BE-NEXT:    st1d { z0.d }, p0, [sp]
406 ; CHECK_BE-NEXT:    ld1w { z0.s }, p1/z, [sp]
407 ; CHECK_BE-NEXT:    addvl sp, sp, #1
408 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
409 ; CHECK_BE-NEXT:    ret
410   %bc = bitcast <vscale x 2 x double> %v to <vscale x 4 x i32>
411   ret <vscale x 4 x i32> %bc
414 define <vscale x 4 x i32> @bitcast_nxv8bf16_to_nxv4i32(<vscale x 8 x bfloat> %v) #0 {
415 ; CHECK-LABEL: bitcast_nxv8bf16_to_nxv4i32:
416 ; CHECK:       // %bb.0:
417 ; CHECK-NEXT:    ret
419 ; CHECK_BE-LABEL: bitcast_nxv8bf16_to_nxv4i32:
420 ; CHECK_BE:       // %bb.0:
421 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
422 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
423 ; CHECK_BE-NEXT:    ptrue p0.h
424 ; CHECK_BE-NEXT:    ptrue p1.s
425 ; CHECK_BE-NEXT:    st1h { z0.h }, p0, [sp]
426 ; CHECK_BE-NEXT:    ld1w { z0.s }, p1/z, [sp]
427 ; CHECK_BE-NEXT:    addvl sp, sp, #1
428 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
429 ; CHECK_BE-NEXT:    ret
430   %bc = bitcast <vscale x 8 x bfloat> %v to <vscale x 4 x i32>
431   ret <vscale x 4 x i32> %bc
435 ; bitcast to nxv2i64
438 define <vscale x 2 x i64> @bitcast_nxv16i8_to_nxv2i64(<vscale x 16 x i8> %v) #0 {
439 ; CHECK-LABEL: bitcast_nxv16i8_to_nxv2i64:
440 ; CHECK:       // %bb.0:
441 ; CHECK-NEXT:    ret
443 ; CHECK_BE-LABEL: bitcast_nxv16i8_to_nxv2i64:
444 ; CHECK_BE:       // %bb.0:
445 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
446 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
447 ; CHECK_BE-NEXT:    ptrue p0.b
448 ; CHECK_BE-NEXT:    ptrue p1.d
449 ; CHECK_BE-NEXT:    st1b { z0.b }, p0, [sp]
450 ; CHECK_BE-NEXT:    ld1d { z0.d }, p1/z, [sp]
451 ; CHECK_BE-NEXT:    addvl sp, sp, #1
452 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
453 ; CHECK_BE-NEXT:    ret
454   %bc = bitcast <vscale x 16 x i8> %v to <vscale x 2 x i64>
455   ret <vscale x 2 x i64> %bc
458 define <vscale x 2 x i64> @bitcast_nxv8i16_to_nxv2i64(<vscale x 8 x i16> %v) #0 {
459 ; CHECK-LABEL: bitcast_nxv8i16_to_nxv2i64:
460 ; CHECK:       // %bb.0:
461 ; CHECK-NEXT:    ret
463 ; CHECK_BE-LABEL: bitcast_nxv8i16_to_nxv2i64:
464 ; CHECK_BE:       // %bb.0:
465 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
466 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
467 ; CHECK_BE-NEXT:    ptrue p0.h
468 ; CHECK_BE-NEXT:    ptrue p1.d
469 ; CHECK_BE-NEXT:    st1h { z0.h }, p0, [sp]
470 ; CHECK_BE-NEXT:    ld1d { z0.d }, p1/z, [sp]
471 ; CHECK_BE-NEXT:    addvl sp, sp, #1
472 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
473 ; CHECK_BE-NEXT:    ret
474   %bc = bitcast <vscale x 8 x i16> %v to <vscale x 2 x i64>
475   ret <vscale x 2 x i64> %bc
478 define <vscale x 2 x i64> @bitcast_nxv4i32_to_nxv2i64(<vscale x 4 x i32> %v) #0 {
479 ; CHECK-LABEL: bitcast_nxv4i32_to_nxv2i64:
480 ; CHECK:       // %bb.0:
481 ; CHECK-NEXT:    ret
483 ; CHECK_BE-LABEL: bitcast_nxv4i32_to_nxv2i64:
484 ; CHECK_BE:       // %bb.0:
485 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
486 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
487 ; CHECK_BE-NEXT:    ptrue p0.s
488 ; CHECK_BE-NEXT:    ptrue p1.d
489 ; CHECK_BE-NEXT:    st1w { z0.s }, p0, [sp]
490 ; CHECK_BE-NEXT:    ld1d { z0.d }, p1/z, [sp]
491 ; CHECK_BE-NEXT:    addvl sp, sp, #1
492 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
493 ; CHECK_BE-NEXT:    ret
494   %bc = bitcast <vscale x 4 x i32> %v to <vscale x 2 x i64>
495   ret <vscale x 2 x i64> %bc
498 define <vscale x 2 x i64> @bitcast_nxv8f16_to_nxv2i64(<vscale x 8 x half> %v) #0 {
499 ; CHECK-LABEL: bitcast_nxv8f16_to_nxv2i64:
500 ; CHECK:       // %bb.0:
501 ; CHECK-NEXT:    ret
503 ; CHECK_BE-LABEL: bitcast_nxv8f16_to_nxv2i64:
504 ; CHECK_BE:       // %bb.0:
505 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
506 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
507 ; CHECK_BE-NEXT:    ptrue p0.h
508 ; CHECK_BE-NEXT:    ptrue p1.d
509 ; CHECK_BE-NEXT:    st1h { z0.h }, p0, [sp]
510 ; CHECK_BE-NEXT:    ld1d { z0.d }, p1/z, [sp]
511 ; CHECK_BE-NEXT:    addvl sp, sp, #1
512 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
513 ; CHECK_BE-NEXT:    ret
514   %bc = bitcast <vscale x 8 x half> %v to <vscale x 2 x i64>
515   ret <vscale x 2 x i64> %bc
518 define <vscale x 2 x i64> @bitcast_nxv4f32_to_nxv2i64(<vscale x 4 x float> %v) #0 {
519 ; CHECK-LABEL: bitcast_nxv4f32_to_nxv2i64:
520 ; CHECK:       // %bb.0:
521 ; CHECK-NEXT:    ret
523 ; CHECK_BE-LABEL: bitcast_nxv4f32_to_nxv2i64:
524 ; CHECK_BE:       // %bb.0:
525 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
526 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
527 ; CHECK_BE-NEXT:    ptrue p0.s
528 ; CHECK_BE-NEXT:    ptrue p1.d
529 ; CHECK_BE-NEXT:    st1w { z0.s }, p0, [sp]
530 ; CHECK_BE-NEXT:    ld1d { z0.d }, p1/z, [sp]
531 ; CHECK_BE-NEXT:    addvl sp, sp, #1
532 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
533 ; CHECK_BE-NEXT:    ret
534   %bc = bitcast <vscale x 4 x float> %v to <vscale x 2 x i64>
535   ret <vscale x 2 x i64> %bc
538 define <vscale x 2 x i64> @bitcast_nxv2f64_to_nxv2i64(<vscale x 2 x double> %v) #0 {
539 ; CHECK-LABEL: bitcast_nxv2f64_to_nxv2i64:
540 ; CHECK:       // %bb.0:
541 ; CHECK-NEXT:    ret
543 ; CHECK_BE-LABEL: bitcast_nxv2f64_to_nxv2i64:
544 ; CHECK_BE:       // %bb.0:
545 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
546 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
547 ; CHECK_BE-NEXT:    ptrue p0.d
548 ; CHECK_BE-NEXT:    st1d { z0.d }, p0, [sp]
549 ; CHECK_BE-NEXT:    ld1d { z0.d }, p0/z, [sp]
550 ; CHECK_BE-NEXT:    addvl sp, sp, #1
551 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
552 ; CHECK_BE-NEXT:    ret
553   %bc = bitcast <vscale x 2 x double> %v to <vscale x 2 x i64>
554   ret <vscale x 2 x i64> %bc
557 define <vscale x 2 x i64> @bitcast_nxv8bf16_to_nxv2i64(<vscale x 8 x bfloat> %v) #0 {
558 ; CHECK-LABEL: bitcast_nxv8bf16_to_nxv2i64:
559 ; CHECK:       // %bb.0:
560 ; CHECK-NEXT:    ret
562 ; CHECK_BE-LABEL: bitcast_nxv8bf16_to_nxv2i64:
563 ; CHECK_BE:       // %bb.0:
564 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
565 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
566 ; CHECK_BE-NEXT:    ptrue p0.h
567 ; CHECK_BE-NEXT:    ptrue p1.d
568 ; CHECK_BE-NEXT:    st1h { z0.h }, p0, [sp]
569 ; CHECK_BE-NEXT:    ld1d { z0.d }, p1/z, [sp]
570 ; CHECK_BE-NEXT:    addvl sp, sp, #1
571 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
572 ; CHECK_BE-NEXT:    ret
573   %bc = bitcast <vscale x 8 x bfloat> %v to <vscale x 2 x i64>
574   ret <vscale x 2 x i64> %bc
578 ; bitcast to nxv8f16
581 define <vscale x 8 x half> @bitcast_nxv16i8_to_nxv8f16(<vscale x 16 x i8> %v) #0 {
582 ; CHECK-LABEL: bitcast_nxv16i8_to_nxv8f16:
583 ; CHECK:       // %bb.0:
584 ; CHECK-NEXT:    ret
586 ; CHECK_BE-LABEL: bitcast_nxv16i8_to_nxv8f16:
587 ; CHECK_BE:       // %bb.0:
588 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
589 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
590 ; CHECK_BE-NEXT:    ptrue p0.b
591 ; CHECK_BE-NEXT:    ptrue p1.h
592 ; CHECK_BE-NEXT:    st1b { z0.b }, p0, [sp]
593 ; CHECK_BE-NEXT:    ld1h { z0.h }, p1/z, [sp]
594 ; CHECK_BE-NEXT:    addvl sp, sp, #1
595 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
596 ; CHECK_BE-NEXT:    ret
597   %bc = bitcast <vscale x 16 x i8> %v to <vscale x 8 x half>
598   ret <vscale x 8 x half> %bc
601 define <vscale x 8 x half> @bitcast_nxv8i16_to_nxv8f16(<vscale x 8 x i16> %v) #0 {
602 ; CHECK-LABEL: bitcast_nxv8i16_to_nxv8f16:
603 ; CHECK:       // %bb.0:
604 ; CHECK-NEXT:    ret
606 ; CHECK_BE-LABEL: bitcast_nxv8i16_to_nxv8f16:
607 ; CHECK_BE:       // %bb.0:
608 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
609 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
610 ; CHECK_BE-NEXT:    ptrue p0.h
611 ; CHECK_BE-NEXT:    st1h { z0.h }, p0, [sp]
612 ; CHECK_BE-NEXT:    ld1h { z0.h }, p0/z, [sp]
613 ; CHECK_BE-NEXT:    addvl sp, sp, #1
614 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
615 ; CHECK_BE-NEXT:    ret
616   %bc = bitcast <vscale x 8 x i16> %v to <vscale x 8 x half>
617   ret <vscale x 8 x half> %bc
620 define <vscale x 8 x half> @bitcast_nxv4i32_to_nxv8f16(<vscale x 4 x i32> %v) #0 {
621 ; CHECK-LABEL: bitcast_nxv4i32_to_nxv8f16:
622 ; CHECK:       // %bb.0:
623 ; CHECK-NEXT:    ret
625 ; CHECK_BE-LABEL: bitcast_nxv4i32_to_nxv8f16:
626 ; CHECK_BE:       // %bb.0:
627 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
628 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
629 ; CHECK_BE-NEXT:    ptrue p0.s
630 ; CHECK_BE-NEXT:    ptrue p1.h
631 ; CHECK_BE-NEXT:    st1w { z0.s }, p0, [sp]
632 ; CHECK_BE-NEXT:    ld1h { z0.h }, p1/z, [sp]
633 ; CHECK_BE-NEXT:    addvl sp, sp, #1
634 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
635 ; CHECK_BE-NEXT:    ret
636   %bc = bitcast <vscale x 4 x i32> %v to <vscale x 8 x half>
637   ret <vscale x 8 x half> %bc
640 define <vscale x 8 x half> @bitcast_nxv2i64_to_nxv8f16(<vscale x 2 x i64> %v) #0 {
641 ; CHECK-LABEL: bitcast_nxv2i64_to_nxv8f16:
642 ; CHECK:       // %bb.0:
643 ; CHECK-NEXT:    ret
645 ; CHECK_BE-LABEL: bitcast_nxv2i64_to_nxv8f16:
646 ; CHECK_BE:       // %bb.0:
647 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
648 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
649 ; CHECK_BE-NEXT:    ptrue p0.d
650 ; CHECK_BE-NEXT:    ptrue p1.h
651 ; CHECK_BE-NEXT:    st1d { z0.d }, p0, [sp]
652 ; CHECK_BE-NEXT:    ld1h { z0.h }, p1/z, [sp]
653 ; CHECK_BE-NEXT:    addvl sp, sp, #1
654 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
655 ; CHECK_BE-NEXT:    ret
656   %bc = bitcast <vscale x 2 x i64> %v to <vscale x 8 x half>
657   ret <vscale x 8 x half> %bc
660 define <vscale x 8 x half> @bitcast_nxv4f32_to_nxv8f16(<vscale x 4 x float> %v) #0 {
661 ; CHECK-LABEL: bitcast_nxv4f32_to_nxv8f16:
662 ; CHECK:       // %bb.0:
663 ; CHECK-NEXT:    ret
665 ; CHECK_BE-LABEL: bitcast_nxv4f32_to_nxv8f16:
666 ; CHECK_BE:       // %bb.0:
667 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
668 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
669 ; CHECK_BE-NEXT:    ptrue p0.s
670 ; CHECK_BE-NEXT:    ptrue p1.h
671 ; CHECK_BE-NEXT:    st1w { z0.s }, p0, [sp]
672 ; CHECK_BE-NEXT:    ld1h { z0.h }, p1/z, [sp]
673 ; CHECK_BE-NEXT:    addvl sp, sp, #1
674 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
675 ; CHECK_BE-NEXT:    ret
676   %bc = bitcast <vscale x 4 x float> %v to <vscale x 8 x half>
677   ret <vscale x 8 x half> %bc
680 define <vscale x 8 x half> @bitcast_nxv2f64_to_nxv8f16(<vscale x 2 x double> %v) #0 {
681 ; CHECK-LABEL: bitcast_nxv2f64_to_nxv8f16:
682 ; CHECK:       // %bb.0:
683 ; CHECK-NEXT:    ret
685 ; CHECK_BE-LABEL: bitcast_nxv2f64_to_nxv8f16:
686 ; CHECK_BE:       // %bb.0:
687 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
688 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
689 ; CHECK_BE-NEXT:    ptrue p0.d
690 ; CHECK_BE-NEXT:    ptrue p1.h
691 ; CHECK_BE-NEXT:    st1d { z0.d }, p0, [sp]
692 ; CHECK_BE-NEXT:    ld1h { z0.h }, p1/z, [sp]
693 ; CHECK_BE-NEXT:    addvl sp, sp, #1
694 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
695 ; CHECK_BE-NEXT:    ret
696   %bc = bitcast <vscale x 2 x double> %v to <vscale x 8 x half>
697   ret <vscale x 8 x half> %bc
700 define <vscale x 8 x half> @bitcast_nxv8bf16_to_nxv8f16(<vscale x 8 x bfloat> %v) #0 {
701 ; CHECK-LABEL: bitcast_nxv8bf16_to_nxv8f16:
702 ; CHECK:       // %bb.0:
703 ; CHECK-NEXT:    ret
705 ; CHECK_BE-LABEL: bitcast_nxv8bf16_to_nxv8f16:
706 ; CHECK_BE:       // %bb.0:
707 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
708 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
709 ; CHECK_BE-NEXT:    ptrue p0.h
710 ; CHECK_BE-NEXT:    st1h { z0.h }, p0, [sp]
711 ; CHECK_BE-NEXT:    ld1h { z0.h }, p0/z, [sp]
712 ; CHECK_BE-NEXT:    addvl sp, sp, #1
713 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
714 ; CHECK_BE-NEXT:    ret
715   %bc = bitcast <vscale x 8 x bfloat> %v to <vscale x 8 x half>
716   ret <vscale x 8 x half> %bc
720 ; bitcast to nxv4f32
723 define <vscale x 4 x float> @bitcast_nxv16i8_to_nxv4f32(<vscale x 16 x i8> %v) #0 {
724 ; CHECK-LABEL: bitcast_nxv16i8_to_nxv4f32:
725 ; CHECK:       // %bb.0:
726 ; CHECK-NEXT:    ret
728 ; CHECK_BE-LABEL: bitcast_nxv16i8_to_nxv4f32:
729 ; CHECK_BE:       // %bb.0:
730 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
731 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
732 ; CHECK_BE-NEXT:    ptrue p0.b
733 ; CHECK_BE-NEXT:    ptrue p1.s
734 ; CHECK_BE-NEXT:    st1b { z0.b }, p0, [sp]
735 ; CHECK_BE-NEXT:    ld1w { z0.s }, p1/z, [sp]
736 ; CHECK_BE-NEXT:    addvl sp, sp, #1
737 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
738 ; CHECK_BE-NEXT:    ret
739   %bc = bitcast <vscale x 16 x i8> %v to <vscale x 4 x float>
740   ret <vscale x 4 x float> %bc
743 define <vscale x 4 x float> @bitcast_nxv8i16_to_nxv4f32(<vscale x 8 x i16> %v) #0 {
744 ; CHECK-LABEL: bitcast_nxv8i16_to_nxv4f32:
745 ; CHECK:       // %bb.0:
746 ; CHECK-NEXT:    ret
748 ; CHECK_BE-LABEL: bitcast_nxv8i16_to_nxv4f32:
749 ; CHECK_BE:       // %bb.0:
750 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
751 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
752 ; CHECK_BE-NEXT:    ptrue p0.h
753 ; CHECK_BE-NEXT:    ptrue p1.s
754 ; CHECK_BE-NEXT:    st1h { z0.h }, p0, [sp]
755 ; CHECK_BE-NEXT:    ld1w { z0.s }, p1/z, [sp]
756 ; CHECK_BE-NEXT:    addvl sp, sp, #1
757 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
758 ; CHECK_BE-NEXT:    ret
759   %bc = bitcast <vscale x 8 x i16> %v to <vscale x 4 x float>
760   ret <vscale x 4 x float> %bc
763 define <vscale x 4 x float> @bitcast_nxv4i32_to_nxv4f32(<vscale x 4 x i32> %v) #0 {
764 ; CHECK-LABEL: bitcast_nxv4i32_to_nxv4f32:
765 ; CHECK:       // %bb.0:
766 ; CHECK-NEXT:    ret
768 ; CHECK_BE-LABEL: bitcast_nxv4i32_to_nxv4f32:
769 ; CHECK_BE:       // %bb.0:
770 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
771 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
772 ; CHECK_BE-NEXT:    ptrue p0.s
773 ; CHECK_BE-NEXT:    st1w { z0.s }, p0, [sp]
774 ; CHECK_BE-NEXT:    ld1w { z0.s }, p0/z, [sp]
775 ; CHECK_BE-NEXT:    addvl sp, sp, #1
776 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
777 ; CHECK_BE-NEXT:    ret
778   %bc = bitcast <vscale x 4 x i32> %v to <vscale x 4 x float>
779   ret <vscale x 4 x float> %bc
782 define <vscale x 4 x float> @bitcast_nxv2i64_to_nxv4f32(<vscale x 2 x i64> %v) #0 {
783 ; CHECK-LABEL: bitcast_nxv2i64_to_nxv4f32:
784 ; CHECK:       // %bb.0:
785 ; CHECK-NEXT:    ret
787 ; CHECK_BE-LABEL: bitcast_nxv2i64_to_nxv4f32:
788 ; CHECK_BE:       // %bb.0:
789 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
790 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
791 ; CHECK_BE-NEXT:    ptrue p0.d
792 ; CHECK_BE-NEXT:    ptrue p1.s
793 ; CHECK_BE-NEXT:    st1d { z0.d }, p0, [sp]
794 ; CHECK_BE-NEXT:    ld1w { z0.s }, p1/z, [sp]
795 ; CHECK_BE-NEXT:    addvl sp, sp, #1
796 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
797 ; CHECK_BE-NEXT:    ret
798   %bc = bitcast <vscale x 2 x i64> %v to <vscale x 4 x float>
799   ret <vscale x 4 x float> %bc
802 define <vscale x 4 x float> @bitcast_nxv8f16_to_nxv4f32(<vscale x 8 x half> %v) #0 {
803 ; CHECK-LABEL: bitcast_nxv8f16_to_nxv4f32:
804 ; CHECK:       // %bb.0:
805 ; CHECK-NEXT:    ret
807 ; CHECK_BE-LABEL: bitcast_nxv8f16_to_nxv4f32:
808 ; CHECK_BE:       // %bb.0:
809 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
810 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
811 ; CHECK_BE-NEXT:    ptrue p0.h
812 ; CHECK_BE-NEXT:    ptrue p1.s
813 ; CHECK_BE-NEXT:    st1h { z0.h }, p0, [sp]
814 ; CHECK_BE-NEXT:    ld1w { z0.s }, p1/z, [sp]
815 ; CHECK_BE-NEXT:    addvl sp, sp, #1
816 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
817 ; CHECK_BE-NEXT:    ret
818   %bc = bitcast <vscale x 8 x half> %v to <vscale x 4 x float>
819   ret <vscale x 4 x float> %bc
822 define <vscale x 4 x float> @bitcast_nxv2f64_to_nxv4f32(<vscale x 2 x double> %v) #0 {
823 ; CHECK-LABEL: bitcast_nxv2f64_to_nxv4f32:
824 ; CHECK:       // %bb.0:
825 ; CHECK-NEXT:    ret
827 ; CHECK_BE-LABEL: bitcast_nxv2f64_to_nxv4f32:
828 ; CHECK_BE:       // %bb.0:
829 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
830 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
831 ; CHECK_BE-NEXT:    ptrue p0.d
832 ; CHECK_BE-NEXT:    ptrue p1.s
833 ; CHECK_BE-NEXT:    st1d { z0.d }, p0, [sp]
834 ; CHECK_BE-NEXT:    ld1w { z0.s }, p1/z, [sp]
835 ; CHECK_BE-NEXT:    addvl sp, sp, #1
836 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
837 ; CHECK_BE-NEXT:    ret
838   %bc = bitcast <vscale x 2 x double> %v to <vscale x 4 x float>
839   ret <vscale x 4 x float> %bc
842 define <vscale x 4 x float> @bitcast_nxv8bf16_to_nxv4f32(<vscale x 8 x bfloat> %v) #0 {
843 ; CHECK-LABEL: bitcast_nxv8bf16_to_nxv4f32:
844 ; CHECK:       // %bb.0:
845 ; CHECK-NEXT:    ret
847 ; CHECK_BE-LABEL: bitcast_nxv8bf16_to_nxv4f32:
848 ; CHECK_BE:       // %bb.0:
849 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
850 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
851 ; CHECK_BE-NEXT:    ptrue p0.h
852 ; CHECK_BE-NEXT:    ptrue p1.s
853 ; CHECK_BE-NEXT:    st1h { z0.h }, p0, [sp]
854 ; CHECK_BE-NEXT:    ld1w { z0.s }, p1/z, [sp]
855 ; CHECK_BE-NEXT:    addvl sp, sp, #1
856 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
857 ; CHECK_BE-NEXT:    ret
858   %bc = bitcast <vscale x 8 x bfloat> %v to <vscale x 4 x float>
859   ret <vscale x 4 x float> %bc
863 ; bitcast to nxv2f64
866 define <vscale x 2 x double> @bitcast_nxv16i8_to_nxv2f64(<vscale x 16 x i8> %v) #0 {
867 ; CHECK-LABEL: bitcast_nxv16i8_to_nxv2f64:
868 ; CHECK:       // %bb.0:
869 ; CHECK-NEXT:    ret
871 ; CHECK_BE-LABEL: bitcast_nxv16i8_to_nxv2f64:
872 ; CHECK_BE:       // %bb.0:
873 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
874 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
875 ; CHECK_BE-NEXT:    ptrue p0.b
876 ; CHECK_BE-NEXT:    ptrue p1.d
877 ; CHECK_BE-NEXT:    st1b { z0.b }, p0, [sp]
878 ; CHECK_BE-NEXT:    ld1d { z0.d }, p1/z, [sp]
879 ; CHECK_BE-NEXT:    addvl sp, sp, #1
880 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
881 ; CHECK_BE-NEXT:    ret
882   %bc = bitcast <vscale x 16 x i8> %v to <vscale x 2 x double>
883   ret <vscale x 2 x double> %bc
886 define <vscale x 2 x double> @bitcast_nxv8i16_to_nxv2f64(<vscale x 8 x i16> %v) #0 {
887 ; CHECK-LABEL: bitcast_nxv8i16_to_nxv2f64:
888 ; CHECK:       // %bb.0:
889 ; CHECK-NEXT:    ret
891 ; CHECK_BE-LABEL: bitcast_nxv8i16_to_nxv2f64:
892 ; CHECK_BE:       // %bb.0:
893 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
894 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
895 ; CHECK_BE-NEXT:    ptrue p0.h
896 ; CHECK_BE-NEXT:    ptrue p1.d
897 ; CHECK_BE-NEXT:    st1h { z0.h }, p0, [sp]
898 ; CHECK_BE-NEXT:    ld1d { z0.d }, p1/z, [sp]
899 ; CHECK_BE-NEXT:    addvl sp, sp, #1
900 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
901 ; CHECK_BE-NEXT:    ret
902   %bc = bitcast <vscale x 8 x i16> %v to <vscale x 2 x double>
903   ret <vscale x 2 x double> %bc
906 define <vscale x 2 x double> @bitcast_nxv4i32_to_nxv2f64(<vscale x 4 x i32> %v) #0 {
907 ; CHECK-LABEL: bitcast_nxv4i32_to_nxv2f64:
908 ; CHECK:       // %bb.0:
909 ; CHECK-NEXT:    ret
911 ; CHECK_BE-LABEL: bitcast_nxv4i32_to_nxv2f64:
912 ; CHECK_BE:       // %bb.0:
913 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
914 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
915 ; CHECK_BE-NEXT:    ptrue p0.s
916 ; CHECK_BE-NEXT:    ptrue p1.d
917 ; CHECK_BE-NEXT:    st1w { z0.s }, p0, [sp]
918 ; CHECK_BE-NEXT:    ld1d { z0.d }, p1/z, [sp]
919 ; CHECK_BE-NEXT:    addvl sp, sp, #1
920 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
921 ; CHECK_BE-NEXT:    ret
922   %bc = bitcast <vscale x 4 x i32> %v to <vscale x 2 x double>
923   ret <vscale x 2 x double> %bc
926 define <vscale x 2 x double> @bitcast_nxv2i64_to_nxv2f64(<vscale x 2 x i64> %v) #0 {
927 ; CHECK-LABEL: bitcast_nxv2i64_to_nxv2f64:
928 ; CHECK:       // %bb.0:
929 ; CHECK-NEXT:    ret
931 ; CHECK_BE-LABEL: bitcast_nxv2i64_to_nxv2f64:
932 ; CHECK_BE:       // %bb.0:
933 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
934 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
935 ; CHECK_BE-NEXT:    ptrue p0.d
936 ; CHECK_BE-NEXT:    st1d { z0.d }, p0, [sp]
937 ; CHECK_BE-NEXT:    ld1d { z0.d }, p0/z, [sp]
938 ; CHECK_BE-NEXT:    addvl sp, sp, #1
939 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
940 ; CHECK_BE-NEXT:    ret
941   %bc = bitcast <vscale x 2 x i64> %v to <vscale x 2 x double>
942   ret <vscale x 2 x double> %bc
945 define <vscale x 2 x double> @bitcast_nxv8f16_to_nxv2f64(<vscale x 8 x half> %v) #0 {
946 ; CHECK-LABEL: bitcast_nxv8f16_to_nxv2f64:
947 ; CHECK:       // %bb.0:
948 ; CHECK-NEXT:    ret
950 ; CHECK_BE-LABEL: bitcast_nxv8f16_to_nxv2f64:
951 ; CHECK_BE:       // %bb.0:
952 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
953 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
954 ; CHECK_BE-NEXT:    ptrue p0.h
955 ; CHECK_BE-NEXT:    ptrue p1.d
956 ; CHECK_BE-NEXT:    st1h { z0.h }, p0, [sp]
957 ; CHECK_BE-NEXT:    ld1d { z0.d }, p1/z, [sp]
958 ; CHECK_BE-NEXT:    addvl sp, sp, #1
959 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
960 ; CHECK_BE-NEXT:    ret
961   %bc = bitcast <vscale x 8 x half> %v to <vscale x 2 x double>
962   ret <vscale x 2 x double> %bc
965 define <vscale x 2 x double> @bitcast_nxv4f32_to_nxv2f64(<vscale x 4 x float> %v) #0 {
966 ; CHECK-LABEL: bitcast_nxv4f32_to_nxv2f64:
967 ; CHECK:       // %bb.0:
968 ; CHECK-NEXT:    ret
970 ; CHECK_BE-LABEL: bitcast_nxv4f32_to_nxv2f64:
971 ; CHECK_BE:       // %bb.0:
972 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
973 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
974 ; CHECK_BE-NEXT:    ptrue p0.s
975 ; CHECK_BE-NEXT:    ptrue p1.d
976 ; CHECK_BE-NEXT:    st1w { z0.s }, p0, [sp]
977 ; CHECK_BE-NEXT:    ld1d { z0.d }, p1/z, [sp]
978 ; CHECK_BE-NEXT:    addvl sp, sp, #1
979 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
980 ; CHECK_BE-NEXT:    ret
981   %bc = bitcast <vscale x 4 x float> %v to <vscale x 2 x double>
982   ret <vscale x 2 x double> %bc
985 define <vscale x 2 x double> @bitcast_nxv8bf16_to_nxv2f64(<vscale x 8 x bfloat> %v) #0 {
986 ; CHECK-LABEL: bitcast_nxv8bf16_to_nxv2f64:
987 ; CHECK:       // %bb.0:
988 ; CHECK-NEXT:    ret
990 ; CHECK_BE-LABEL: bitcast_nxv8bf16_to_nxv2f64:
991 ; CHECK_BE:       // %bb.0:
992 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
993 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
994 ; CHECK_BE-NEXT:    ptrue p0.h
995 ; CHECK_BE-NEXT:    ptrue p1.d
996 ; CHECK_BE-NEXT:    st1h { z0.h }, p0, [sp]
997 ; CHECK_BE-NEXT:    ld1d { z0.d }, p1/z, [sp]
998 ; CHECK_BE-NEXT:    addvl sp, sp, #1
999 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
1000 ; CHECK_BE-NEXT:    ret
1001   %bc = bitcast <vscale x 8 x bfloat> %v to <vscale x 2 x double>
1002   ret <vscale x 2 x double> %bc
1006 ; bitcast to nxv8bf16
1009 define <vscale x 8 x bfloat> @bitcast_nxv16i8_to_nxv8bf16(<vscale x 16 x i8> %v) #0 {
1010 ; CHECK-LABEL: bitcast_nxv16i8_to_nxv8bf16:
1011 ; CHECK:       // %bb.0:
1012 ; CHECK-NEXT:    ret
1014 ; CHECK_BE-LABEL: bitcast_nxv16i8_to_nxv8bf16:
1015 ; CHECK_BE:       // %bb.0:
1016 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
1017 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
1018 ; CHECK_BE-NEXT:    ptrue p0.b
1019 ; CHECK_BE-NEXT:    ptrue p1.h
1020 ; CHECK_BE-NEXT:    st1b { z0.b }, p0, [sp]
1021 ; CHECK_BE-NEXT:    ld1h { z0.h }, p1/z, [sp]
1022 ; CHECK_BE-NEXT:    addvl sp, sp, #1
1023 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
1024 ; CHECK_BE-NEXT:    ret
1025   %bc = bitcast <vscale x 16 x i8> %v to <vscale x 8 x bfloat>
1026   ret <vscale x 8 x bfloat> %bc
1029 define <vscale x 8 x bfloat> @bitcast_nxv8i16_to_nxv8bf16(<vscale x 8 x i16> %v) #0 {
1030 ; CHECK-LABEL: bitcast_nxv8i16_to_nxv8bf16:
1031 ; CHECK:       // %bb.0:
1032 ; CHECK-NEXT:    ret
1034 ; CHECK_BE-LABEL: bitcast_nxv8i16_to_nxv8bf16:
1035 ; CHECK_BE:       // %bb.0:
1036 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
1037 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
1038 ; CHECK_BE-NEXT:    ptrue p0.h
1039 ; CHECK_BE-NEXT:    st1h { z0.h }, p0, [sp]
1040 ; CHECK_BE-NEXT:    ld1h { z0.h }, p0/z, [sp]
1041 ; CHECK_BE-NEXT:    addvl sp, sp, #1
1042 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
1043 ; CHECK_BE-NEXT:    ret
1044   %bc = bitcast <vscale x 8 x i16> %v to <vscale x 8 x bfloat>
1045   ret <vscale x 8 x bfloat> %bc
1048 define <vscale x 8 x bfloat> @bitcast_nxv4i32_to_nxv8bf16(<vscale x 4 x i32> %v) #0 {
1049 ; CHECK-LABEL: bitcast_nxv4i32_to_nxv8bf16:
1050 ; CHECK:       // %bb.0:
1051 ; CHECK-NEXT:    ret
1053 ; CHECK_BE-LABEL: bitcast_nxv4i32_to_nxv8bf16:
1054 ; CHECK_BE:       // %bb.0:
1055 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
1056 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
1057 ; CHECK_BE-NEXT:    ptrue p0.s
1058 ; CHECK_BE-NEXT:    ptrue p1.h
1059 ; CHECK_BE-NEXT:    st1w { z0.s }, p0, [sp]
1060 ; CHECK_BE-NEXT:    ld1h { z0.h }, p1/z, [sp]
1061 ; CHECK_BE-NEXT:    addvl sp, sp, #1
1062 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
1063 ; CHECK_BE-NEXT:    ret
1064   %bc = bitcast <vscale x 4 x i32> %v to <vscale x 8 x bfloat>
1065   ret <vscale x 8 x bfloat> %bc
1068 define <vscale x 8 x bfloat> @bitcast_nxv2i64_to_nxv8bf16(<vscale x 2 x i64> %v) #0 {
1069 ; CHECK-LABEL: bitcast_nxv2i64_to_nxv8bf16:
1070 ; CHECK:       // %bb.0:
1071 ; CHECK-NEXT:    ret
1073 ; CHECK_BE-LABEL: bitcast_nxv2i64_to_nxv8bf16:
1074 ; CHECK_BE:       // %bb.0:
1075 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
1076 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
1077 ; CHECK_BE-NEXT:    ptrue p0.d
1078 ; CHECK_BE-NEXT:    ptrue p1.h
1079 ; CHECK_BE-NEXT:    st1d { z0.d }, p0, [sp]
1080 ; CHECK_BE-NEXT:    ld1h { z0.h }, p1/z, [sp]
1081 ; CHECK_BE-NEXT:    addvl sp, sp, #1
1082 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
1083 ; CHECK_BE-NEXT:    ret
1084   %bc = bitcast <vscale x 2 x i64> %v to <vscale x 8 x bfloat>
1085   ret <vscale x 8 x bfloat> %bc
1088 define <vscale x 8 x bfloat> @bitcast_nxv8f16_to_nxv8bf16(<vscale x 8 x half> %v) #0 {
1089 ; CHECK-LABEL: bitcast_nxv8f16_to_nxv8bf16:
1090 ; CHECK:       // %bb.0:
1091 ; CHECK-NEXT:    ret
1093 ; CHECK_BE-LABEL: bitcast_nxv8f16_to_nxv8bf16:
1094 ; CHECK_BE:       // %bb.0:
1095 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
1096 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
1097 ; CHECK_BE-NEXT:    ptrue p0.h
1098 ; CHECK_BE-NEXT:    st1h { z0.h }, p0, [sp]
1099 ; CHECK_BE-NEXT:    ld1h { z0.h }, p0/z, [sp]
1100 ; CHECK_BE-NEXT:    addvl sp, sp, #1
1101 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
1102 ; CHECK_BE-NEXT:    ret
1103   %bc = bitcast <vscale x 8 x half> %v to <vscale x 8 x bfloat>
1104   ret <vscale x 8 x bfloat> %bc
1107 define <vscale x 8 x bfloat> @bitcast_nxv4f32_to_nxv8bf16(<vscale x 4 x float> %v) #0 {
1108 ; CHECK-LABEL: bitcast_nxv4f32_to_nxv8bf16:
1109 ; CHECK:       // %bb.0:
1110 ; CHECK-NEXT:    ret
1112 ; CHECK_BE-LABEL: bitcast_nxv4f32_to_nxv8bf16:
1113 ; CHECK_BE:       // %bb.0:
1114 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
1115 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
1116 ; CHECK_BE-NEXT:    ptrue p0.s
1117 ; CHECK_BE-NEXT:    ptrue p1.h
1118 ; CHECK_BE-NEXT:    st1w { z0.s }, p0, [sp]
1119 ; CHECK_BE-NEXT:    ld1h { z0.h }, p1/z, [sp]
1120 ; CHECK_BE-NEXT:    addvl sp, sp, #1
1121 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
1122 ; CHECK_BE-NEXT:    ret
1123   %bc = bitcast <vscale x 4 x float> %v to <vscale x 8 x bfloat>
1124   ret <vscale x 8 x bfloat> %bc
1127 define <vscale x 8 x bfloat> @bitcast_nxv2f64_to_nxv8bf16(<vscale x 2 x double> %v) #0 {
1128 ; CHECK-LABEL: bitcast_nxv2f64_to_nxv8bf16:
1129 ; CHECK:       // %bb.0:
1130 ; CHECK-NEXT:    ret
1132 ; CHECK_BE-LABEL: bitcast_nxv2f64_to_nxv8bf16:
1133 ; CHECK_BE:       // %bb.0:
1134 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
1135 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
1136 ; CHECK_BE-NEXT:    ptrue p0.d
1137 ; CHECK_BE-NEXT:    ptrue p1.h
1138 ; CHECK_BE-NEXT:    st1d { z0.d }, p0, [sp]
1139 ; CHECK_BE-NEXT:    ld1h { z0.h }, p1/z, [sp]
1140 ; CHECK_BE-NEXT:    addvl sp, sp, #1
1141 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
1142 ; CHECK_BE-NEXT:    ret
1143   %bc = bitcast <vscale x 2 x double> %v to <vscale x 8 x bfloat>
1144   ret <vscale x 8 x bfloat> %bc
1148 ; bitcast to nxv8i8
1151 define <vscale x 8 x i8> @bitcast_nxv4i16_to_nxv8i8(<vscale x 4 x i16> %v) #0 {
1152 ; CHECK-LABEL: bitcast_nxv4i16_to_nxv8i8:
1153 ; CHECK:       // %bb.0:
1154 ; CHECK-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
1155 ; CHECK-NEXT:    addvl sp, sp, #-1
1156 ; CHECK-NEXT:    ptrue p0.s
1157 ; CHECK-NEXT:    ptrue p1.h
1158 ; CHECK-NEXT:    st1h { z0.s }, p0, [sp, #1, mul vl]
1159 ; CHECK-NEXT:    ld1b { z0.h }, p1/z, [sp, #1, mul vl]
1160 ; CHECK-NEXT:    addvl sp, sp, #1
1161 ; CHECK-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
1162 ; CHECK-NEXT:    ret
1164 ; CHECK_BE-LABEL: bitcast_nxv4i16_to_nxv8i8:
1165 ; CHECK_BE:       // %bb.0:
1166 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
1167 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
1168 ; CHECK_BE-NEXT:    ptrue p0.s
1169 ; CHECK_BE-NEXT:    ptrue p1.h
1170 ; CHECK_BE-NEXT:    st1h { z0.s }, p0, [sp, #1, mul vl]
1171 ; CHECK_BE-NEXT:    ld1b { z0.h }, p1/z, [sp, #1, mul vl]
1172 ; CHECK_BE-NEXT:    addvl sp, sp, #1
1173 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
1174 ; CHECK_BE-NEXT:    ret
1175   %bc = bitcast <vscale x 4 x i16> %v to <vscale x 8 x i8>
1176   ret <vscale x 8 x i8> %bc
1179 define <vscale x 8 x i8> @bitcast_nxv2i32_to_nxv8i8(<vscale x 2 x i32> %v) #0 {
1180 ; CHECK-LABEL: bitcast_nxv2i32_to_nxv8i8:
1181 ; CHECK:       // %bb.0:
1182 ; CHECK-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
1183 ; CHECK-NEXT:    addvl sp, sp, #-1
1184 ; CHECK-NEXT:    ptrue p0.d
1185 ; CHECK-NEXT:    ptrue p1.h
1186 ; CHECK-NEXT:    st1w { z0.d }, p0, [sp, #1, mul vl]
1187 ; CHECK-NEXT:    ld1b { z0.h }, p1/z, [sp, #1, mul vl]
1188 ; CHECK-NEXT:    addvl sp, sp, #1
1189 ; CHECK-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
1190 ; CHECK-NEXT:    ret
1192 ; CHECK_BE-LABEL: bitcast_nxv2i32_to_nxv8i8:
1193 ; CHECK_BE:       // %bb.0:
1194 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
1195 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
1196 ; CHECK_BE-NEXT:    ptrue p0.d
1197 ; CHECK_BE-NEXT:    ptrue p1.h
1198 ; CHECK_BE-NEXT:    st1w { z0.d }, p0, [sp, #1, mul vl]
1199 ; CHECK_BE-NEXT:    ld1b { z0.h }, p1/z, [sp, #1, mul vl]
1200 ; CHECK_BE-NEXT:    addvl sp, sp, #1
1201 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
1202 ; CHECK_BE-NEXT:    ret
1203   %bc = bitcast <vscale x 2 x i32> %v to <vscale x 8 x i8>
1204   ret <vscale x 8 x i8> %bc
1207 define <vscale x 8 x i8> @bitcast_nxv1i64_to_nxv8i8(<vscale x 1 x i64> %v) #0 {
1208 ; CHECK-LABEL: bitcast_nxv1i64_to_nxv8i8:
1209 ; CHECK:       // %bb.0:
1210 ; CHECK-NEXT:    uunpklo z0.h, z0.b
1211 ; CHECK-NEXT:    ret
1213 ; CHECK_BE-LABEL: bitcast_nxv1i64_to_nxv8i8:
1214 ; CHECK_BE:       // %bb.0:
1215 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
1216 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
1217 ; CHECK_BE-NEXT:    ptrue p0.d
1218 ; CHECK_BE-NEXT:    ptrue p1.b
1219 ; CHECK_BE-NEXT:    st1d { z0.d }, p0, [sp]
1220 ; CHECK_BE-NEXT:    ld1b { z0.b }, p1/z, [sp]
1221 ; CHECK_BE-NEXT:    uunpklo z0.h, z0.b
1222 ; CHECK_BE-NEXT:    addvl sp, sp, #1
1223 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
1224 ; CHECK_BE-NEXT:    ret
1225   %bc = bitcast <vscale x 1 x i64> %v to <vscale x 8 x i8>
1226   ret <vscale x 8 x i8> %bc
1229 define <vscale x 8 x i8> @bitcast_nxv4f16_to_nxv8i8(<vscale x 4 x half> %v) #0 {
1230 ; CHECK-LABEL: bitcast_nxv4f16_to_nxv8i8:
1231 ; CHECK:       // %bb.0:
1232 ; CHECK-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
1233 ; CHECK-NEXT:    addvl sp, sp, #-1
1234 ; CHECK-NEXT:    ptrue p0.s
1235 ; CHECK-NEXT:    ptrue p1.h
1236 ; CHECK-NEXT:    st1h { z0.s }, p0, [sp, #1, mul vl]
1237 ; CHECK-NEXT:    ld1b { z0.h }, p1/z, [sp, #1, mul vl]
1238 ; CHECK-NEXT:    addvl sp, sp, #1
1239 ; CHECK-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
1240 ; CHECK-NEXT:    ret
1242 ; CHECK_BE-LABEL: bitcast_nxv4f16_to_nxv8i8:
1243 ; CHECK_BE:       // %bb.0:
1244 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
1245 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
1246 ; CHECK_BE-NEXT:    ptrue p0.s
1247 ; CHECK_BE-NEXT:    ptrue p1.h
1248 ; CHECK_BE-NEXT:    st1h { z0.s }, p0, [sp, #1, mul vl]
1249 ; CHECK_BE-NEXT:    ld1b { z0.h }, p1/z, [sp, #1, mul vl]
1250 ; CHECK_BE-NEXT:    addvl sp, sp, #1
1251 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
1252 ; CHECK_BE-NEXT:    ret
1253   %bc = bitcast <vscale x 4 x half> %v to <vscale x 8 x i8>
1254   ret <vscale x 8 x i8> %bc
1257 define <vscale x 8 x i8> @bitcast_nxv2f32_to_nxv8i8(<vscale x 2 x float> %v) #0 {
1258 ; CHECK-LABEL: bitcast_nxv2f32_to_nxv8i8:
1259 ; CHECK:       // %bb.0:
1260 ; CHECK-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
1261 ; CHECK-NEXT:    addvl sp, sp, #-1
1262 ; CHECK-NEXT:    ptrue p0.d
1263 ; CHECK-NEXT:    ptrue p1.h
1264 ; CHECK-NEXT:    st1w { z0.d }, p0, [sp, #1, mul vl]
1265 ; CHECK-NEXT:    ld1b { z0.h }, p1/z, [sp, #1, mul vl]
1266 ; CHECK-NEXT:    addvl sp, sp, #1
1267 ; CHECK-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
1268 ; CHECK-NEXT:    ret
1270 ; CHECK_BE-LABEL: bitcast_nxv2f32_to_nxv8i8:
1271 ; CHECK_BE:       // %bb.0:
1272 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
1273 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
1274 ; CHECK_BE-NEXT:    ptrue p0.d
1275 ; CHECK_BE-NEXT:    ptrue p1.h
1276 ; CHECK_BE-NEXT:    st1w { z0.d }, p0, [sp, #1, mul vl]
1277 ; CHECK_BE-NEXT:    ld1b { z0.h }, p1/z, [sp, #1, mul vl]
1278 ; CHECK_BE-NEXT:    addvl sp, sp, #1
1279 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
1280 ; CHECK_BE-NEXT:    ret
1281   %bc = bitcast <vscale x 2 x float> %v to <vscale x 8 x i8>
1282   ret <vscale x 8 x i8> %bc
1285 define <vscale x 8 x i8> @bitcast_nxv1f64_to_nxv8i8(<vscale x 1 x double> %v) #0 {
1286 ; CHECK-LABEL: bitcast_nxv1f64_to_nxv8i8:
1287 ; CHECK:       // %bb.0:
1288 ; CHECK-NEXT:    uunpklo z0.h, z0.b
1289 ; CHECK-NEXT:    ret
1291 ; CHECK_BE-LABEL: bitcast_nxv1f64_to_nxv8i8:
1292 ; CHECK_BE:       // %bb.0:
1293 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
1294 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
1295 ; CHECK_BE-NEXT:    ptrue p0.d
1296 ; CHECK_BE-NEXT:    ptrue p1.b
1297 ; CHECK_BE-NEXT:    st1d { z0.d }, p0, [sp]
1298 ; CHECK_BE-NEXT:    ld1b { z0.b }, p1/z, [sp]
1299 ; CHECK_BE-NEXT:    uunpklo z0.h, z0.b
1300 ; CHECK_BE-NEXT:    addvl sp, sp, #1
1301 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
1302 ; CHECK_BE-NEXT:    ret
1303   %bc = bitcast <vscale x 1 x double> %v to <vscale x 8 x i8>
1304   ret <vscale x 8 x i8> %bc
1307 define <vscale x 8 x i8> @bitcast_nxv4bf16_to_nxv8i8(<vscale x 4 x bfloat> %v) #0 {
1308 ; CHECK-LABEL: bitcast_nxv4bf16_to_nxv8i8:
1309 ; CHECK:       // %bb.0:
1310 ; CHECK-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
1311 ; CHECK-NEXT:    addvl sp, sp, #-1
1312 ; CHECK-NEXT:    ptrue p0.s
1313 ; CHECK-NEXT:    ptrue p1.h
1314 ; CHECK-NEXT:    st1h { z0.s }, p0, [sp, #1, mul vl]
1315 ; CHECK-NEXT:    ld1b { z0.h }, p1/z, [sp, #1, mul vl]
1316 ; CHECK-NEXT:    addvl sp, sp, #1
1317 ; CHECK-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
1318 ; CHECK-NEXT:    ret
1320 ; CHECK_BE-LABEL: bitcast_nxv4bf16_to_nxv8i8:
1321 ; CHECK_BE:       // %bb.0:
1322 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
1323 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
1324 ; CHECK_BE-NEXT:    ptrue p0.s
1325 ; CHECK_BE-NEXT:    ptrue p1.h
1326 ; CHECK_BE-NEXT:    st1h { z0.s }, p0, [sp, #1, mul vl]
1327 ; CHECK_BE-NEXT:    ld1b { z0.h }, p1/z, [sp, #1, mul vl]
1328 ; CHECK_BE-NEXT:    addvl sp, sp, #1
1329 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
1330 ; CHECK_BE-NEXT:    ret
1331   %bc = bitcast <vscale x 4 x bfloat> %v to <vscale x 8 x i8>
1332   ret <vscale x 8 x i8> %bc
1336 ; bitcast to nxv4i16
1339 define <vscale x 4 x i16> @bitcast_nxv8i8_to_nxv4i16(<vscale x 8 x i8> %v) #0 {
1340 ; CHECK-LABEL: bitcast_nxv8i8_to_nxv4i16:
1341 ; CHECK:       // %bb.0:
1342 ; CHECK-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
1343 ; CHECK-NEXT:    addvl sp, sp, #-1
1344 ; CHECK-NEXT:    ptrue p0.h
1345 ; CHECK-NEXT:    ptrue p1.s
1346 ; CHECK-NEXT:    st1b { z0.h }, p0, [sp, #1, mul vl]
1347 ; CHECK-NEXT:    ld1h { z0.s }, p1/z, [sp, #1, mul vl]
1348 ; CHECK-NEXT:    addvl sp, sp, #1
1349 ; CHECK-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
1350 ; CHECK-NEXT:    ret
1352 ; CHECK_BE-LABEL: bitcast_nxv8i8_to_nxv4i16:
1353 ; CHECK_BE:       // %bb.0:
1354 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
1355 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
1356 ; CHECK_BE-NEXT:    ptrue p0.h
1357 ; CHECK_BE-NEXT:    ptrue p1.s
1358 ; CHECK_BE-NEXT:    st1b { z0.h }, p0, [sp, #1, mul vl]
1359 ; CHECK_BE-NEXT:    ld1h { z0.s }, p1/z, [sp, #1, mul vl]
1360 ; CHECK_BE-NEXT:    addvl sp, sp, #1
1361 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
1362 ; CHECK_BE-NEXT:    ret
1363   %bc = bitcast <vscale x 8 x i8> %v to <vscale x 4 x i16>
1364   ret <vscale x 4 x i16> %bc
1367 define <vscale x 4 x i16> @bitcast_nxv2i32_to_nxv4i16(<vscale x 2 x i32> %v) #0 {
1368 ; CHECK-LABEL: bitcast_nxv2i32_to_nxv4i16:
1369 ; CHECK:       // %bb.0:
1370 ; CHECK-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
1371 ; CHECK-NEXT:    addvl sp, sp, #-1
1372 ; CHECK-NEXT:    ptrue p0.d
1373 ; CHECK-NEXT:    ptrue p1.s
1374 ; CHECK-NEXT:    st1w { z0.d }, p0, [sp, #1, mul vl]
1375 ; CHECK-NEXT:    ld1h { z0.s }, p1/z, [sp, #1, mul vl]
1376 ; CHECK-NEXT:    addvl sp, sp, #1
1377 ; CHECK-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
1378 ; CHECK-NEXT:    ret
1380 ; CHECK_BE-LABEL: bitcast_nxv2i32_to_nxv4i16:
1381 ; CHECK_BE:       // %bb.0:
1382 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
1383 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
1384 ; CHECK_BE-NEXT:    ptrue p0.d
1385 ; CHECK_BE-NEXT:    ptrue p1.s
1386 ; CHECK_BE-NEXT:    st1w { z0.d }, p0, [sp, #1, mul vl]
1387 ; CHECK_BE-NEXT:    ld1h { z0.s }, p1/z, [sp, #1, mul vl]
1388 ; CHECK_BE-NEXT:    addvl sp, sp, #1
1389 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
1390 ; CHECK_BE-NEXT:    ret
1391   %bc = bitcast <vscale x 2 x i32> %v to <vscale x 4 x i16>
1392   ret <vscale x 4 x i16> %bc
1395 define <vscale x 4 x i16> @bitcast_nxv1i64_to_nxv4i16(<vscale x 1 x i64> %v) #0 {
1396 ; CHECK-LABEL: bitcast_nxv1i64_to_nxv4i16:
1397 ; CHECK:       // %bb.0:
1398 ; CHECK-NEXT:    uunpklo z0.s, z0.h
1399 ; CHECK-NEXT:    ret
1401 ; CHECK_BE-LABEL: bitcast_nxv1i64_to_nxv4i16:
1402 ; CHECK_BE:       // %bb.0:
1403 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
1404 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
1405 ; CHECK_BE-NEXT:    ptrue p0.d
1406 ; CHECK_BE-NEXT:    ptrue p1.h
1407 ; CHECK_BE-NEXT:    st1d { z0.d }, p0, [sp]
1408 ; CHECK_BE-NEXT:    ld1h { z0.h }, p1/z, [sp]
1409 ; CHECK_BE-NEXT:    uunpklo z0.s, z0.h
1410 ; CHECK_BE-NEXT:    addvl sp, sp, #1
1411 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
1412 ; CHECK_BE-NEXT:    ret
1413   %bc = bitcast <vscale x 1 x i64> %v to <vscale x 4 x i16>
1414   ret <vscale x 4 x i16> %bc
1417 define <vscale x 4 x i16> @bitcast_nxv4f16_to_nxv4i16(<vscale x 4 x half> %v) #0 {
1418 ; CHECK-LABEL: bitcast_nxv4f16_to_nxv4i16:
1419 ; CHECK:       // %bb.0:
1420 ; CHECK-NEXT:    ret
1422 ; CHECK_BE-LABEL: bitcast_nxv4f16_to_nxv4i16:
1423 ; CHECK_BE:       // %bb.0:
1424 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
1425 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
1426 ; CHECK_BE-NEXT:    ptrue p0.h
1427 ; CHECK_BE-NEXT:    ptrue p1.s
1428 ; CHECK_BE-NEXT:    st1h { z0.h }, p0, [sp]
1429 ; CHECK_BE-NEXT:    ld1w { z0.s }, p1/z, [sp]
1430 ; CHECK_BE-NEXT:    addvl sp, sp, #1
1431 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
1432 ; CHECK_BE-NEXT:    ret
1433   %bc = bitcast <vscale x 4 x half> %v to <vscale x 4 x i16>
1434   ret <vscale x 4 x i16> %bc
1437 define <vscale x 4 x i16> @bitcast_nxv2f32_to_nxv4i16(<vscale x 2 x float> %v) #0 {
1438 ; CHECK-LABEL: bitcast_nxv2f32_to_nxv4i16:
1439 ; CHECK:       // %bb.0:
1440 ; CHECK-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
1441 ; CHECK-NEXT:    addvl sp, sp, #-1
1442 ; CHECK-NEXT:    ptrue p0.d
1443 ; CHECK-NEXT:    ptrue p1.s
1444 ; CHECK-NEXT:    st1w { z0.d }, p0, [sp, #1, mul vl]
1445 ; CHECK-NEXT:    ld1h { z0.s }, p1/z, [sp, #1, mul vl]
1446 ; CHECK-NEXT:    addvl sp, sp, #1
1447 ; CHECK-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
1448 ; CHECK-NEXT:    ret
1450 ; CHECK_BE-LABEL: bitcast_nxv2f32_to_nxv4i16:
1451 ; CHECK_BE:       // %bb.0:
1452 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
1453 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
1454 ; CHECK_BE-NEXT:    ptrue p0.d
1455 ; CHECK_BE-NEXT:    ptrue p1.s
1456 ; CHECK_BE-NEXT:    st1w { z0.d }, p0, [sp, #1, mul vl]
1457 ; CHECK_BE-NEXT:    ld1h { z0.s }, p1/z, [sp, #1, mul vl]
1458 ; CHECK_BE-NEXT:    addvl sp, sp, #1
1459 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
1460 ; CHECK_BE-NEXT:    ret
1461   %bc = bitcast <vscale x 2 x float> %v to <vscale x 4 x i16>
1462   ret <vscale x 4 x i16> %bc
1465 define <vscale x 4 x i16> @bitcast_nxv1f64_to_nxv4i16(<vscale x 1 x double> %v) #0 {
1466 ; CHECK-LABEL: bitcast_nxv1f64_to_nxv4i16:
1467 ; CHECK:       // %bb.0:
1468 ; CHECK-NEXT:    uunpklo z0.s, z0.h
1469 ; CHECK-NEXT:    ret
1471 ; CHECK_BE-LABEL: bitcast_nxv1f64_to_nxv4i16:
1472 ; CHECK_BE:       // %bb.0:
1473 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
1474 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
1475 ; CHECK_BE-NEXT:    ptrue p0.d
1476 ; CHECK_BE-NEXT:    ptrue p1.h
1477 ; CHECK_BE-NEXT:    st1d { z0.d }, p0, [sp]
1478 ; CHECK_BE-NEXT:    ld1h { z0.h }, p1/z, [sp]
1479 ; CHECK_BE-NEXT:    uunpklo z0.s, z0.h
1480 ; CHECK_BE-NEXT:    addvl sp, sp, #1
1481 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
1482 ; CHECK_BE-NEXT:    ret
1483   %bc = bitcast <vscale x 1 x double> %v to <vscale x 4 x i16>
1484   ret <vscale x 4 x i16> %bc
1487 define <vscale x 4 x i16> @bitcast_nxv4bf16_to_nxv4i16(<vscale x 4 x bfloat> %v) #0 {
1488 ; CHECK-LABEL: bitcast_nxv4bf16_to_nxv4i16:
1489 ; CHECK:       // %bb.0:
1490 ; CHECK-NEXT:    ret
1492 ; CHECK_BE-LABEL: bitcast_nxv4bf16_to_nxv4i16:
1493 ; CHECK_BE:       // %bb.0:
1494 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
1495 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
1496 ; CHECK_BE-NEXT:    ptrue p0.h
1497 ; CHECK_BE-NEXT:    ptrue p1.s
1498 ; CHECK_BE-NEXT:    st1h { z0.h }, p0, [sp]
1499 ; CHECK_BE-NEXT:    ld1w { z0.s }, p1/z, [sp]
1500 ; CHECK_BE-NEXT:    addvl sp, sp, #1
1501 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
1502 ; CHECK_BE-NEXT:    ret
1503   %bc = bitcast <vscale x 4 x bfloat> %v to <vscale x 4 x i16>
1504   ret <vscale x 4 x i16> %bc
1508 ; bitcast to nxv2i32
1511 define <vscale x 2 x i32> @bitcast_nxv8i8_to_nxv2i32(<vscale x 8 x i8> %v) #0 {
1512 ; CHECK-LABEL: bitcast_nxv8i8_to_nxv2i32:
1513 ; CHECK:       // %bb.0:
1514 ; CHECK-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
1515 ; CHECK-NEXT:    addvl sp, sp, #-1
1516 ; CHECK-NEXT:    ptrue p0.h
1517 ; CHECK-NEXT:    ptrue p1.d
1518 ; CHECK-NEXT:    st1b { z0.h }, p0, [sp, #1, mul vl]
1519 ; CHECK-NEXT:    ld1w { z0.d }, p1/z, [sp, #1, mul vl]
1520 ; CHECK-NEXT:    addvl sp, sp, #1
1521 ; CHECK-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
1522 ; CHECK-NEXT:    ret
1524 ; CHECK_BE-LABEL: bitcast_nxv8i8_to_nxv2i32:
1525 ; CHECK_BE:       // %bb.0:
1526 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
1527 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
1528 ; CHECK_BE-NEXT:    ptrue p0.h
1529 ; CHECK_BE-NEXT:    ptrue p1.d
1530 ; CHECK_BE-NEXT:    st1b { z0.h }, p0, [sp, #1, mul vl]
1531 ; CHECK_BE-NEXT:    ld1w { z0.d }, p1/z, [sp, #1, mul vl]
1532 ; CHECK_BE-NEXT:    addvl sp, sp, #1
1533 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
1534 ; CHECK_BE-NEXT:    ret
1535   %bc = bitcast <vscale x 8 x i8> %v to <vscale x 2 x i32>
1536   ret <vscale x 2 x i32> %bc
1539 define <vscale x 2 x i32> @bitcast_nxv4i16_to_nxv2i32(<vscale x 4 x i16> %v) #0 {
1540 ; CHECK-LABEL: bitcast_nxv4i16_to_nxv2i32:
1541 ; CHECK:       // %bb.0:
1542 ; CHECK-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
1543 ; CHECK-NEXT:    addvl sp, sp, #-1
1544 ; CHECK-NEXT:    ptrue p0.s
1545 ; CHECK-NEXT:    ptrue p1.d
1546 ; CHECK-NEXT:    st1h { z0.s }, p0, [sp, #1, mul vl]
1547 ; CHECK-NEXT:    ld1w { z0.d }, p1/z, [sp, #1, mul vl]
1548 ; CHECK-NEXT:    addvl sp, sp, #1
1549 ; CHECK-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
1550 ; CHECK-NEXT:    ret
1552 ; CHECK_BE-LABEL: bitcast_nxv4i16_to_nxv2i32:
1553 ; CHECK_BE:       // %bb.0:
1554 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
1555 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
1556 ; CHECK_BE-NEXT:    ptrue p0.s
1557 ; CHECK_BE-NEXT:    ptrue p1.d
1558 ; CHECK_BE-NEXT:    st1h { z0.s }, p0, [sp, #1, mul vl]
1559 ; CHECK_BE-NEXT:    ld1w { z0.d }, p1/z, [sp, #1, mul vl]
1560 ; CHECK_BE-NEXT:    addvl sp, sp, #1
1561 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
1562 ; CHECK_BE-NEXT:    ret
1563   %bc = bitcast <vscale x 4 x i16> %v to <vscale x 2 x i32>
1564   ret <vscale x 2 x i32> %bc
1567 define <vscale x 2 x i32> @bitcast_nxv1i64_to_nxv2i32(<vscale x 1 x i64> %v) #0 {
1568 ; CHECK-LABEL: bitcast_nxv1i64_to_nxv2i32:
1569 ; CHECK:       // %bb.0:
1570 ; CHECK-NEXT:    uunpklo z0.d, z0.s
1571 ; CHECK-NEXT:    ret
1573 ; CHECK_BE-LABEL: bitcast_nxv1i64_to_nxv2i32:
1574 ; CHECK_BE:       // %bb.0:
1575 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
1576 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
1577 ; CHECK_BE-NEXT:    ptrue p0.d
1578 ; CHECK_BE-NEXT:    ptrue p1.s
1579 ; CHECK_BE-NEXT:    st1d { z0.d }, p0, [sp]
1580 ; CHECK_BE-NEXT:    ld1w { z0.s }, p1/z, [sp]
1581 ; CHECK_BE-NEXT:    uunpklo z0.d, z0.s
1582 ; CHECK_BE-NEXT:    addvl sp, sp, #1
1583 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
1584 ; CHECK_BE-NEXT:    ret
1585   %bc = bitcast <vscale x 1 x i64> %v to <vscale x 2 x i32>
1586   ret <vscale x 2 x i32> %bc
1589 define <vscale x 2 x i32> @bitcast_nxv4f16_to_nxv2i32(<vscale x 4 x half> %v) #0 {
1590 ; CHECK-LABEL: bitcast_nxv4f16_to_nxv2i32:
1591 ; CHECK:       // %bb.0:
1592 ; CHECK-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
1593 ; CHECK-NEXT:    addvl sp, sp, #-1
1594 ; CHECK-NEXT:    ptrue p0.s
1595 ; CHECK-NEXT:    ptrue p1.d
1596 ; CHECK-NEXT:    st1h { z0.s }, p0, [sp, #1, mul vl]
1597 ; CHECK-NEXT:    ld1w { z0.d }, p1/z, [sp, #1, mul vl]
1598 ; CHECK-NEXT:    addvl sp, sp, #1
1599 ; CHECK-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
1600 ; CHECK-NEXT:    ret
1602 ; CHECK_BE-LABEL: bitcast_nxv4f16_to_nxv2i32:
1603 ; CHECK_BE:       // %bb.0:
1604 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
1605 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
1606 ; CHECK_BE-NEXT:    ptrue p0.s
1607 ; CHECK_BE-NEXT:    ptrue p1.d
1608 ; CHECK_BE-NEXT:    st1h { z0.s }, p0, [sp, #1, mul vl]
1609 ; CHECK_BE-NEXT:    ld1w { z0.d }, p1/z, [sp, #1, mul vl]
1610 ; CHECK_BE-NEXT:    addvl sp, sp, #1
1611 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
1612 ; CHECK_BE-NEXT:    ret
1613   %bc = bitcast <vscale x 4 x half> %v to <vscale x 2 x i32>
1614   ret <vscale x 2 x i32> %bc
1617 define <vscale x 2 x i32> @bitcast_nxv2f32_to_nxv2i32(<vscale x 2 x float> %v) #0 {
1618 ; CHECK-LABEL: bitcast_nxv2f32_to_nxv2i32:
1619 ; CHECK:       // %bb.0:
1620 ; CHECK-NEXT:    ret
1622 ; CHECK_BE-LABEL: bitcast_nxv2f32_to_nxv2i32:
1623 ; CHECK_BE:       // %bb.0:
1624 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
1625 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
1626 ; CHECK_BE-NEXT:    ptrue p0.s
1627 ; CHECK_BE-NEXT:    ptrue p1.d
1628 ; CHECK_BE-NEXT:    st1w { z0.s }, p0, [sp]
1629 ; CHECK_BE-NEXT:    ld1d { z0.d }, p1/z, [sp]
1630 ; CHECK_BE-NEXT:    addvl sp, sp, #1
1631 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
1632 ; CHECK_BE-NEXT:    ret
1633   %bc = bitcast <vscale x 2 x float> %v to <vscale x 2 x i32>
1634   ret <vscale x 2 x i32> %bc
1637 define <vscale x 2 x i32> @bitcast_nxv1f64_to_nxv2i32(<vscale x 1 x double> %v) #0 {
1638 ; CHECK-LABEL: bitcast_nxv1f64_to_nxv2i32:
1639 ; CHECK:       // %bb.0:
1640 ; CHECK-NEXT:    uunpklo z0.d, z0.s
1641 ; CHECK-NEXT:    ret
1643 ; CHECK_BE-LABEL: bitcast_nxv1f64_to_nxv2i32:
1644 ; CHECK_BE:       // %bb.0:
1645 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
1646 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
1647 ; CHECK_BE-NEXT:    ptrue p0.d
1648 ; CHECK_BE-NEXT:    ptrue p1.s
1649 ; CHECK_BE-NEXT:    st1d { z0.d }, p0, [sp]
1650 ; CHECK_BE-NEXT:    ld1w { z0.s }, p1/z, [sp]
1651 ; CHECK_BE-NEXT:    uunpklo z0.d, z0.s
1652 ; CHECK_BE-NEXT:    addvl sp, sp, #1
1653 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
1654 ; CHECK_BE-NEXT:    ret
1655   %bc = bitcast <vscale x 1 x double> %v to <vscale x 2 x i32>
1656   ret <vscale x 2 x i32> %bc
1659 define <vscale x 2 x i32> @bitcast_nxv4bf16_to_nxv2i32(<vscale x 4 x bfloat> %v) #0 {
1660 ; CHECK-LABEL: bitcast_nxv4bf16_to_nxv2i32:
1661 ; CHECK:       // %bb.0:
1662 ; CHECK-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
1663 ; CHECK-NEXT:    addvl sp, sp, #-1
1664 ; CHECK-NEXT:    ptrue p0.s
1665 ; CHECK-NEXT:    ptrue p1.d
1666 ; CHECK-NEXT:    st1h { z0.s }, p0, [sp, #1, mul vl]
1667 ; CHECK-NEXT:    ld1w { z0.d }, p1/z, [sp, #1, mul vl]
1668 ; CHECK-NEXT:    addvl sp, sp, #1
1669 ; CHECK-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
1670 ; CHECK-NEXT:    ret
1672 ; CHECK_BE-LABEL: bitcast_nxv4bf16_to_nxv2i32:
1673 ; CHECK_BE:       // %bb.0:
1674 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
1675 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
1676 ; CHECK_BE-NEXT:    ptrue p0.s
1677 ; CHECK_BE-NEXT:    ptrue p1.d
1678 ; CHECK_BE-NEXT:    st1h { z0.s }, p0, [sp, #1, mul vl]
1679 ; CHECK_BE-NEXT:    ld1w { z0.d }, p1/z, [sp, #1, mul vl]
1680 ; CHECK_BE-NEXT:    addvl sp, sp, #1
1681 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
1682 ; CHECK_BE-NEXT:    ret
1683   %bc = bitcast <vscale x 4 x bfloat> %v to <vscale x 2 x i32>
1684   ret <vscale x 2 x i32> %bc
1688 ; bitcast to nxv1i64
1691 define <vscale x 1 x i64> @bitcast_nxv8i8_to_nxv1i64(<vscale x 8 x i8> %v) #0 {
1692 ; CHECK-LABEL: bitcast_nxv8i8_to_nxv1i64:
1693 ; CHECK:       // %bb.0:
1694 ; CHECK-NEXT:    uzp1 z0.b, z0.b, z0.b
1695 ; CHECK-NEXT:    ret
1697 ; CHECK_BE-LABEL: bitcast_nxv8i8_to_nxv1i64:
1698 ; CHECK_BE:       // %bb.0:
1699 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
1700 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
1701 ; CHECK_BE-NEXT:    uzp1 z0.b, z0.b, z0.b
1702 ; CHECK_BE-NEXT:    ptrue p0.b
1703 ; CHECK_BE-NEXT:    ptrue p1.d
1704 ; CHECK_BE-NEXT:    st1b { z0.b }, p0, [sp]
1705 ; CHECK_BE-NEXT:    ld1d { z0.d }, p1/z, [sp]
1706 ; CHECK_BE-NEXT:    addvl sp, sp, #1
1707 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
1708 ; CHECK_BE-NEXT:    ret
1709   %bc = bitcast <vscale x 8 x i8> %v to <vscale x 1 x i64>
1710   ret <vscale x 1 x i64> %bc
1713 define <vscale x 1 x i64> @bitcast_nxv4i16_to_nxv1i64(<vscale x 4 x i16> %v) #0 {
1714 ; CHECK-LABEL: bitcast_nxv4i16_to_nxv1i64:
1715 ; CHECK:       // %bb.0:
1716 ; CHECK-NEXT:    uzp1 z0.h, z0.h, z0.h
1717 ; CHECK-NEXT:    ret
1719 ; CHECK_BE-LABEL: bitcast_nxv4i16_to_nxv1i64:
1720 ; CHECK_BE:       // %bb.0:
1721 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
1722 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
1723 ; CHECK_BE-NEXT:    uzp1 z0.h, z0.h, z0.h
1724 ; CHECK_BE-NEXT:    ptrue p0.h
1725 ; CHECK_BE-NEXT:    ptrue p1.d
1726 ; CHECK_BE-NEXT:    st1h { z0.h }, p0, [sp]
1727 ; CHECK_BE-NEXT:    ld1d { z0.d }, p1/z, [sp]
1728 ; CHECK_BE-NEXT:    addvl sp, sp, #1
1729 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
1730 ; CHECK_BE-NEXT:    ret
1731   %bc = bitcast <vscale x 4 x i16> %v to <vscale x 1 x i64>
1732   ret <vscale x 1 x i64> %bc
1735 define <vscale x 1 x i64> @bitcast_nxv2i32_to_nxv1i64(<vscale x 2 x i32> %v) #0 {
1736 ; CHECK-LABEL: bitcast_nxv2i32_to_nxv1i64:
1737 ; CHECK:       // %bb.0:
1738 ; CHECK-NEXT:    uzp1 z0.s, z0.s, z0.s
1739 ; CHECK-NEXT:    ret
1741 ; CHECK_BE-LABEL: bitcast_nxv2i32_to_nxv1i64:
1742 ; CHECK_BE:       // %bb.0:
1743 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
1744 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
1745 ; CHECK_BE-NEXT:    uzp1 z0.s, z0.s, z0.s
1746 ; CHECK_BE-NEXT:    ptrue p0.s
1747 ; CHECK_BE-NEXT:    ptrue p1.d
1748 ; CHECK_BE-NEXT:    st1w { z0.s }, p0, [sp]
1749 ; CHECK_BE-NEXT:    ld1d { z0.d }, p1/z, [sp]
1750 ; CHECK_BE-NEXT:    addvl sp, sp, #1
1751 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
1752 ; CHECK_BE-NEXT:    ret
1753   %bc = bitcast <vscale x 2 x i32> %v to <vscale x 1 x i64>
1754   ret <vscale x 1 x i64> %bc
1757 define <vscale x 1 x i64> @bitcast_nxv4f16_to_nxv1i64(<vscale x 4 x half> %v) #0 {
1758 ; CHECK-LABEL: bitcast_nxv4f16_to_nxv1i64:
1759 ; CHECK:       // %bb.0:
1760 ; CHECK-NEXT:    uzp1 z0.h, z0.h, z0.h
1761 ; CHECK-NEXT:    ret
1763 ; CHECK_BE-LABEL: bitcast_nxv4f16_to_nxv1i64:
1764 ; CHECK_BE:       // %bb.0:
1765 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
1766 ; CHECK_BE-NEXT:    addvl sp, sp, #-3
1767 ; CHECK_BE-NEXT:    ptrue p0.h
1768 ; CHECK_BE-NEXT:    ptrue p1.s
1769 ; CHECK_BE-NEXT:    st1h { z0.h }, p0, [sp]
1770 ; CHECK_BE-NEXT:    ld1w { z0.s }, p1/z, [sp]
1771 ; CHECK_BE-NEXT:    ptrue p1.d
1772 ; CHECK_BE-NEXT:    uzp1 z0.h, z0.h, z0.h
1773 ; CHECK_BE-NEXT:    st1h { z0.h }, p0, [sp, #1, mul vl]
1774 ; CHECK_BE-NEXT:    ld1h { z0.h }, p0/z, [sp, #1, mul vl]
1775 ; CHECK_BE-NEXT:    st1h { z0.h }, p0, [sp, #2, mul vl]
1776 ; CHECK_BE-NEXT:    ld1d { z0.d }, p1/z, [sp, #2, mul vl]
1777 ; CHECK_BE-NEXT:    addvl sp, sp, #3
1778 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
1779 ; CHECK_BE-NEXT:    ret
1780   %bc = bitcast <vscale x 4 x half> %v to <vscale x 1 x i64>
1781   ret <vscale x 1 x i64> %bc
1784 define <vscale x 1 x i64> @bitcast_nxv2f32_to_nxv1i64(<vscale x 2 x float> %v) #0 {
1785 ; CHECK-LABEL: bitcast_nxv2f32_to_nxv1i64:
1786 ; CHECK:       // %bb.0:
1787 ; CHECK-NEXT:    uzp1 z0.s, z0.s, z0.s
1788 ; CHECK-NEXT:    ret
1790 ; CHECK_BE-LABEL: bitcast_nxv2f32_to_nxv1i64:
1791 ; CHECK_BE:       // %bb.0:
1792 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
1793 ; CHECK_BE-NEXT:    addvl sp, sp, #-3
1794 ; CHECK_BE-NEXT:    ptrue p0.s
1795 ; CHECK_BE-NEXT:    ptrue p1.d
1796 ; CHECK_BE-NEXT:    st1w { z0.s }, p0, [sp]
1797 ; CHECK_BE-NEXT:    ld1d { z0.d }, p1/z, [sp]
1798 ; CHECK_BE-NEXT:    uzp1 z0.s, z0.s, z0.s
1799 ; CHECK_BE-NEXT:    st1w { z0.s }, p0, [sp, #1, mul vl]
1800 ; CHECK_BE-NEXT:    ld1w { z0.s }, p0/z, [sp, #1, mul vl]
1801 ; CHECK_BE-NEXT:    st1w { z0.s }, p0, [sp, #2, mul vl]
1802 ; CHECK_BE-NEXT:    ld1d { z0.d }, p1/z, [sp, #2, mul vl]
1803 ; CHECK_BE-NEXT:    addvl sp, sp, #3
1804 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
1805 ; CHECK_BE-NEXT:    ret
1806   %bc = bitcast <vscale x 2 x float> %v to <vscale x 1 x i64>
1807   ret <vscale x 1 x i64> %bc
1810 define <vscale x 1 x i64> @bitcast_nxv1f64_to_nxv1i64(<vscale x 1 x double> %v) #0 {
1811 ; CHECK-LABEL: bitcast_nxv1f64_to_nxv1i64:
1812 ; CHECK:       // %bb.0:
1813 ; CHECK-NEXT:    ret
1815 ; CHECK_BE-LABEL: bitcast_nxv1f64_to_nxv1i64:
1816 ; CHECK_BE:       // %bb.0:
1817 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
1818 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
1819 ; CHECK_BE-NEXT:    ptrue p0.d
1820 ; CHECK_BE-NEXT:    st1d { z0.d }, p0, [sp]
1821 ; CHECK_BE-NEXT:    ld1d { z0.d }, p0/z, [sp]
1822 ; CHECK_BE-NEXT:    addvl sp, sp, #1
1823 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
1824 ; CHECK_BE-NEXT:    ret
1825   %bc = bitcast <vscale x 1 x double> %v to <vscale x 1 x i64>
1826   ret <vscale x 1 x i64> %bc
1829 define <vscale x 1 x i64> @bitcast_nxv4bf16_to_nxv1i64(<vscale x 4 x bfloat> %v) #0 {
1830 ; CHECK-LABEL: bitcast_nxv4bf16_to_nxv1i64:
1831 ; CHECK:       // %bb.0:
1832 ; CHECK-NEXT:    uzp1 z0.h, z0.h, z0.h
1833 ; CHECK-NEXT:    ret
1835 ; CHECK_BE-LABEL: bitcast_nxv4bf16_to_nxv1i64:
1836 ; CHECK_BE:       // %bb.0:
1837 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
1838 ; CHECK_BE-NEXT:    addvl sp, sp, #-3
1839 ; CHECK_BE-NEXT:    ptrue p0.h
1840 ; CHECK_BE-NEXT:    ptrue p1.s
1841 ; CHECK_BE-NEXT:    st1h { z0.h }, p0, [sp]
1842 ; CHECK_BE-NEXT:    ld1w { z0.s }, p1/z, [sp]
1843 ; CHECK_BE-NEXT:    ptrue p1.d
1844 ; CHECK_BE-NEXT:    uzp1 z0.h, z0.h, z0.h
1845 ; CHECK_BE-NEXT:    st1h { z0.h }, p0, [sp, #1, mul vl]
1846 ; CHECK_BE-NEXT:    ld1h { z0.h }, p0/z, [sp, #1, mul vl]
1847 ; CHECK_BE-NEXT:    st1h { z0.h }, p0, [sp, #2, mul vl]
1848 ; CHECK_BE-NEXT:    ld1d { z0.d }, p1/z, [sp, #2, mul vl]
1849 ; CHECK_BE-NEXT:    addvl sp, sp, #3
1850 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
1851 ; CHECK_BE-NEXT:    ret
1852   %bc = bitcast <vscale x 4 x bfloat> %v to <vscale x 1 x i64>
1853   ret <vscale x 1 x i64> %bc
1857 ; bitcast to nxv4f16
1860 define <vscale x 4 x half> @bitcast_nxv8i8_to_nxv4f16(<vscale x 8 x i8> %v) #0 {
1861 ; CHECK-LABEL: bitcast_nxv8i8_to_nxv4f16:
1862 ; CHECK:       // %bb.0:
1863 ; CHECK-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
1864 ; CHECK-NEXT:    addvl sp, sp, #-1
1865 ; CHECK-NEXT:    ptrue p0.h
1866 ; CHECK-NEXT:    ptrue p1.s
1867 ; CHECK-NEXT:    st1b { z0.h }, p0, [sp, #1, mul vl]
1868 ; CHECK-NEXT:    ld1h { z0.s }, p1/z, [sp, #1, mul vl]
1869 ; CHECK-NEXT:    addvl sp, sp, #1
1870 ; CHECK-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
1871 ; CHECK-NEXT:    ret
1873 ; CHECK_BE-LABEL: bitcast_nxv8i8_to_nxv4f16:
1874 ; CHECK_BE:       // %bb.0:
1875 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
1876 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
1877 ; CHECK_BE-NEXT:    ptrue p0.h
1878 ; CHECK_BE-NEXT:    ptrue p1.s
1879 ; CHECK_BE-NEXT:    st1b { z0.h }, p0, [sp, #1, mul vl]
1880 ; CHECK_BE-NEXT:    ld1h { z0.s }, p1/z, [sp, #1, mul vl]
1881 ; CHECK_BE-NEXT:    addvl sp, sp, #1
1882 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
1883 ; CHECK_BE-NEXT:    ret
1884   %bc = bitcast <vscale x 8 x i8> %v to <vscale x 4 x half>
1885   ret <vscale x 4 x half> %bc
1888 define <vscale x 4 x half> @bitcast_nxv4i16_to_nxv4f16(<vscale x 4 x i16> %v) #0 {
1889 ; CHECK-LABEL: bitcast_nxv4i16_to_nxv4f16:
1890 ; CHECK:       // %bb.0:
1891 ; CHECK-NEXT:    ret
1893 ; CHECK_BE-LABEL: bitcast_nxv4i16_to_nxv4f16:
1894 ; CHECK_BE:       // %bb.0:
1895 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
1896 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
1897 ; CHECK_BE-NEXT:    ptrue p0.s
1898 ; CHECK_BE-NEXT:    ptrue p1.h
1899 ; CHECK_BE-NEXT:    st1w { z0.s }, p0, [sp]
1900 ; CHECK_BE-NEXT:    ld1h { z0.h }, p1/z, [sp]
1901 ; CHECK_BE-NEXT:    addvl sp, sp, #1
1902 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
1903 ; CHECK_BE-NEXT:    ret
1904   %bc = bitcast <vscale x 4 x i16> %v to <vscale x 4 x half>
1905   ret <vscale x 4 x half> %bc
1908 define <vscale x 4 x half> @bitcast_nxv2i32_to_nxv4f16(<vscale x 2 x i32> %v) #0 {
1909 ; CHECK-LABEL: bitcast_nxv2i32_to_nxv4f16:
1910 ; CHECK:       // %bb.0:
1911 ; CHECK-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
1912 ; CHECK-NEXT:    addvl sp, sp, #-1
1913 ; CHECK-NEXT:    ptrue p0.d
1914 ; CHECK-NEXT:    ptrue p1.s
1915 ; CHECK-NEXT:    st1w { z0.d }, p0, [sp, #1, mul vl]
1916 ; CHECK-NEXT:    ld1h { z0.s }, p1/z, [sp, #1, mul vl]
1917 ; CHECK-NEXT:    addvl sp, sp, #1
1918 ; CHECK-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
1919 ; CHECK-NEXT:    ret
1921 ; CHECK_BE-LABEL: bitcast_nxv2i32_to_nxv4f16:
1922 ; CHECK_BE:       // %bb.0:
1923 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
1924 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
1925 ; CHECK_BE-NEXT:    ptrue p0.d
1926 ; CHECK_BE-NEXT:    ptrue p1.s
1927 ; CHECK_BE-NEXT:    st1w { z0.d }, p0, [sp, #1, mul vl]
1928 ; CHECK_BE-NEXT:    ld1h { z0.s }, p1/z, [sp, #1, mul vl]
1929 ; CHECK_BE-NEXT:    addvl sp, sp, #1
1930 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
1931 ; CHECK_BE-NEXT:    ret
1932   %bc = bitcast <vscale x 2 x i32> %v to <vscale x 4 x half>
1933   ret <vscale x 4 x half> %bc
1936 define <vscale x 4 x half> @bitcast_nxv1i64_to_nxv4f16(<vscale x 1 x i64> %v) #0 {
1937 ; CHECK-LABEL: bitcast_nxv1i64_to_nxv4f16:
1938 ; CHECK:       // %bb.0:
1939 ; CHECK-NEXT:    uunpklo z0.s, z0.h
1940 ; CHECK-NEXT:    ret
1942 ; CHECK_BE-LABEL: bitcast_nxv1i64_to_nxv4f16:
1943 ; CHECK_BE:       // %bb.0:
1944 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
1945 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
1946 ; CHECK_BE-NEXT:    ptrue p0.d
1947 ; CHECK_BE-NEXT:    ptrue p1.h
1948 ; CHECK_BE-NEXT:    st1d { z0.d }, p0, [sp]
1949 ; CHECK_BE-NEXT:    ld1h { z0.h }, p1/z, [sp]
1950 ; CHECK_BE-NEXT:    uunpklo z0.s, z0.h
1951 ; CHECK_BE-NEXT:    addvl sp, sp, #1
1952 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
1953 ; CHECK_BE-NEXT:    ret
1954   %bc = bitcast <vscale x 1 x i64> %v to <vscale x 4 x half>
1955   ret <vscale x 4 x half> %bc
1958 define <vscale x 4 x half> @bitcast_nxv2f32_to_nxv4f16(<vscale x 2 x float> %v) #0 {
1959 ; CHECK-LABEL: bitcast_nxv2f32_to_nxv4f16:
1960 ; CHECK:       // %bb.0:
1961 ; CHECK-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
1962 ; CHECK-NEXT:    addvl sp, sp, #-1
1963 ; CHECK-NEXT:    ptrue p0.d
1964 ; CHECK-NEXT:    ptrue p1.s
1965 ; CHECK-NEXT:    st1w { z0.d }, p0, [sp, #1, mul vl]
1966 ; CHECK-NEXT:    ld1h { z0.s }, p1/z, [sp, #1, mul vl]
1967 ; CHECK-NEXT:    addvl sp, sp, #1
1968 ; CHECK-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
1969 ; CHECK-NEXT:    ret
1971 ; CHECK_BE-LABEL: bitcast_nxv2f32_to_nxv4f16:
1972 ; CHECK_BE:       // %bb.0:
1973 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
1974 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
1975 ; CHECK_BE-NEXT:    ptrue p0.d
1976 ; CHECK_BE-NEXT:    ptrue p1.s
1977 ; CHECK_BE-NEXT:    st1w { z0.d }, p0, [sp, #1, mul vl]
1978 ; CHECK_BE-NEXT:    ld1h { z0.s }, p1/z, [sp, #1, mul vl]
1979 ; CHECK_BE-NEXT:    addvl sp, sp, #1
1980 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
1981 ; CHECK_BE-NEXT:    ret
1982   %bc = bitcast <vscale x 2 x float> %v to <vscale x 4 x half>
1983   ret <vscale x 4 x half> %bc
1986 define <vscale x 4 x half> @bitcast_nxv1f64_to_nxv4f16(<vscale x 1 x double> %v) #0 {
1987 ; CHECK-LABEL: bitcast_nxv1f64_to_nxv4f16:
1988 ; CHECK:       // %bb.0:
1989 ; CHECK-NEXT:    uunpklo z0.s, z0.h
1990 ; CHECK-NEXT:    ret
1992 ; CHECK_BE-LABEL: bitcast_nxv1f64_to_nxv4f16:
1993 ; CHECK_BE:       // %bb.0:
1994 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
1995 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
1996 ; CHECK_BE-NEXT:    ptrue p0.d
1997 ; CHECK_BE-NEXT:    ptrue p1.h
1998 ; CHECK_BE-NEXT:    st1d { z0.d }, p0, [sp]
1999 ; CHECK_BE-NEXT:    ld1h { z0.h }, p1/z, [sp]
2000 ; CHECK_BE-NEXT:    uunpklo z0.s, z0.h
2001 ; CHECK_BE-NEXT:    addvl sp, sp, #1
2002 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
2003 ; CHECK_BE-NEXT:    ret
2004   %bc = bitcast <vscale x 1 x double> %v to <vscale x 4 x half>
2005   ret <vscale x 4 x half> %bc
2008 define <vscale x 4 x half> @bitcast_nxv4bf16_to_nxv4f16(<vscale x 4 x bfloat> %v) #0 {
2009 ; CHECK-LABEL: bitcast_nxv4bf16_to_nxv4f16:
2010 ; CHECK:       // %bb.0:
2011 ; CHECK-NEXT:    ret
2013 ; CHECK_BE-LABEL: bitcast_nxv4bf16_to_nxv4f16:
2014 ; CHECK_BE:       // %bb.0:
2015 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
2016 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
2017 ; CHECK_BE-NEXT:    ptrue p0.s
2018 ; CHECK_BE-NEXT:    st1h { z0.s }, p0, [sp, #1, mul vl]
2019 ; CHECK_BE-NEXT:    ld1h { z0.s }, p0/z, [sp, #1, mul vl]
2020 ; CHECK_BE-NEXT:    addvl sp, sp, #1
2021 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
2022 ; CHECK_BE-NEXT:    ret
2023   %bc = bitcast <vscale x 4 x bfloat> %v to <vscale x 4 x half>
2024   ret <vscale x 4 x half> %bc
2028 ; bitcast to nxv2f32
2031 define <vscale x 2 x float> @bitcast_nxv8i8_to_nxv2f32(<vscale x 8 x i8> %v) #0 {
2032 ; CHECK-LABEL: bitcast_nxv8i8_to_nxv2f32:
2033 ; CHECK:       // %bb.0:
2034 ; CHECK-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
2035 ; CHECK-NEXT:    addvl sp, sp, #-1
2036 ; CHECK-NEXT:    ptrue p0.h
2037 ; CHECK-NEXT:    ptrue p1.d
2038 ; CHECK-NEXT:    st1b { z0.h }, p0, [sp, #1, mul vl]
2039 ; CHECK-NEXT:    ld1w { z0.d }, p1/z, [sp, #1, mul vl]
2040 ; CHECK-NEXT:    addvl sp, sp, #1
2041 ; CHECK-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
2042 ; CHECK-NEXT:    ret
2044 ; CHECK_BE-LABEL: bitcast_nxv8i8_to_nxv2f32:
2045 ; CHECK_BE:       // %bb.0:
2046 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
2047 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
2048 ; CHECK_BE-NEXT:    ptrue p0.h
2049 ; CHECK_BE-NEXT:    ptrue p1.d
2050 ; CHECK_BE-NEXT:    st1b { z0.h }, p0, [sp, #1, mul vl]
2051 ; CHECK_BE-NEXT:    ld1w { z0.d }, p1/z, [sp, #1, mul vl]
2052 ; CHECK_BE-NEXT:    addvl sp, sp, #1
2053 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
2054 ; CHECK_BE-NEXT:    ret
2055   %bc = bitcast <vscale x 8 x i8> %v to <vscale x 2 x float>
2056   ret <vscale x 2 x float> %bc
2059 define <vscale x 2 x float> @bitcast_nxv4i16_to_nxv2f32(<vscale x 4 x i16> %v) #0 {
2060 ; CHECK-LABEL: bitcast_nxv4i16_to_nxv2f32:
2061 ; CHECK:       // %bb.0:
2062 ; CHECK-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
2063 ; CHECK-NEXT:    addvl sp, sp, #-1
2064 ; CHECK-NEXT:    ptrue p0.s
2065 ; CHECK-NEXT:    ptrue p1.d
2066 ; CHECK-NEXT:    st1h { z0.s }, p0, [sp, #1, mul vl]
2067 ; CHECK-NEXT:    ld1w { z0.d }, p1/z, [sp, #1, mul vl]
2068 ; CHECK-NEXT:    addvl sp, sp, #1
2069 ; CHECK-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
2070 ; CHECK-NEXT:    ret
2072 ; CHECK_BE-LABEL: bitcast_nxv4i16_to_nxv2f32:
2073 ; CHECK_BE:       // %bb.0:
2074 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
2075 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
2076 ; CHECK_BE-NEXT:    ptrue p0.s
2077 ; CHECK_BE-NEXT:    ptrue p1.d
2078 ; CHECK_BE-NEXT:    st1h { z0.s }, p0, [sp, #1, mul vl]
2079 ; CHECK_BE-NEXT:    ld1w { z0.d }, p1/z, [sp, #1, mul vl]
2080 ; CHECK_BE-NEXT:    addvl sp, sp, #1
2081 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
2082 ; CHECK_BE-NEXT:    ret
2083   %bc = bitcast <vscale x 4 x i16> %v to <vscale x 2 x float>
2084   ret <vscale x 2 x float> %bc
2087 define <vscale x 2 x float> @bitcast_nxv2i32_to_nxv2f32(<vscale x 2 x i32> %v) #0 {
2088 ; CHECK-LABEL: bitcast_nxv2i32_to_nxv2f32:
2089 ; CHECK:       // %bb.0:
2090 ; CHECK-NEXT:    ret
2092 ; CHECK_BE-LABEL: bitcast_nxv2i32_to_nxv2f32:
2093 ; CHECK_BE:       // %bb.0:
2094 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
2095 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
2096 ; CHECK_BE-NEXT:    ptrue p0.d
2097 ; CHECK_BE-NEXT:    ptrue p1.s
2098 ; CHECK_BE-NEXT:    st1d { z0.d }, p0, [sp]
2099 ; CHECK_BE-NEXT:    ld1w { z0.s }, p1/z, [sp]
2100 ; CHECK_BE-NEXT:    addvl sp, sp, #1
2101 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
2102 ; CHECK_BE-NEXT:    ret
2103   %bc = bitcast <vscale x 2 x i32> %v to <vscale x 2 x float>
2104   ret <vscale x 2 x float> %bc
2107 define <vscale x 2 x float> @bitcast_nxv1i64_to_nxv2f32(<vscale x 1 x i64> %v) #0 {
2108 ; CHECK-LABEL: bitcast_nxv1i64_to_nxv2f32:
2109 ; CHECK:       // %bb.0:
2110 ; CHECK-NEXT:    uunpklo z0.d, z0.s
2111 ; CHECK-NEXT:    ret
2113 ; CHECK_BE-LABEL: bitcast_nxv1i64_to_nxv2f32:
2114 ; CHECK_BE:       // %bb.0:
2115 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
2116 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
2117 ; CHECK_BE-NEXT:    ptrue p0.d
2118 ; CHECK_BE-NEXT:    ptrue p1.s
2119 ; CHECK_BE-NEXT:    st1d { z0.d }, p0, [sp]
2120 ; CHECK_BE-NEXT:    ld1w { z0.s }, p1/z, [sp]
2121 ; CHECK_BE-NEXT:    uunpklo z0.d, z0.s
2122 ; CHECK_BE-NEXT:    addvl sp, sp, #1
2123 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
2124 ; CHECK_BE-NEXT:    ret
2125   %bc = bitcast <vscale x 1 x i64> %v to <vscale x 2 x float>
2126   ret <vscale x 2 x float> %bc
2129 define <vscale x 2 x float> @bitcast_nxv4f16_to_nxv2f32(<vscale x 4 x half> %v) #0 {
2130 ; CHECK-LABEL: bitcast_nxv4f16_to_nxv2f32:
2131 ; CHECK:       // %bb.0:
2132 ; CHECK-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
2133 ; CHECK-NEXT:    addvl sp, sp, #-1
2134 ; CHECK-NEXT:    ptrue p0.s
2135 ; CHECK-NEXT:    ptrue p1.d
2136 ; CHECK-NEXT:    st1h { z0.s }, p0, [sp, #1, mul vl]
2137 ; CHECK-NEXT:    ld1w { z0.d }, p1/z, [sp, #1, mul vl]
2138 ; CHECK-NEXT:    addvl sp, sp, #1
2139 ; CHECK-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
2140 ; CHECK-NEXT:    ret
2142 ; CHECK_BE-LABEL: bitcast_nxv4f16_to_nxv2f32:
2143 ; CHECK_BE:       // %bb.0:
2144 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
2145 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
2146 ; CHECK_BE-NEXT:    ptrue p0.s
2147 ; CHECK_BE-NEXT:    ptrue p1.d
2148 ; CHECK_BE-NEXT:    st1h { z0.s }, p0, [sp, #1, mul vl]
2149 ; CHECK_BE-NEXT:    ld1w { z0.d }, p1/z, [sp, #1, mul vl]
2150 ; CHECK_BE-NEXT:    addvl sp, sp, #1
2151 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
2152 ; CHECK_BE-NEXT:    ret
2153   %bc = bitcast <vscale x 4 x half> %v to <vscale x 2 x float>
2154   ret <vscale x 2 x float> %bc
2157 define <vscale x 2 x float> @bitcast_nxv1f64_to_nxv2f32(<vscale x 1 x double> %v) #0 {
2158 ; CHECK-LABEL: bitcast_nxv1f64_to_nxv2f32:
2159 ; CHECK:       // %bb.0:
2160 ; CHECK-NEXT:    uunpklo z0.d, z0.s
2161 ; CHECK-NEXT:    ret
2163 ; CHECK_BE-LABEL: bitcast_nxv1f64_to_nxv2f32:
2164 ; CHECK_BE:       // %bb.0:
2165 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
2166 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
2167 ; CHECK_BE-NEXT:    ptrue p0.d
2168 ; CHECK_BE-NEXT:    ptrue p1.s
2169 ; CHECK_BE-NEXT:    st1d { z0.d }, p0, [sp]
2170 ; CHECK_BE-NEXT:    ld1w { z0.s }, p1/z, [sp]
2171 ; CHECK_BE-NEXT:    uunpklo z0.d, z0.s
2172 ; CHECK_BE-NEXT:    addvl sp, sp, #1
2173 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
2174 ; CHECK_BE-NEXT:    ret
2175   %bc = bitcast <vscale x 1 x double> %v to <vscale x 2 x float>
2176   ret <vscale x 2 x float> %bc
2179 define <vscale x 2 x float> @bitcast_nxv4bf16_to_nxv2f32(<vscale x 4 x bfloat> %v) #0 {
2180 ; CHECK-LABEL: bitcast_nxv4bf16_to_nxv2f32:
2181 ; CHECK:       // %bb.0:
2182 ; CHECK-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
2183 ; CHECK-NEXT:    addvl sp, sp, #-1
2184 ; CHECK-NEXT:    ptrue p0.s
2185 ; CHECK-NEXT:    ptrue p1.d
2186 ; CHECK-NEXT:    st1h { z0.s }, p0, [sp, #1, mul vl]
2187 ; CHECK-NEXT:    ld1w { z0.d }, p1/z, [sp, #1, mul vl]
2188 ; CHECK-NEXT:    addvl sp, sp, #1
2189 ; CHECK-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
2190 ; CHECK-NEXT:    ret
2192 ; CHECK_BE-LABEL: bitcast_nxv4bf16_to_nxv2f32:
2193 ; CHECK_BE:       // %bb.0:
2194 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
2195 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
2196 ; CHECK_BE-NEXT:    ptrue p0.s
2197 ; CHECK_BE-NEXT:    ptrue p1.d
2198 ; CHECK_BE-NEXT:    st1h { z0.s }, p0, [sp, #1, mul vl]
2199 ; CHECK_BE-NEXT:    ld1w { z0.d }, p1/z, [sp, #1, mul vl]
2200 ; CHECK_BE-NEXT:    addvl sp, sp, #1
2201 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
2202 ; CHECK_BE-NEXT:    ret
2203   %bc = bitcast <vscale x 4 x bfloat> %v to <vscale x 2 x float>
2204   ret <vscale x 2 x float> %bc
2208 ; bitcast to nxv1f64
2211 define <vscale x 1 x double> @bitcast_nxv8i8_to_nxv1f64(<vscale x 8 x i8> %v) #0 {
2212 ; CHECK-LABEL: bitcast_nxv8i8_to_nxv1f64:
2213 ; CHECK:       // %bb.0:
2214 ; CHECK-NEXT:    uzp1 z0.b, z0.b, z0.b
2215 ; CHECK-NEXT:    ret
2217 ; CHECK_BE-LABEL: bitcast_nxv8i8_to_nxv1f64:
2218 ; CHECK_BE:       // %bb.0:
2219 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
2220 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
2221 ; CHECK_BE-NEXT:    uzp1 z0.b, z0.b, z0.b
2222 ; CHECK_BE-NEXT:    ptrue p0.b
2223 ; CHECK_BE-NEXT:    ptrue p1.d
2224 ; CHECK_BE-NEXT:    st1b { z0.b }, p0, [sp]
2225 ; CHECK_BE-NEXT:    ld1d { z0.d }, p1/z, [sp]
2226 ; CHECK_BE-NEXT:    addvl sp, sp, #1
2227 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
2228 ; CHECK_BE-NEXT:    ret
2229   %bc = bitcast <vscale x 8 x i8> %v to <vscale x 1 x double>
2230   ret <vscale x 1 x double> %bc
2233 define <vscale x 1 x double> @bitcast_nxv4i16_to_nxv1f64(<vscale x 4 x i16> %v) #0 {
2234 ; CHECK-LABEL: bitcast_nxv4i16_to_nxv1f64:
2235 ; CHECK:       // %bb.0:
2236 ; CHECK-NEXT:    uzp1 z0.h, z0.h, z0.h
2237 ; CHECK-NEXT:    ret
2239 ; CHECK_BE-LABEL: bitcast_nxv4i16_to_nxv1f64:
2240 ; CHECK_BE:       // %bb.0:
2241 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
2242 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
2243 ; CHECK_BE-NEXT:    uzp1 z0.h, z0.h, z0.h
2244 ; CHECK_BE-NEXT:    ptrue p0.h
2245 ; CHECK_BE-NEXT:    ptrue p1.d
2246 ; CHECK_BE-NEXT:    st1h { z0.h }, p0, [sp]
2247 ; CHECK_BE-NEXT:    ld1d { z0.d }, p1/z, [sp]
2248 ; CHECK_BE-NEXT:    addvl sp, sp, #1
2249 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
2250 ; CHECK_BE-NEXT:    ret
2251   %bc = bitcast <vscale x 4 x i16> %v to <vscale x 1 x double>
2252   ret <vscale x 1 x double> %bc
2255 define <vscale x 1 x double> @bitcast_nxv2i32_to_nxv1f64(<vscale x 2 x i32> %v) #0 {
2256 ; CHECK-LABEL: bitcast_nxv2i32_to_nxv1f64:
2257 ; CHECK:       // %bb.0:
2258 ; CHECK-NEXT:    uzp1 z0.s, z0.s, z0.s
2259 ; CHECK-NEXT:    ret
2261 ; CHECK_BE-LABEL: bitcast_nxv2i32_to_nxv1f64:
2262 ; CHECK_BE:       // %bb.0:
2263 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
2264 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
2265 ; CHECK_BE-NEXT:    uzp1 z0.s, z0.s, z0.s
2266 ; CHECK_BE-NEXT:    ptrue p0.s
2267 ; CHECK_BE-NEXT:    ptrue p1.d
2268 ; CHECK_BE-NEXT:    st1w { z0.s }, p0, [sp]
2269 ; CHECK_BE-NEXT:    ld1d { z0.d }, p1/z, [sp]
2270 ; CHECK_BE-NEXT:    addvl sp, sp, #1
2271 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
2272 ; CHECK_BE-NEXT:    ret
2273   %bc = bitcast <vscale x 2 x i32> %v to <vscale x 1 x double>
2274   ret <vscale x 1 x double> %bc
2277 define <vscale x 1 x double> @bitcast_nxv1i64_to_nxv1f64(<vscale x 1 x i64> %v) #0 {
2278 ; CHECK-LABEL: bitcast_nxv1i64_to_nxv1f64:
2279 ; CHECK:       // %bb.0:
2280 ; CHECK-NEXT:    ret
2282 ; CHECK_BE-LABEL: bitcast_nxv1i64_to_nxv1f64:
2283 ; CHECK_BE:       // %bb.0:
2284 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
2285 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
2286 ; CHECK_BE-NEXT:    ptrue p0.d
2287 ; CHECK_BE-NEXT:    st1d { z0.d }, p0, [sp]
2288 ; CHECK_BE-NEXT:    ld1d { z0.d }, p0/z, [sp]
2289 ; CHECK_BE-NEXT:    addvl sp, sp, #1
2290 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
2291 ; CHECK_BE-NEXT:    ret
2292   %bc = bitcast <vscale x 1 x i64> %v to <vscale x 1 x double>
2293   ret <vscale x 1 x double> %bc
2296 define <vscale x 1 x double> @bitcast_nxv4f16_to_nxv1f64(<vscale x 4 x half> %v) #0 {
2297 ; CHECK-LABEL: bitcast_nxv4f16_to_nxv1f64:
2298 ; CHECK:       // %bb.0:
2299 ; CHECK-NEXT:    uzp1 z0.h, z0.h, z0.h
2300 ; CHECK-NEXT:    ret
2302 ; CHECK_BE-LABEL: bitcast_nxv4f16_to_nxv1f64:
2303 ; CHECK_BE:       // %bb.0:
2304 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
2305 ; CHECK_BE-NEXT:    addvl sp, sp, #-3
2306 ; CHECK_BE-NEXT:    ptrue p0.h
2307 ; CHECK_BE-NEXT:    ptrue p1.s
2308 ; CHECK_BE-NEXT:    st1h { z0.h }, p0, [sp]
2309 ; CHECK_BE-NEXT:    ld1w { z0.s }, p1/z, [sp]
2310 ; CHECK_BE-NEXT:    ptrue p1.d
2311 ; CHECK_BE-NEXT:    uzp1 z0.h, z0.h, z0.h
2312 ; CHECK_BE-NEXT:    st1h { z0.h }, p0, [sp, #1, mul vl]
2313 ; CHECK_BE-NEXT:    ld1h { z0.h }, p0/z, [sp, #1, mul vl]
2314 ; CHECK_BE-NEXT:    st1h { z0.h }, p0, [sp, #2, mul vl]
2315 ; CHECK_BE-NEXT:    ld1d { z0.d }, p1/z, [sp, #2, mul vl]
2316 ; CHECK_BE-NEXT:    addvl sp, sp, #3
2317 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
2318 ; CHECK_BE-NEXT:    ret
2319   %bc = bitcast <vscale x 4 x half> %v to <vscale x 1 x double>
2320   ret <vscale x 1 x double> %bc
2323 define <vscale x 1 x double> @bitcast_nxv2f32_to_nxv1f64(<vscale x 2 x float> %v) #0 {
2324 ; CHECK-LABEL: bitcast_nxv2f32_to_nxv1f64:
2325 ; CHECK:       // %bb.0:
2326 ; CHECK-NEXT:    uzp1 z0.s, z0.s, z0.s
2327 ; CHECK-NEXT:    ret
2329 ; CHECK_BE-LABEL: bitcast_nxv2f32_to_nxv1f64:
2330 ; CHECK_BE:       // %bb.0:
2331 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
2332 ; CHECK_BE-NEXT:    addvl sp, sp, #-3
2333 ; CHECK_BE-NEXT:    ptrue p0.s
2334 ; CHECK_BE-NEXT:    ptrue p1.d
2335 ; CHECK_BE-NEXT:    st1w { z0.s }, p0, [sp]
2336 ; CHECK_BE-NEXT:    ld1d { z0.d }, p1/z, [sp]
2337 ; CHECK_BE-NEXT:    uzp1 z0.s, z0.s, z0.s
2338 ; CHECK_BE-NEXT:    st1w { z0.s }, p0, [sp, #1, mul vl]
2339 ; CHECK_BE-NEXT:    ld1w { z0.s }, p0/z, [sp, #1, mul vl]
2340 ; CHECK_BE-NEXT:    st1w { z0.s }, p0, [sp, #2, mul vl]
2341 ; CHECK_BE-NEXT:    ld1d { z0.d }, p1/z, [sp, #2, mul vl]
2342 ; CHECK_BE-NEXT:    addvl sp, sp, #3
2343 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
2344 ; CHECK_BE-NEXT:    ret
2345   %bc = bitcast <vscale x 2 x float> %v to <vscale x 1 x double>
2346   ret <vscale x 1 x double> %bc
2349 define <vscale x 1 x double> @bitcast_nxv4bf16_to_nxv1f64(<vscale x 4 x bfloat> %v) #0 {
2350 ; CHECK-LABEL: bitcast_nxv4bf16_to_nxv1f64:
2351 ; CHECK:       // %bb.0:
2352 ; CHECK-NEXT:    uzp1 z0.h, z0.h, z0.h
2353 ; CHECK-NEXT:    ret
2355 ; CHECK_BE-LABEL: bitcast_nxv4bf16_to_nxv1f64:
2356 ; CHECK_BE:       // %bb.0:
2357 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
2358 ; CHECK_BE-NEXT:    addvl sp, sp, #-3
2359 ; CHECK_BE-NEXT:    ptrue p0.h
2360 ; CHECK_BE-NEXT:    ptrue p1.s
2361 ; CHECK_BE-NEXT:    st1h { z0.h }, p0, [sp]
2362 ; CHECK_BE-NEXT:    ld1w { z0.s }, p1/z, [sp]
2363 ; CHECK_BE-NEXT:    ptrue p1.d
2364 ; CHECK_BE-NEXT:    uzp1 z0.h, z0.h, z0.h
2365 ; CHECK_BE-NEXT:    st1h { z0.h }, p0, [sp, #1, mul vl]
2366 ; CHECK_BE-NEXT:    ld1h { z0.h }, p0/z, [sp, #1, mul vl]
2367 ; CHECK_BE-NEXT:    st1h { z0.h }, p0, [sp, #2, mul vl]
2368 ; CHECK_BE-NEXT:    ld1d { z0.d }, p1/z, [sp, #2, mul vl]
2369 ; CHECK_BE-NEXT:    addvl sp, sp, #3
2370 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
2371 ; CHECK_BE-NEXT:    ret
2372   %bc = bitcast <vscale x 4 x bfloat> %v to <vscale x 1 x double>
2373   ret <vscale x 1 x double> %bc
2377 ; bitcast to nxv4bf16
2380 define <vscale x 4 x bfloat> @bitcast_nxv8i8_to_nxv4bf16(<vscale x 8 x i8> %v) #0 {
2381 ; CHECK-LABEL: bitcast_nxv8i8_to_nxv4bf16:
2382 ; CHECK:       // %bb.0:
2383 ; CHECK-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
2384 ; CHECK-NEXT:    addvl sp, sp, #-1
2385 ; CHECK-NEXT:    ptrue p0.h
2386 ; CHECK-NEXT:    ptrue p1.s
2387 ; CHECK-NEXT:    st1b { z0.h }, p0, [sp, #1, mul vl]
2388 ; CHECK-NEXT:    ld1h { z0.s }, p1/z, [sp, #1, mul vl]
2389 ; CHECK-NEXT:    addvl sp, sp, #1
2390 ; CHECK-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
2391 ; CHECK-NEXT:    ret
2393 ; CHECK_BE-LABEL: bitcast_nxv8i8_to_nxv4bf16:
2394 ; CHECK_BE:       // %bb.0:
2395 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
2396 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
2397 ; CHECK_BE-NEXT:    ptrue p0.h
2398 ; CHECK_BE-NEXT:    ptrue p1.s
2399 ; CHECK_BE-NEXT:    st1b { z0.h }, p0, [sp, #1, mul vl]
2400 ; CHECK_BE-NEXT:    ld1h { z0.s }, p1/z, [sp, #1, mul vl]
2401 ; CHECK_BE-NEXT:    addvl sp, sp, #1
2402 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
2403 ; CHECK_BE-NEXT:    ret
2404   %bc = bitcast <vscale x 8 x i8> %v to <vscale x 4 x bfloat>
2405   ret <vscale x 4 x bfloat> %bc
2408 define <vscale x 4 x bfloat> @bitcast_nxv4i16_to_nxv4bf16(<vscale x 4 x i16> %v) #0 {
2409 ; CHECK-LABEL: bitcast_nxv4i16_to_nxv4bf16:
2410 ; CHECK:       // %bb.0:
2411 ; CHECK-NEXT:    ret
2413 ; CHECK_BE-LABEL: bitcast_nxv4i16_to_nxv4bf16:
2414 ; CHECK_BE:       // %bb.0:
2415 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
2416 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
2417 ; CHECK_BE-NEXT:    ptrue p0.s
2418 ; CHECK_BE-NEXT:    ptrue p1.h
2419 ; CHECK_BE-NEXT:    st1w { z0.s }, p0, [sp]
2420 ; CHECK_BE-NEXT:    ld1h { z0.h }, p1/z, [sp]
2421 ; CHECK_BE-NEXT:    addvl sp, sp, #1
2422 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
2423 ; CHECK_BE-NEXT:    ret
2424   %bc = bitcast <vscale x 4 x i16> %v to <vscale x 4 x bfloat>
2425   ret <vscale x 4 x bfloat> %bc
2428 define <vscale x 4 x bfloat> @bitcast_nxv2i32_to_nxv4bf16(<vscale x 2 x i32> %v) #0 {
2429 ; CHECK-LABEL: bitcast_nxv2i32_to_nxv4bf16:
2430 ; CHECK:       // %bb.0:
2431 ; CHECK-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
2432 ; CHECK-NEXT:    addvl sp, sp, #-1
2433 ; CHECK-NEXT:    ptrue p0.d
2434 ; CHECK-NEXT:    ptrue p1.s
2435 ; CHECK-NEXT:    st1w { z0.d }, p0, [sp, #1, mul vl]
2436 ; CHECK-NEXT:    ld1h { z0.s }, p1/z, [sp, #1, mul vl]
2437 ; CHECK-NEXT:    addvl sp, sp, #1
2438 ; CHECK-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
2439 ; CHECK-NEXT:    ret
2441 ; CHECK_BE-LABEL: bitcast_nxv2i32_to_nxv4bf16:
2442 ; CHECK_BE:       // %bb.0:
2443 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
2444 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
2445 ; CHECK_BE-NEXT:    ptrue p0.d
2446 ; CHECK_BE-NEXT:    ptrue p1.s
2447 ; CHECK_BE-NEXT:    st1w { z0.d }, p0, [sp, #1, mul vl]
2448 ; CHECK_BE-NEXT:    ld1h { z0.s }, p1/z, [sp, #1, mul vl]
2449 ; CHECK_BE-NEXT:    addvl sp, sp, #1
2450 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
2451 ; CHECK_BE-NEXT:    ret
2452   %bc = bitcast <vscale x 2 x i32> %v to <vscale x 4 x bfloat>
2453   ret <vscale x 4 x bfloat> %bc
2456 define <vscale x 4 x bfloat> @bitcast_nxv1i64_to_nxv4bf16(<vscale x 1 x i64> %v) #0 {
2457 ; CHECK-LABEL: bitcast_nxv1i64_to_nxv4bf16:
2458 ; CHECK:       // %bb.0:
2459 ; CHECK-NEXT:    uunpklo z0.s, z0.h
2460 ; CHECK-NEXT:    ret
2462 ; CHECK_BE-LABEL: bitcast_nxv1i64_to_nxv4bf16:
2463 ; CHECK_BE:       // %bb.0:
2464 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
2465 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
2466 ; CHECK_BE-NEXT:    ptrue p0.d
2467 ; CHECK_BE-NEXT:    ptrue p1.h
2468 ; CHECK_BE-NEXT:    st1d { z0.d }, p0, [sp]
2469 ; CHECK_BE-NEXT:    ld1h { z0.h }, p1/z, [sp]
2470 ; CHECK_BE-NEXT:    uunpklo z0.s, z0.h
2471 ; CHECK_BE-NEXT:    addvl sp, sp, #1
2472 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
2473 ; CHECK_BE-NEXT:    ret
2474   %bc = bitcast <vscale x 1 x i64> %v to <vscale x 4 x bfloat>
2475   ret <vscale x 4 x bfloat> %bc
2478 define <vscale x 4 x bfloat> @bitcast_nxv4f16_to_nxv4bf16(<vscale x 4 x half> %v) #0 {
2479 ; CHECK-LABEL: bitcast_nxv4f16_to_nxv4bf16:
2480 ; CHECK:       // %bb.0:
2481 ; CHECK-NEXT:    ret
2483 ; CHECK_BE-LABEL: bitcast_nxv4f16_to_nxv4bf16:
2484 ; CHECK_BE:       // %bb.0:
2485 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
2486 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
2487 ; CHECK_BE-NEXT:    ptrue p0.s
2488 ; CHECK_BE-NEXT:    st1h { z0.s }, p0, [sp, #1, mul vl]
2489 ; CHECK_BE-NEXT:    ld1h { z0.s }, p0/z, [sp, #1, mul vl]
2490 ; CHECK_BE-NEXT:    addvl sp, sp, #1
2491 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
2492 ; CHECK_BE-NEXT:    ret
2493   %bc = bitcast <vscale x 4 x half> %v to <vscale x 4 x bfloat>
2494   ret <vscale x 4 x bfloat> %bc
2497 define <vscale x 4 x bfloat> @bitcast_nxv2f32_to_nxv4bf16(<vscale x 2 x float> %v) #0 {
2498 ; CHECK-LABEL: bitcast_nxv2f32_to_nxv4bf16:
2499 ; CHECK:       // %bb.0:
2500 ; CHECK-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
2501 ; CHECK-NEXT:    addvl sp, sp, #-1
2502 ; CHECK-NEXT:    ptrue p0.d
2503 ; CHECK-NEXT:    ptrue p1.s
2504 ; CHECK-NEXT:    st1w { z0.d }, p0, [sp, #1, mul vl]
2505 ; CHECK-NEXT:    ld1h { z0.s }, p1/z, [sp, #1, mul vl]
2506 ; CHECK-NEXT:    addvl sp, sp, #1
2507 ; CHECK-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
2508 ; CHECK-NEXT:    ret
2510 ; CHECK_BE-LABEL: bitcast_nxv2f32_to_nxv4bf16:
2511 ; CHECK_BE:       // %bb.0:
2512 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
2513 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
2514 ; CHECK_BE-NEXT:    ptrue p0.d
2515 ; CHECK_BE-NEXT:    ptrue p1.s
2516 ; CHECK_BE-NEXT:    st1w { z0.d }, p0, [sp, #1, mul vl]
2517 ; CHECK_BE-NEXT:    ld1h { z0.s }, p1/z, [sp, #1, mul vl]
2518 ; CHECK_BE-NEXT:    addvl sp, sp, #1
2519 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
2520 ; CHECK_BE-NEXT:    ret
2521   %bc = bitcast <vscale x 2 x float> %v to <vscale x 4 x bfloat>
2522   ret <vscale x 4 x bfloat> %bc
2525 define <vscale x 4 x bfloat> @bitcast_nxv1f64_to_nxv4bf16(<vscale x 1 x double> %v) #0 {
2526 ; CHECK-LABEL: bitcast_nxv1f64_to_nxv4bf16:
2527 ; CHECK:       // %bb.0:
2528 ; CHECK-NEXT:    uunpklo z0.s, z0.h
2529 ; CHECK-NEXT:    ret
2531 ; CHECK_BE-LABEL: bitcast_nxv1f64_to_nxv4bf16:
2532 ; CHECK_BE:       // %bb.0:
2533 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
2534 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
2535 ; CHECK_BE-NEXT:    ptrue p0.d
2536 ; CHECK_BE-NEXT:    ptrue p1.h
2537 ; CHECK_BE-NEXT:    st1d { z0.d }, p0, [sp]
2538 ; CHECK_BE-NEXT:    ld1h { z0.h }, p1/z, [sp]
2539 ; CHECK_BE-NEXT:    uunpklo z0.s, z0.h
2540 ; CHECK_BE-NEXT:    addvl sp, sp, #1
2541 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
2542 ; CHECK_BE-NEXT:    ret
2543   %bc = bitcast <vscale x 1 x double> %v to <vscale x 4 x bfloat>
2544   ret <vscale x 4 x bfloat> %bc
2548 ; bitcast to nxv4i8
2551 define <vscale x 4 x i8> @bitcast_nxv2i16_to_nxv4i8(<vscale x 2 x i16> %v) #0 {
2552 ; CHECK-LABEL: bitcast_nxv2i16_to_nxv4i8:
2553 ; CHECK:       // %bb.0:
2554 ; CHECK-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
2555 ; CHECK-NEXT:    addvl sp, sp, #-1
2556 ; CHECK-NEXT:    ptrue p0.d
2557 ; CHECK-NEXT:    ptrue p1.s
2558 ; CHECK-NEXT:    st1h { z0.d }, p0, [sp, #3, mul vl]
2559 ; CHECK-NEXT:    ld1b { z0.s }, p1/z, [sp, #3, mul vl]
2560 ; CHECK-NEXT:    addvl sp, sp, #1
2561 ; CHECK-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
2562 ; CHECK-NEXT:    ret
2564 ; CHECK_BE-LABEL: bitcast_nxv2i16_to_nxv4i8:
2565 ; CHECK_BE:       // %bb.0:
2566 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
2567 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
2568 ; CHECK_BE-NEXT:    ptrue p0.d
2569 ; CHECK_BE-NEXT:    ptrue p1.s
2570 ; CHECK_BE-NEXT:    st1h { z0.d }, p0, [sp, #3, mul vl]
2571 ; CHECK_BE-NEXT:    ld1b { z0.s }, p1/z, [sp, #3, mul vl]
2572 ; CHECK_BE-NEXT:    addvl sp, sp, #1
2573 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
2574 ; CHECK_BE-NEXT:    ret
2575   %bc = bitcast <vscale x 2 x i16> %v to <vscale x 4 x i8>
2576   ret <vscale x 4 x i8> %bc
2579 define <vscale x 4 x i8> @bitcast_nxv1i32_to_nxv4i8(<vscale x 1 x i32> %v) #0 {
2580 ; CHECK-LABEL: bitcast_nxv1i32_to_nxv4i8:
2581 ; CHECK:       // %bb.0:
2582 ; CHECK-NEXT:    uunpklo z0.h, z0.b
2583 ; CHECK-NEXT:    uunpklo z0.s, z0.h
2584 ; CHECK-NEXT:    ret
2586 ; CHECK_BE-LABEL: bitcast_nxv1i32_to_nxv4i8:
2587 ; CHECK_BE:       // %bb.0:
2588 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
2589 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
2590 ; CHECK_BE-NEXT:    ptrue p0.s
2591 ; CHECK_BE-NEXT:    ptrue p1.b
2592 ; CHECK_BE-NEXT:    st1w { z0.s }, p0, [sp]
2593 ; CHECK_BE-NEXT:    ld1b { z0.b }, p1/z, [sp]
2594 ; CHECK_BE-NEXT:    uunpklo z0.h, z0.b
2595 ; CHECK_BE-NEXT:    uunpklo z0.s, z0.h
2596 ; CHECK_BE-NEXT:    addvl sp, sp, #1
2597 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
2598 ; CHECK_BE-NEXT:    ret
2599   %bc = bitcast <vscale x 1 x i32> %v to <vscale x 4 x i8>
2600   ret <vscale x 4 x i8> %bc
2603 define <vscale x 4 x i8> @bitcast_nxv2f16_to_nxv4i8(<vscale x 2 x half> %v) #0 {
2604 ; CHECK-LABEL: bitcast_nxv2f16_to_nxv4i8:
2605 ; CHECK:       // %bb.0:
2606 ; CHECK-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
2607 ; CHECK-NEXT:    addvl sp, sp, #-1
2608 ; CHECK-NEXT:    ptrue p0.d
2609 ; CHECK-NEXT:    ptrue p1.s
2610 ; CHECK-NEXT:    st1h { z0.d }, p0, [sp, #3, mul vl]
2611 ; CHECK-NEXT:    ld1b { z0.s }, p1/z, [sp, #3, mul vl]
2612 ; CHECK-NEXT:    addvl sp, sp, #1
2613 ; CHECK-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
2614 ; CHECK-NEXT:    ret
2616 ; CHECK_BE-LABEL: bitcast_nxv2f16_to_nxv4i8:
2617 ; CHECK_BE:       // %bb.0:
2618 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
2619 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
2620 ; CHECK_BE-NEXT:    ptrue p0.d
2621 ; CHECK_BE-NEXT:    ptrue p1.s
2622 ; CHECK_BE-NEXT:    st1h { z0.d }, p0, [sp, #3, mul vl]
2623 ; CHECK_BE-NEXT:    ld1b { z0.s }, p1/z, [sp, #3, mul vl]
2624 ; CHECK_BE-NEXT:    addvl sp, sp, #1
2625 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
2626 ; CHECK_BE-NEXT:    ret
2627   %bc = bitcast <vscale x 2 x half> %v to <vscale x 4 x i8>
2628   ret <vscale x 4 x i8> %bc
2631 ; @bitcast_nxv1f32_to_nxv4i8 is missing
2633 define <vscale x 4 x i8> @bitcast_nxv2bf16_to_nxv4i8(<vscale x 2 x bfloat> %v) #0 {
2634 ; CHECK-LABEL: bitcast_nxv2bf16_to_nxv4i8:
2635 ; CHECK:       // %bb.0:
2636 ; CHECK-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
2637 ; CHECK-NEXT:    addvl sp, sp, #-1
2638 ; CHECK-NEXT:    ptrue p0.d
2639 ; CHECK-NEXT:    ptrue p1.s
2640 ; CHECK-NEXT:    st1h { z0.d }, p0, [sp, #3, mul vl]
2641 ; CHECK-NEXT:    ld1b { z0.s }, p1/z, [sp, #3, mul vl]
2642 ; CHECK-NEXT:    addvl sp, sp, #1
2643 ; CHECK-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
2644 ; CHECK-NEXT:    ret
2646 ; CHECK_BE-LABEL: bitcast_nxv2bf16_to_nxv4i8:
2647 ; CHECK_BE:       // %bb.0:
2648 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
2649 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
2650 ; CHECK_BE-NEXT:    ptrue p0.d
2651 ; CHECK_BE-NEXT:    ptrue p1.s
2652 ; CHECK_BE-NEXT:    st1h { z0.d }, p0, [sp, #3, mul vl]
2653 ; CHECK_BE-NEXT:    ld1b { z0.s }, p1/z, [sp, #3, mul vl]
2654 ; CHECK_BE-NEXT:    addvl sp, sp, #1
2655 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
2656 ; CHECK_BE-NEXT:    ret
2657   %bc = bitcast <vscale x 2 x bfloat> %v to <vscale x 4 x i8>
2658   ret <vscale x 4 x i8> %bc
2662 ; bitcast to nxv2i16
2665 define <vscale x 2 x i16> @bitcast_nxv4i8_to_nxv2i16(<vscale x 4 x i8> %v) #0 {
2666 ; CHECK-LABEL: bitcast_nxv4i8_to_nxv2i16:
2667 ; CHECK:       // %bb.0:
2668 ; CHECK-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
2669 ; CHECK-NEXT:    addvl sp, sp, #-1
2670 ; CHECK-NEXT:    ptrue p0.s
2671 ; CHECK-NEXT:    ptrue p1.d
2672 ; CHECK-NEXT:    st1b { z0.s }, p0, [sp, #3, mul vl]
2673 ; CHECK-NEXT:    ld1h { z0.d }, p1/z, [sp, #3, mul vl]
2674 ; CHECK-NEXT:    addvl sp, sp, #1
2675 ; CHECK-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
2676 ; CHECK-NEXT:    ret
2678 ; CHECK_BE-LABEL: bitcast_nxv4i8_to_nxv2i16:
2679 ; CHECK_BE:       // %bb.0:
2680 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
2681 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
2682 ; CHECK_BE-NEXT:    ptrue p0.s
2683 ; CHECK_BE-NEXT:    ptrue p1.d
2684 ; CHECK_BE-NEXT:    st1b { z0.s }, p0, [sp, #3, mul vl]
2685 ; CHECK_BE-NEXT:    ld1h { z0.d }, p1/z, [sp, #3, mul vl]
2686 ; CHECK_BE-NEXT:    addvl sp, sp, #1
2687 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
2688 ; CHECK_BE-NEXT:    ret
2689   %bc = bitcast <vscale x 4 x i8> %v to <vscale x 2 x i16>
2690   ret <vscale x 2 x i16> %bc
2693 define <vscale x 2 x i16> @bitcast_nxv1i32_to_nxv2i16(<vscale x 1 x i32> %v) #0 {
2694 ; CHECK-LABEL: bitcast_nxv1i32_to_nxv2i16:
2695 ; CHECK:       // %bb.0:
2696 ; CHECK-NEXT:    uunpklo z0.s, z0.h
2697 ; CHECK-NEXT:    uunpklo z0.d, z0.s
2698 ; CHECK-NEXT:    ret
2700 ; CHECK_BE-LABEL: bitcast_nxv1i32_to_nxv2i16:
2701 ; CHECK_BE:       // %bb.0:
2702 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
2703 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
2704 ; CHECK_BE-NEXT:    ptrue p0.s
2705 ; CHECK_BE-NEXT:    ptrue p1.h
2706 ; CHECK_BE-NEXT:    st1w { z0.s }, p0, [sp]
2707 ; CHECK_BE-NEXT:    ld1h { z0.h }, p1/z, [sp]
2708 ; CHECK_BE-NEXT:    uunpklo z0.s, z0.h
2709 ; CHECK_BE-NEXT:    uunpklo z0.d, z0.s
2710 ; CHECK_BE-NEXT:    addvl sp, sp, #1
2711 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
2712 ; CHECK_BE-NEXT:    ret
2713   %bc = bitcast <vscale x 1 x i32> %v to <vscale x 2 x i16>
2714   ret <vscale x 2 x i16> %bc
2717 define <vscale x 2 x i16> @bitcast_nxv2f16_to_nxv2i16(<vscale x 2 x half> %v) #0 {
2718 ; CHECK-LABEL: bitcast_nxv2f16_to_nxv2i16:
2719 ; CHECK:       // %bb.0:
2720 ; CHECK-NEXT:    ret
2722 ; CHECK_BE-LABEL: bitcast_nxv2f16_to_nxv2i16:
2723 ; CHECK_BE:       // %bb.0:
2724 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
2725 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
2726 ; CHECK_BE-NEXT:    ptrue p0.h
2727 ; CHECK_BE-NEXT:    ptrue p1.d
2728 ; CHECK_BE-NEXT:    st1h { z0.h }, p0, [sp]
2729 ; CHECK_BE-NEXT:    ld1d { z0.d }, p1/z, [sp]
2730 ; CHECK_BE-NEXT:    addvl sp, sp, #1
2731 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
2732 ; CHECK_BE-NEXT:    ret
2733   %bc = bitcast <vscale x 2 x half> %v to <vscale x 2 x i16>
2734   ret <vscale x 2 x i16> %bc
2737 ; @bitcast_nxv1f32_to_nxv2i16 is missing
2739 define <vscale x 2 x i16> @bitcast_nxv2bf16_to_nxv2i16(<vscale x 2 x bfloat> %v) #0 {
2740 ; CHECK-LABEL: bitcast_nxv2bf16_to_nxv2i16:
2741 ; CHECK:       // %bb.0:
2742 ; CHECK-NEXT:    ret
2744 ; CHECK_BE-LABEL: bitcast_nxv2bf16_to_nxv2i16:
2745 ; CHECK_BE:       // %bb.0:
2746 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
2747 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
2748 ; CHECK_BE-NEXT:    ptrue p0.h
2749 ; CHECK_BE-NEXT:    ptrue p1.d
2750 ; CHECK_BE-NEXT:    st1h { z0.h }, p0, [sp]
2751 ; CHECK_BE-NEXT:    ld1d { z0.d }, p1/z, [sp]
2752 ; CHECK_BE-NEXT:    addvl sp, sp, #1
2753 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
2754 ; CHECK_BE-NEXT:    ret
2755   %bc = bitcast <vscale x 2 x bfloat> %v to <vscale x 2 x i16>
2756   ret <vscale x 2 x i16> %bc
2760 ; bitcast to nxv1i32
2763 define <vscale x 1 x i32> @bitcast_nxv4i8_to_nxv1i32(<vscale x 4 x i8> %v) #0 {
2764 ; CHECK-LABEL: bitcast_nxv4i8_to_nxv1i32:
2765 ; CHECK:       // %bb.0:
2766 ; CHECK-NEXT:    uzp1 z0.h, z0.h, z0.h
2767 ; CHECK-NEXT:    uzp1 z0.b, z0.b, z0.b
2768 ; CHECK-NEXT:    ret
2770 ; CHECK_BE-LABEL: bitcast_nxv4i8_to_nxv1i32:
2771 ; CHECK_BE:       // %bb.0:
2772 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
2773 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
2774 ; CHECK_BE-NEXT:    uzp1 z0.h, z0.h, z0.h
2775 ; CHECK_BE-NEXT:    ptrue p0.b
2776 ; CHECK_BE-NEXT:    ptrue p1.s
2777 ; CHECK_BE-NEXT:    uzp1 z0.b, z0.b, z0.b
2778 ; CHECK_BE-NEXT:    st1b { z0.b }, p0, [sp]
2779 ; CHECK_BE-NEXT:    ld1w { z0.s }, p1/z, [sp]
2780 ; CHECK_BE-NEXT:    addvl sp, sp, #1
2781 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
2782 ; CHECK_BE-NEXT:    ret
2783   %bc = bitcast <vscale x 4 x i8> %v to <vscale x 1 x i32>
2784   ret <vscale x 1 x i32> %bc
2787 define <vscale x 1 x i32> @bitcast_nxv2i16_to_nxv1i32(<vscale x 2 x i16> %v) #0 {
2788 ; CHECK-LABEL: bitcast_nxv2i16_to_nxv1i32:
2789 ; CHECK:       // %bb.0:
2790 ; CHECK-NEXT:    uzp1 z0.s, z0.s, z0.s
2791 ; CHECK-NEXT:    uzp1 z0.h, z0.h, z0.h
2792 ; CHECK-NEXT:    ret
2794 ; CHECK_BE-LABEL: bitcast_nxv2i16_to_nxv1i32:
2795 ; CHECK_BE:       // %bb.0:
2796 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
2797 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
2798 ; CHECK_BE-NEXT:    uzp1 z0.s, z0.s, z0.s
2799 ; CHECK_BE-NEXT:    ptrue p0.h
2800 ; CHECK_BE-NEXT:    ptrue p1.s
2801 ; CHECK_BE-NEXT:    uzp1 z0.h, z0.h, z0.h
2802 ; CHECK_BE-NEXT:    st1h { z0.h }, p0, [sp]
2803 ; CHECK_BE-NEXT:    ld1w { z0.s }, p1/z, [sp]
2804 ; CHECK_BE-NEXT:    addvl sp, sp, #1
2805 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
2806 ; CHECK_BE-NEXT:    ret
2807   %bc = bitcast <vscale x 2 x i16> %v to <vscale x 1 x i32>
2808   ret <vscale x 1 x i32> %bc
2811 define <vscale x 1 x i32> @bitcast_nxv2f16_to_nxv1i32(<vscale x 2 x half> %v) #0 {
2812 ; CHECK-LABEL: bitcast_nxv2f16_to_nxv1i32:
2813 ; CHECK:       // %bb.0:
2814 ; CHECK-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
2815 ; CHECK-NEXT:    addvl sp, sp, #-1
2816 ; CHECK-NEXT:    ptrue p0.d
2817 ; CHECK-NEXT:    ptrue p1.s
2818 ; CHECK-NEXT:    st1h { z0.d }, p0, [sp]
2819 ; CHECK-NEXT:    ld1w { z0.s }, p1/z, [sp]
2820 ; CHECK-NEXT:    addvl sp, sp, #1
2821 ; CHECK-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
2822 ; CHECK-NEXT:    ret
2824 ; CHECK_BE-LABEL: bitcast_nxv2f16_to_nxv1i32:
2825 ; CHECK_BE:       // %bb.0:
2826 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
2827 ; CHECK_BE-NEXT:    addvl sp, sp, #-2
2828 ; CHECK_BE-NEXT:    ptrue p0.d
2829 ; CHECK_BE-NEXT:    ptrue p1.h
2830 ; CHECK_BE-NEXT:    st1h { z0.d }, p0, [sp]
2831 ; CHECK_BE-NEXT:    ptrue p0.s
2832 ; CHECK_BE-NEXT:    ld1h { z0.h }, p1/z, [sp]
2833 ; CHECK_BE-NEXT:    st1h { z0.h }, p1, [sp, #1, mul vl]
2834 ; CHECK_BE-NEXT:    ld1w { z0.s }, p0/z, [sp, #1, mul vl]
2835 ; CHECK_BE-NEXT:    addvl sp, sp, #2
2836 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
2837 ; CHECK_BE-NEXT:    ret
2838   %bc = bitcast <vscale x 2 x half> %v to <vscale x 1 x i32>
2839   ret <vscale x 1 x i32> %bc
2842 ; @bitcast_nxv1f32_to_nxv1i32 is missing
2844 define <vscale x 1 x i32> @bitcast_nxv2bf16_to_nxv1i32(<vscale x 2 x bfloat> %v) #0 {
2845 ; CHECK-LABEL: bitcast_nxv2bf16_to_nxv1i32:
2846 ; CHECK:       // %bb.0:
2847 ; CHECK-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
2848 ; CHECK-NEXT:    addvl sp, sp, #-1
2849 ; CHECK-NEXT:    ptrue p0.d
2850 ; CHECK-NEXT:    ptrue p1.s
2851 ; CHECK-NEXT:    st1h { z0.d }, p0, [sp]
2852 ; CHECK-NEXT:    ld1w { z0.s }, p1/z, [sp]
2853 ; CHECK-NEXT:    addvl sp, sp, #1
2854 ; CHECK-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
2855 ; CHECK-NEXT:    ret
2857 ; CHECK_BE-LABEL: bitcast_nxv2bf16_to_nxv1i32:
2858 ; CHECK_BE:       // %bb.0:
2859 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
2860 ; CHECK_BE-NEXT:    addvl sp, sp, #-2
2861 ; CHECK_BE-NEXT:    ptrue p0.d
2862 ; CHECK_BE-NEXT:    ptrue p1.h
2863 ; CHECK_BE-NEXT:    st1h { z0.d }, p0, [sp]
2864 ; CHECK_BE-NEXT:    ptrue p0.s
2865 ; CHECK_BE-NEXT:    ld1h { z0.h }, p1/z, [sp]
2866 ; CHECK_BE-NEXT:    st1h { z0.h }, p1, [sp, #1, mul vl]
2867 ; CHECK_BE-NEXT:    ld1w { z0.s }, p0/z, [sp, #1, mul vl]
2868 ; CHECK_BE-NEXT:    addvl sp, sp, #2
2869 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
2870 ; CHECK_BE-NEXT:    ret
2871   %bc = bitcast <vscale x 2 x bfloat> %v to <vscale x 1 x i32>
2872   ret <vscale x 1 x i32> %bc
2876 ; bitcast to nxv2f16
2879 define <vscale x 2 x half> @bitcast_nxv4i8_to_nxv2f16(<vscale x 4 x i8> %v) #0 {
2880 ; CHECK-LABEL: bitcast_nxv4i8_to_nxv2f16:
2881 ; CHECK:       // %bb.0:
2882 ; CHECK-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
2883 ; CHECK-NEXT:    addvl sp, sp, #-1
2884 ; CHECK-NEXT:    ptrue p0.s
2885 ; CHECK-NEXT:    ptrue p1.d
2886 ; CHECK-NEXT:    st1b { z0.s }, p0, [sp, #3, mul vl]
2887 ; CHECK-NEXT:    ld1h { z0.d }, p1/z, [sp, #3, mul vl]
2888 ; CHECK-NEXT:    addvl sp, sp, #1
2889 ; CHECK-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
2890 ; CHECK-NEXT:    ret
2892 ; CHECK_BE-LABEL: bitcast_nxv4i8_to_nxv2f16:
2893 ; CHECK_BE:       // %bb.0:
2894 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
2895 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
2896 ; CHECK_BE-NEXT:    ptrue p0.s
2897 ; CHECK_BE-NEXT:    ptrue p1.d
2898 ; CHECK_BE-NEXT:    st1b { z0.s }, p0, [sp, #3, mul vl]
2899 ; CHECK_BE-NEXT:    ld1h { z0.d }, p1/z, [sp, #3, mul vl]
2900 ; CHECK_BE-NEXT:    addvl sp, sp, #1
2901 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
2902 ; CHECK_BE-NEXT:    ret
2903   %bc = bitcast <vscale x 4 x i8> %v to <vscale x 2 x half>
2904   ret <vscale x 2 x half> %bc
2907 define <vscale x 2 x half> @bitcast_nxv2i16_to_nxv2f16(<vscale x 2 x i16> %v) #0 {
2908 ; CHECK-LABEL: bitcast_nxv2i16_to_nxv2f16:
2909 ; CHECK:       // %bb.0:
2910 ; CHECK-NEXT:    ret
2912 ; CHECK_BE-LABEL: bitcast_nxv2i16_to_nxv2f16:
2913 ; CHECK_BE:       // %bb.0:
2914 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
2915 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
2916 ; CHECK_BE-NEXT:    ptrue p0.d
2917 ; CHECK_BE-NEXT:    ptrue p1.h
2918 ; CHECK_BE-NEXT:    st1d { z0.d }, p0, [sp]
2919 ; CHECK_BE-NEXT:    ld1h { z0.h }, p1/z, [sp]
2920 ; CHECK_BE-NEXT:    addvl sp, sp, #1
2921 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
2922 ; CHECK_BE-NEXT:    ret
2923   %bc = bitcast <vscale x 2 x i16> %v to <vscale x 2 x half>
2924   ret <vscale x 2 x half> %bc
2927 ; @bitcast_nxv1i32_to_nxv2f16 is missing
2928 ; @bitcast_nxv1f32_to_nxv2f16 is missing
2930 define <vscale x 2 x half> @bitcast_nxv2bf16_to_nxv2f16(<vscale x 2 x bfloat> %v) #0 {
2931 ; CHECK-LABEL: bitcast_nxv2bf16_to_nxv2f16:
2932 ; CHECK:       // %bb.0:
2933 ; CHECK-NEXT:    ret
2935 ; CHECK_BE-LABEL: bitcast_nxv2bf16_to_nxv2f16:
2936 ; CHECK_BE:       // %bb.0:
2937 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
2938 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
2939 ; CHECK_BE-NEXT:    ptrue p0.d
2940 ; CHECK_BE-NEXT:    st1h { z0.d }, p0, [sp, #3, mul vl]
2941 ; CHECK_BE-NEXT:    ld1h { z0.d }, p0/z, [sp, #3, mul vl]
2942 ; CHECK_BE-NEXT:    addvl sp, sp, #1
2943 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
2944 ; CHECK_BE-NEXT:    ret
2945   %bc = bitcast <vscale x 2 x bfloat> %v to <vscale x 2 x half>
2946   ret <vscale x 2 x half> %bc
2950 ; bitcast to nxv1f32
2953 ; @bitcast_nxv4i8_to_nxv1f32 is missing
2954 ; @bitcast_nxv2i16_to_nxv1f32 is missing
2955 ; @bitcast_nxv1i32_to_nxv1f32 is missing
2956 ; @bitcast_nxv2f16_to_nxv1f32 is missing
2957 ; @bitcast_nxv2bf16_to_nxv1f32 is missing
2960 ; bitcast to nxv2bf16
2963 define <vscale x 2 x bfloat> @bitcast_nxv4i8_to_nxv2bf16(<vscale x 4 x i8> %v) #0 {
2964 ; CHECK-LABEL: bitcast_nxv4i8_to_nxv2bf16:
2965 ; CHECK:       // %bb.0:
2966 ; CHECK-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
2967 ; CHECK-NEXT:    addvl sp, sp, #-1
2968 ; CHECK-NEXT:    ptrue p0.s
2969 ; CHECK-NEXT:    ptrue p1.d
2970 ; CHECK-NEXT:    st1b { z0.s }, p0, [sp, #3, mul vl]
2971 ; CHECK-NEXT:    ld1h { z0.d }, p1/z, [sp, #3, mul vl]
2972 ; CHECK-NEXT:    addvl sp, sp, #1
2973 ; CHECK-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
2974 ; CHECK-NEXT:    ret
2976 ; CHECK_BE-LABEL: bitcast_nxv4i8_to_nxv2bf16:
2977 ; CHECK_BE:       // %bb.0:
2978 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
2979 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
2980 ; CHECK_BE-NEXT:    ptrue p0.s
2981 ; CHECK_BE-NEXT:    ptrue p1.d
2982 ; CHECK_BE-NEXT:    st1b { z0.s }, p0, [sp, #3, mul vl]
2983 ; CHECK_BE-NEXT:    ld1h { z0.d }, p1/z, [sp, #3, mul vl]
2984 ; CHECK_BE-NEXT:    addvl sp, sp, #1
2985 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
2986 ; CHECK_BE-NEXT:    ret
2987   %bc = bitcast <vscale x 4 x i8> %v to <vscale x 2 x bfloat>
2988   ret <vscale x 2 x bfloat> %bc
2991 define <vscale x 2 x bfloat> @bitcast_nxv2i16_to_nxv2bf16(<vscale x 2 x i16> %v) #0 {
2992 ; CHECK-LABEL: bitcast_nxv2i16_to_nxv2bf16:
2993 ; CHECK:       // %bb.0:
2994 ; CHECK-NEXT:    ret
2996 ; CHECK_BE-LABEL: bitcast_nxv2i16_to_nxv2bf16:
2997 ; CHECK_BE:       // %bb.0:
2998 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
2999 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
3000 ; CHECK_BE-NEXT:    ptrue p0.d
3001 ; CHECK_BE-NEXT:    ptrue p1.h
3002 ; CHECK_BE-NEXT:    st1d { z0.d }, p0, [sp]
3003 ; CHECK_BE-NEXT:    ld1h { z0.h }, p1/z, [sp]
3004 ; CHECK_BE-NEXT:    addvl sp, sp, #1
3005 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
3006 ; CHECK_BE-NEXT:    ret
3007   %bc = bitcast <vscale x 2 x i16> %v to <vscale x 2 x bfloat>
3008   ret <vscale x 2 x bfloat> %bc
3011 ; @bitcast_nxv1i32_to_nxv2bf16 is missing
3013 define <vscale x 2 x bfloat> @bitcast_nxv2f16_to_nxv2bf16(<vscale x 2 x half> %v) #0 {
3014 ; CHECK-LABEL: bitcast_nxv2f16_to_nxv2bf16:
3015 ; CHECK:       // %bb.0:
3016 ; CHECK-NEXT:    ret
3018 ; CHECK_BE-LABEL: bitcast_nxv2f16_to_nxv2bf16:
3019 ; CHECK_BE:       // %bb.0:
3020 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
3021 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
3022 ; CHECK_BE-NEXT:    ptrue p0.d
3023 ; CHECK_BE-NEXT:    st1h { z0.d }, p0, [sp, #3, mul vl]
3024 ; CHECK_BE-NEXT:    ld1h { z0.d }, p0/z, [sp, #3, mul vl]
3025 ; CHECK_BE-NEXT:    addvl sp, sp, #1
3026 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
3027 ; CHECK_BE-NEXT:    ret
3028   %bc = bitcast <vscale x 2 x half> %v to <vscale x 2 x bfloat>
3029   ret <vscale x 2 x bfloat> %bc
3032 ; @bitcast_nxv1f32_to_nxv2bf16 is missing
3035 ; bitcast to nxv2i8
3038 define <vscale x 2 x i8> @bitcast_nxv1i16_to_nxv2i8(<vscale x 1 x i16> %v) #0 {
3039 ; CHECK-LABEL: bitcast_nxv1i16_to_nxv2i8:
3040 ; CHECK:       // %bb.0:
3041 ; CHECK-NEXT:    uunpklo z0.h, z0.b
3042 ; CHECK-NEXT:    uunpklo z0.s, z0.h
3043 ; CHECK-NEXT:    uunpklo z0.d, z0.s
3044 ; CHECK-NEXT:    ret
3046 ; CHECK_BE-LABEL: bitcast_nxv1i16_to_nxv2i8:
3047 ; CHECK_BE:       // %bb.0:
3048 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
3049 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
3050 ; CHECK_BE-NEXT:    ptrue p0.h
3051 ; CHECK_BE-NEXT:    ptrue p1.b
3052 ; CHECK_BE-NEXT:    st1h { z0.h }, p0, [sp]
3053 ; CHECK_BE-NEXT:    ld1b { z0.b }, p1/z, [sp]
3054 ; CHECK_BE-NEXT:    uunpklo z0.h, z0.b
3055 ; CHECK_BE-NEXT:    uunpklo z0.s, z0.h
3056 ; CHECK_BE-NEXT:    uunpklo z0.d, z0.s
3057 ; CHECK_BE-NEXT:    addvl sp, sp, #1
3058 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
3059 ; CHECK_BE-NEXT:    ret
3060   %bc = bitcast <vscale x 1 x i16> %v to <vscale x 2 x i8>
3061   ret <vscale x 2 x i8> %bc
3064 ; @bitcast_nxv1f16_to_nxv2i8 is missing
3065 ; @bitcast_nxv1bf16_to_nxv2i8 is missing
3068 ; bitcast to nxv1i16
3071 define <vscale x 1 x i16> @bitcast_nxv2i8_to_nxv1i16(<vscale x 2 x i8> %v) #0 {
3072 ; CHECK-LABEL: bitcast_nxv2i8_to_nxv1i16:
3073 ; CHECK:       // %bb.0:
3074 ; CHECK-NEXT:    uzp1 z0.s, z0.s, z0.s
3075 ; CHECK-NEXT:    uzp1 z0.h, z0.h, z0.h
3076 ; CHECK-NEXT:    uzp1 z0.b, z0.b, z0.b
3077 ; CHECK-NEXT:    ret
3079 ; CHECK_BE-LABEL: bitcast_nxv2i8_to_nxv1i16:
3080 ; CHECK_BE:       // %bb.0:
3081 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
3082 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
3083 ; CHECK_BE-NEXT:    uzp1 z0.s, z0.s, z0.s
3084 ; CHECK_BE-NEXT:    ptrue p0.b
3085 ; CHECK_BE-NEXT:    ptrue p1.h
3086 ; CHECK_BE-NEXT:    uzp1 z0.h, z0.h, z0.h
3087 ; CHECK_BE-NEXT:    uzp1 z0.b, z0.b, z0.b
3088 ; CHECK_BE-NEXT:    st1b { z0.b }, p0, [sp]
3089 ; CHECK_BE-NEXT:    ld1h { z0.h }, p1/z, [sp]
3090 ; CHECK_BE-NEXT:    addvl sp, sp, #1
3091 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
3092 ; CHECK_BE-NEXT:    ret
3093   %bc = bitcast <vscale x 2 x i8> %v to <vscale x 1 x i16>
3094   ret <vscale x 1 x i16> %bc
3097 ; @bitcast_nxv1f16_to_nxv1i16 is missing
3098 ; @bitcast_nxv1bf16_to_nxv1i16 is missing
3101 ; bitcast to nxv1f16
3104 ; @bitcast_nxv2i8_to_nxv1f16 is missing
3105 ; @bitcast_nxv1i16_to_nxv1f16 is missing
3106 ; @bitcast_nxv1bf16_to_nxv1f16 is missing
3109 ; bitcast to nxv1bf16
3112 ; @bitcast_nxv2i8_to_nxv1bf16 is missing
3113 ; @bitcast_nxv1i16_to_nxv1bf16 is missing
3114 ; @bitcast_nxv1f16_to_nxv1bf16 is missing
3117 ; Other
3120 define <vscale x 2 x i32> @bitcast_short_float_to_i32(<vscale x 2 x double> %v) #0 {
3121 ; CHECK-LABEL: bitcast_short_float_to_i32:
3122 ; CHECK:       // %bb.0:
3123 ; CHECK-NEXT:    ptrue p0.d
3124 ; CHECK-NEXT:    fcvt z0.s, p0/m, z0.d
3125 ; CHECK-NEXT:    ret
3127 ; CHECK_BE-LABEL: bitcast_short_float_to_i32:
3128 ; CHECK_BE:       // %bb.0:
3129 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
3130 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
3131 ; CHECK_BE-NEXT:    ptrue p0.d
3132 ; CHECK_BE-NEXT:    ptrue p1.s
3133 ; CHECK_BE-NEXT:    fcvt z0.s, p0/m, z0.d
3134 ; CHECK_BE-NEXT:    st1w { z0.s }, p1, [sp]
3135 ; CHECK_BE-NEXT:    ld1d { z0.d }, p0/z, [sp]
3136 ; CHECK_BE-NEXT:    addvl sp, sp, #1
3137 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
3138 ; CHECK_BE-NEXT:    ret
3139   %trunc = fptrunc <vscale x 2 x double> %v to <vscale x 2 x float>
3140   %bitcast = bitcast <vscale x 2 x float> %trunc to <vscale x 2 x i32>
3141   ret <vscale x 2 x i32> %bitcast
3144 define <vscale x 2 x double> @bitcast_short_i32_to_float(<vscale x 2 x i64> %v) #0 {
3145 ; CHECK-LABEL: bitcast_short_i32_to_float:
3146 ; CHECK:       // %bb.0:
3147 ; CHECK-NEXT:    ptrue p0.d
3148 ; CHECK-NEXT:    fcvt z0.d, p0/m, z0.s
3149 ; CHECK-NEXT:    ret
3151 ; CHECK_BE-LABEL: bitcast_short_i32_to_float:
3152 ; CHECK_BE:       // %bb.0:
3153 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
3154 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
3155 ; CHECK_BE-NEXT:    ptrue p0.d
3156 ; CHECK_BE-NEXT:    ptrue p1.s
3157 ; CHECK_BE-NEXT:    st1d { z0.d }, p0, [sp]
3158 ; CHECK_BE-NEXT:    ld1w { z0.s }, p1/z, [sp]
3159 ; CHECK_BE-NEXT:    fcvt z0.d, p0/m, z0.s
3160 ; CHECK_BE-NEXT:    addvl sp, sp, #1
3161 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
3162 ; CHECK_BE-NEXT:    ret
3163   %trunc = trunc <vscale x 2 x i64> %v to <vscale x 2 x i32>
3164   %bitcast = bitcast <vscale x 2 x i32> %trunc to <vscale x 2 x float>
3165   %extended = fpext <vscale x 2 x float> %bitcast to <vscale x 2 x double>
3166   ret <vscale x 2 x double> %extended
3169 define <vscale x 2 x float> @bitcast_short_half_to_float(<vscale x 4 x half> %v) #0 {
3170 ; CHECK-LABEL: bitcast_short_half_to_float:
3171 ; CHECK:       // %bb.0:
3172 ; CHECK-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
3173 ; CHECK-NEXT:    addvl sp, sp, #-1
3174 ; CHECK-NEXT:    ptrue p0.s
3175 ; CHECK-NEXT:    ptrue p1.d
3176 ; CHECK-NEXT:    fadd z0.h, p0/m, z0.h, z0.h
3177 ; CHECK-NEXT:    st1h { z0.s }, p0, [sp, #1, mul vl]
3178 ; CHECK-NEXT:    ld1w { z0.d }, p1/z, [sp, #1, mul vl]
3179 ; CHECK-NEXT:    addvl sp, sp, #1
3180 ; CHECK-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
3181 ; CHECK-NEXT:    ret
3183 ; CHECK_BE-LABEL: bitcast_short_half_to_float:
3184 ; CHECK_BE:       // %bb.0:
3185 ; CHECK_BE-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill
3186 ; CHECK_BE-NEXT:    addvl sp, sp, #-1
3187 ; CHECK_BE-NEXT:    ptrue p0.s
3188 ; CHECK_BE-NEXT:    ptrue p1.d
3189 ; CHECK_BE-NEXT:    fadd z0.h, p0/m, z0.h, z0.h
3190 ; CHECK_BE-NEXT:    st1h { z0.s }, p0, [sp, #1, mul vl]
3191 ; CHECK_BE-NEXT:    ld1w { z0.d }, p1/z, [sp, #1, mul vl]
3192 ; CHECK_BE-NEXT:    addvl sp, sp, #1
3193 ; CHECK_BE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
3194 ; CHECK_BE-NEXT:    ret
3195   %add = fadd <vscale x 4 x half> %v, %v
3196   %bitcast = bitcast <vscale x 4 x half> %add to <vscale x 2 x float>
3197   ret <vscale x 2 x float> %bitcast
3200 ; +bf16 is required for the bfloat version.
3201 attributes #0 = { nounwind "target-features"="+sve,+bf16" }