[RISCV] Support postRA vsetvl insertion pass (#70549)
[llvm-project.git] / llvm / test / CodeGen / RISCV / rvv / fixed-vectors-bitcast.ll
blob5252eb71c383dbabd2fcbcdb6e38066332342fb7
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=riscv32 -mattr=+v,+d,+zfh,+zvfh -verify-machineinstrs \
3 ; RUN:     -target-abi=ilp32d < %s | FileCheck %s --check-prefixes=CHECK,RV32
4 ; RUN: llc -mtriple=riscv64 -mattr=+v,+d,+zfh,+zvfh -verify-machineinstrs \
5 ; RUN:     -target-abi=lp64d < %s | FileCheck %s --check-prefixes=CHECK,RV64
6 ; RUN: llc -mtriple=riscv32 -mattr=+zve32f,+zvl128b,+d,+zfh,+zvfh \
7 ; RUN:     -verify-machineinstrs -target-abi=ilp32d < %s | FileCheck %s \
8 ; RUN:     --check-prefixes=ELEN32,RV32ELEN32
9 ; RUN: llc -mtriple=riscv64 -mattr=+zve32f,+zvl128b,+d,+zfh,+zvfh \
10 ; RUN:     -verify-machineinstrs -target-abi=lp64d < %s | FileCheck %s \
11 ; RUN:     --check-prefixes=ELEN32,RV64ELEN32
13 define <32 x i1> @bitcast_v4i8_v32i1(<4 x i8> %a, <32 x i1> %b) {
14 ; CHECK-LABEL: bitcast_v4i8_v32i1:
15 ; CHECK:       # %bb.0:
16 ; CHECK-NEXT:    li a0, 32
17 ; CHECK-NEXT:    vsetvli zero, a0, e8, m2, ta, ma
18 ; CHECK-NEXT:    vmxor.mm v0, v0, v8
19 ; CHECK-NEXT:    ret
21 ; ELEN32-LABEL: bitcast_v4i8_v32i1:
22 ; ELEN32:       # %bb.0:
23 ; ELEN32-NEXT:    li a0, 32
24 ; ELEN32-NEXT:    vsetvli zero, a0, e8, m2, ta, ma
25 ; ELEN32-NEXT:    vmxor.mm v0, v0, v8
26 ; ELEN32-NEXT:    ret
27   %c = bitcast <4 x i8> %a to <32 x i1>
28   %d = xor <32 x i1> %b, %c
29   ret <32 x i1> %d
32 define i8 @bitcast_v1i8_i8(<1 x i8> %a) {
33 ; CHECK-LABEL: bitcast_v1i8_i8:
34 ; CHECK:       # %bb.0:
35 ; CHECK-NEXT:    vsetivli zero, 1, e8, m1, ta, ma
36 ; CHECK-NEXT:    vmv.x.s a0, v8
37 ; CHECK-NEXT:    ret
39 ; ELEN32-LABEL: bitcast_v1i8_i8:
40 ; ELEN32:       # %bb.0:
41 ; ELEN32-NEXT:    vsetivli zero, 1, e8, m1, ta, ma
42 ; ELEN32-NEXT:    vmv.x.s a0, v8
43 ; ELEN32-NEXT:    ret
44   %b = bitcast <1 x i8> %a to i8
45   ret i8 %b
48 define i16 @bitcast_v2i8_i16(<2 x i8> %a) {
49 ; CHECK-LABEL: bitcast_v2i8_i16:
50 ; CHECK:       # %bb.0:
51 ; CHECK-NEXT:    vsetivli zero, 1, e16, m1, ta, ma
52 ; CHECK-NEXT:    vmv.x.s a0, v8
53 ; CHECK-NEXT:    ret
55 ; ELEN32-LABEL: bitcast_v2i8_i16:
56 ; ELEN32:       # %bb.0:
57 ; ELEN32-NEXT:    vsetivli zero, 1, e16, m1, ta, ma
58 ; ELEN32-NEXT:    vmv.x.s a0, v8
59 ; ELEN32-NEXT:    ret
60   %b = bitcast <2 x i8> %a to i16
61   ret i16 %b
64 define i16 @bitcast_v1i16_i16(<1 x i16> %a) {
65 ; CHECK-LABEL: bitcast_v1i16_i16:
66 ; CHECK:       # %bb.0:
67 ; CHECK-NEXT:    vsetivli zero, 1, e16, m1, ta, ma
68 ; CHECK-NEXT:    vmv.x.s a0, v8
69 ; CHECK-NEXT:    ret
71 ; ELEN32-LABEL: bitcast_v1i16_i16:
72 ; ELEN32:       # %bb.0:
73 ; ELEN32-NEXT:    vsetivli zero, 1, e16, m1, ta, ma
74 ; ELEN32-NEXT:    vmv.x.s a0, v8
75 ; ELEN32-NEXT:    ret
76   %b = bitcast <1 x i16> %a to i16
77   ret i16 %b
80 define i32 @bitcast_v4i8_i32(<4 x i8> %a) {
81 ; CHECK-LABEL: bitcast_v4i8_i32:
82 ; CHECK:       # %bb.0:
83 ; CHECK-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
84 ; CHECK-NEXT:    vmv.x.s a0, v8
85 ; CHECK-NEXT:    ret
87 ; ELEN32-LABEL: bitcast_v4i8_i32:
88 ; ELEN32:       # %bb.0:
89 ; ELEN32-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
90 ; ELEN32-NEXT:    vmv.x.s a0, v8
91 ; ELEN32-NEXT:    ret
92   %b = bitcast <4 x i8> %a to i32
93   ret i32 %b
96 define i32 @bitcast_v2i16_i32(<2 x i16> %a) {
97 ; CHECK-LABEL: bitcast_v2i16_i32:
98 ; CHECK:       # %bb.0:
99 ; CHECK-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
100 ; CHECK-NEXT:    vmv.x.s a0, v8
101 ; CHECK-NEXT:    ret
103 ; ELEN32-LABEL: bitcast_v2i16_i32:
104 ; ELEN32:       # %bb.0:
105 ; ELEN32-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
106 ; ELEN32-NEXT:    vmv.x.s a0, v8
107 ; ELEN32-NEXT:    ret
108   %b = bitcast <2 x i16> %a to i32
109   ret i32 %b
112 define i32 @bitcast_v1i32_i32(<1 x i32> %a) {
113 ; CHECK-LABEL: bitcast_v1i32_i32:
114 ; CHECK:       # %bb.0:
115 ; CHECK-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
116 ; CHECK-NEXT:    vmv.x.s a0, v8
117 ; CHECK-NEXT:    ret
119 ; ELEN32-LABEL: bitcast_v1i32_i32:
120 ; ELEN32:       # %bb.0:
121 ; ELEN32-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
122 ; ELEN32-NEXT:    vmv.x.s a0, v8
123 ; ELEN32-NEXT:    ret
124   %b = bitcast <1 x i32> %a to i32
125   ret i32 %b
128 define i64 @bitcast_v8i8_i64(<8 x i8> %a) {
129 ; RV32-LABEL: bitcast_v8i8_i64:
130 ; RV32:       # %bb.0:
131 ; RV32-NEXT:    li a0, 32
132 ; RV32-NEXT:    vsetivli zero, 1, e64, m1, ta, ma
133 ; RV32-NEXT:    vsrl.vx v9, v8, a0
134 ; RV32-NEXT:    vmv.x.s a1, v9
135 ; RV32-NEXT:    vmv.x.s a0, v8
136 ; RV32-NEXT:    ret
138 ; RV64-LABEL: bitcast_v8i8_i64:
139 ; RV64:       # %bb.0:
140 ; RV64-NEXT:    vsetivli zero, 1, e64, m1, ta, ma
141 ; RV64-NEXT:    vmv.x.s a0, v8
142 ; RV64-NEXT:    ret
144 ; RV32ELEN32-LABEL: bitcast_v8i8_i64:
145 ; RV32ELEN32:       # %bb.0:
146 ; RV32ELEN32-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
147 ; RV32ELEN32-NEXT:    vmv.x.s a0, v8
148 ; RV32ELEN32-NEXT:    vslidedown.vi v8, v8, 1
149 ; RV32ELEN32-NEXT:    vmv.x.s a1, v8
150 ; RV32ELEN32-NEXT:    ret
152 ; RV64ELEN32-LABEL: bitcast_v8i8_i64:
153 ; RV64ELEN32:       # %bb.0:
154 ; RV64ELEN32-NEXT:    addi sp, sp, -16
155 ; RV64ELEN32-NEXT:    .cfi_def_cfa_offset 16
156 ; RV64ELEN32-NEXT:    addi a0, sp, 8
157 ; RV64ELEN32-NEXT:    vsetivli zero, 8, e8, mf2, ta, ma
158 ; RV64ELEN32-NEXT:    vse8.v v8, (a0)
159 ; RV64ELEN32-NEXT:    ld a0, 8(sp)
160 ; RV64ELEN32-NEXT:    addi sp, sp, 16
161 ; RV64ELEN32-NEXT:    ret
162   %b = bitcast <8 x i8> %a to i64
163   ret i64 %b
166 define i64 @bitcast_v4i16_i64(<4 x i16> %a) {
167 ; RV32-LABEL: bitcast_v4i16_i64:
168 ; RV32:       # %bb.0:
169 ; RV32-NEXT:    li a0, 32
170 ; RV32-NEXT:    vsetivli zero, 1, e64, m1, ta, ma
171 ; RV32-NEXT:    vsrl.vx v9, v8, a0
172 ; RV32-NEXT:    vmv.x.s a1, v9
173 ; RV32-NEXT:    vmv.x.s a0, v8
174 ; RV32-NEXT:    ret
176 ; RV64-LABEL: bitcast_v4i16_i64:
177 ; RV64:       # %bb.0:
178 ; RV64-NEXT:    vsetivli zero, 1, e64, m1, ta, ma
179 ; RV64-NEXT:    vmv.x.s a0, v8
180 ; RV64-NEXT:    ret
182 ; RV32ELEN32-LABEL: bitcast_v4i16_i64:
183 ; RV32ELEN32:       # %bb.0:
184 ; RV32ELEN32-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
185 ; RV32ELEN32-NEXT:    vmv.x.s a0, v8
186 ; RV32ELEN32-NEXT:    vslidedown.vi v8, v8, 1
187 ; RV32ELEN32-NEXT:    vmv.x.s a1, v8
188 ; RV32ELEN32-NEXT:    ret
190 ; RV64ELEN32-LABEL: bitcast_v4i16_i64:
191 ; RV64ELEN32:       # %bb.0:
192 ; RV64ELEN32-NEXT:    addi sp, sp, -16
193 ; RV64ELEN32-NEXT:    .cfi_def_cfa_offset 16
194 ; RV64ELEN32-NEXT:    addi a0, sp, 8
195 ; RV64ELEN32-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
196 ; RV64ELEN32-NEXT:    vse16.v v8, (a0)
197 ; RV64ELEN32-NEXT:    ld a0, 8(sp)
198 ; RV64ELEN32-NEXT:    addi sp, sp, 16
199 ; RV64ELEN32-NEXT:    ret
200   %b = bitcast <4 x i16> %a to i64
201   ret i64 %b
204 define i64 @bitcast_v2i32_i64(<2 x i32> %a) {
205 ; RV32-LABEL: bitcast_v2i32_i64:
206 ; RV32:       # %bb.0:
207 ; RV32-NEXT:    li a0, 32
208 ; RV32-NEXT:    vsetivli zero, 1, e64, m1, ta, ma
209 ; RV32-NEXT:    vsrl.vx v9, v8, a0
210 ; RV32-NEXT:    vmv.x.s a1, v9
211 ; RV32-NEXT:    vmv.x.s a0, v8
212 ; RV32-NEXT:    ret
214 ; RV64-LABEL: bitcast_v2i32_i64:
215 ; RV64:       # %bb.0:
216 ; RV64-NEXT:    vsetivli zero, 1, e64, m1, ta, ma
217 ; RV64-NEXT:    vmv.x.s a0, v8
218 ; RV64-NEXT:    ret
220 ; RV32ELEN32-LABEL: bitcast_v2i32_i64:
221 ; RV32ELEN32:       # %bb.0:
222 ; RV32ELEN32-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
223 ; RV32ELEN32-NEXT:    vmv.x.s a0, v8
224 ; RV32ELEN32-NEXT:    vslidedown.vi v8, v8, 1
225 ; RV32ELEN32-NEXT:    vmv.x.s a1, v8
226 ; RV32ELEN32-NEXT:    ret
228 ; RV64ELEN32-LABEL: bitcast_v2i32_i64:
229 ; RV64ELEN32:       # %bb.0:
230 ; RV64ELEN32-NEXT:    addi sp, sp, -16
231 ; RV64ELEN32-NEXT:    .cfi_def_cfa_offset 16
232 ; RV64ELEN32-NEXT:    addi a0, sp, 8
233 ; RV64ELEN32-NEXT:    vsetivli zero, 2, e32, m1, ta, ma
234 ; RV64ELEN32-NEXT:    vse32.v v8, (a0)
235 ; RV64ELEN32-NEXT:    ld a0, 8(sp)
236 ; RV64ELEN32-NEXT:    addi sp, sp, 16
237 ; RV64ELEN32-NEXT:    ret
238   %b = bitcast <2 x i32> %a to i64
239   ret i64 %b
242 define i64 @bitcast_v1i64_i64(<1 x i64> %a) {
243 ; RV32-LABEL: bitcast_v1i64_i64:
244 ; RV32:       # %bb.0:
245 ; RV32-NEXT:    li a0, 32
246 ; RV32-NEXT:    vsetivli zero, 1, e64, m1, ta, ma
247 ; RV32-NEXT:    vsrl.vx v9, v8, a0
248 ; RV32-NEXT:    vmv.x.s a1, v9
249 ; RV32-NEXT:    vmv.x.s a0, v8
250 ; RV32-NEXT:    ret
252 ; RV64-LABEL: bitcast_v1i64_i64:
253 ; RV64:       # %bb.0:
254 ; RV64-NEXT:    vsetivli zero, 1, e64, m1, ta, ma
255 ; RV64-NEXT:    vmv.x.s a0, v8
256 ; RV64-NEXT:    ret
258 ; ELEN32-LABEL: bitcast_v1i64_i64:
259 ; ELEN32:       # %bb.0:
260 ; ELEN32-NEXT:    ret
261   %b = bitcast <1 x i64> %a to i64
262   ret i64 %b
265 define half @bitcast_v2i8_f16(<2 x i8> %a) {
266 ; CHECK-LABEL: bitcast_v2i8_f16:
267 ; CHECK:       # %bb.0:
268 ; CHECK-NEXT:    vsetivli zero, 1, e16, mf4, ta, ma
269 ; CHECK-NEXT:    vfmv.f.s fa0, v8
270 ; CHECK-NEXT:    ret
272 ; ELEN32-LABEL: bitcast_v2i8_f16:
273 ; ELEN32:       # %bb.0:
274 ; ELEN32-NEXT:    vsetivli zero, 1, e16, mf2, ta, ma
275 ; ELEN32-NEXT:    vfmv.f.s fa0, v8
276 ; ELEN32-NEXT:    ret
277   %b = bitcast <2 x i8> %a to half
278   ret half %b
281 define half @bitcast_v1i16_f16(<1 x i16> %a) {
282 ; CHECK-LABEL: bitcast_v1i16_f16:
283 ; CHECK:       # %bb.0:
284 ; CHECK-NEXT:    vsetivli zero, 1, e16, mf4, ta, ma
285 ; CHECK-NEXT:    vfmv.f.s fa0, v8
286 ; CHECK-NEXT:    ret
288 ; ELEN32-LABEL: bitcast_v1i16_f16:
289 ; ELEN32:       # %bb.0:
290 ; ELEN32-NEXT:    vsetivli zero, 1, e16, mf2, ta, ma
291 ; ELEN32-NEXT:    vfmv.f.s fa0, v8
292 ; ELEN32-NEXT:    ret
293   %b = bitcast <1 x i16> %a to half
294   ret half %b
297 define float @bitcast_v4i8_f32(<4 x i8> %a) {
298 ; CHECK-LABEL: bitcast_v4i8_f32:
299 ; CHECK:       # %bb.0:
300 ; CHECK-NEXT:    vsetivli zero, 1, e32, mf2, ta, ma
301 ; CHECK-NEXT:    vfmv.f.s fa0, v8
302 ; CHECK-NEXT:    ret
304 ; ELEN32-LABEL: bitcast_v4i8_f32:
305 ; ELEN32:       # %bb.0:
306 ; ELEN32-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
307 ; ELEN32-NEXT:    vfmv.f.s fa0, v8
308 ; ELEN32-NEXT:    ret
309   %b = bitcast <4 x i8> %a to float
310   ret float %b
313 define float @bitcast_v2i16_f32(<2 x i16> %a) {
314 ; CHECK-LABEL: bitcast_v2i16_f32:
315 ; CHECK:       # %bb.0:
316 ; CHECK-NEXT:    vsetivli zero, 1, e32, mf2, ta, ma
317 ; CHECK-NEXT:    vfmv.f.s fa0, v8
318 ; CHECK-NEXT:    ret
320 ; ELEN32-LABEL: bitcast_v2i16_f32:
321 ; ELEN32:       # %bb.0:
322 ; ELEN32-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
323 ; ELEN32-NEXT:    vfmv.f.s fa0, v8
324 ; ELEN32-NEXT:    ret
325   %b = bitcast <2 x i16> %a to float
326   ret float %b
329 define float @bitcast_v1i32_f32(<1 x i32> %a) {
330 ; CHECK-LABEL: bitcast_v1i32_f32:
331 ; CHECK:       # %bb.0:
332 ; CHECK-NEXT:    vsetivli zero, 1, e32, mf2, ta, ma
333 ; CHECK-NEXT:    vfmv.f.s fa0, v8
334 ; CHECK-NEXT:    ret
336 ; ELEN32-LABEL: bitcast_v1i32_f32:
337 ; ELEN32:       # %bb.0:
338 ; ELEN32-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
339 ; ELEN32-NEXT:    vfmv.f.s fa0, v8
340 ; ELEN32-NEXT:    ret
341   %b = bitcast <1 x i32> %a to float
342   ret float %b
345 define double @bitcast_v8i8_f64(<8 x i8> %a) {
346 ; CHECK-LABEL: bitcast_v8i8_f64:
347 ; CHECK:       # %bb.0:
348 ; CHECK-NEXT:    vsetivli zero, 1, e64, m1, ta, ma
349 ; CHECK-NEXT:    vfmv.f.s fa0, v8
350 ; CHECK-NEXT:    ret
352 ; ELEN32-LABEL: bitcast_v8i8_f64:
353 ; ELEN32:       # %bb.0:
354 ; ELEN32-NEXT:    addi sp, sp, -16
355 ; ELEN32-NEXT:    .cfi_def_cfa_offset 16
356 ; ELEN32-NEXT:    addi a0, sp, 8
357 ; ELEN32-NEXT:    vsetivli zero, 8, e8, mf2, ta, ma
358 ; ELEN32-NEXT:    vse8.v v8, (a0)
359 ; ELEN32-NEXT:    fld fa0, 8(sp)
360 ; ELEN32-NEXT:    addi sp, sp, 16
361 ; ELEN32-NEXT:    ret
362   %b = bitcast <8 x i8> %a to double
363   ret double %b
366 define double @bitcast_v4i16_f64(<4 x i16> %a) {
367 ; CHECK-LABEL: bitcast_v4i16_f64:
368 ; CHECK:       # %bb.0:
369 ; CHECK-NEXT:    vsetivli zero, 1, e64, m1, ta, ma
370 ; CHECK-NEXT:    vfmv.f.s fa0, v8
371 ; CHECK-NEXT:    ret
373 ; ELEN32-LABEL: bitcast_v4i16_f64:
374 ; ELEN32:       # %bb.0:
375 ; ELEN32-NEXT:    addi sp, sp, -16
376 ; ELEN32-NEXT:    .cfi_def_cfa_offset 16
377 ; ELEN32-NEXT:    addi a0, sp, 8
378 ; ELEN32-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
379 ; ELEN32-NEXT:    vse16.v v8, (a0)
380 ; ELEN32-NEXT:    fld fa0, 8(sp)
381 ; ELEN32-NEXT:    addi sp, sp, 16
382 ; ELEN32-NEXT:    ret
383   %b = bitcast <4 x i16> %a to double
384   ret double %b
387 define double @bitcast_v2i32_f64(<2 x i32> %a) {
388 ; CHECK-LABEL: bitcast_v2i32_f64:
389 ; CHECK:       # %bb.0:
390 ; CHECK-NEXT:    vsetivli zero, 1, e64, m1, ta, ma
391 ; CHECK-NEXT:    vfmv.f.s fa0, v8
392 ; CHECK-NEXT:    ret
394 ; ELEN32-LABEL: bitcast_v2i32_f64:
395 ; ELEN32:       # %bb.0:
396 ; ELEN32-NEXT:    addi sp, sp, -16
397 ; ELEN32-NEXT:    .cfi_def_cfa_offset 16
398 ; ELEN32-NEXT:    addi a0, sp, 8
399 ; ELEN32-NEXT:    vsetivli zero, 2, e32, m1, ta, ma
400 ; ELEN32-NEXT:    vse32.v v8, (a0)
401 ; ELEN32-NEXT:    fld fa0, 8(sp)
402 ; ELEN32-NEXT:    addi sp, sp, 16
403 ; ELEN32-NEXT:    ret
404   %b = bitcast <2 x i32> %a to double
405   ret double %b
408 define double @bitcast_v1i64_f64(<1 x i64> %a) {
409 ; CHECK-LABEL: bitcast_v1i64_f64:
410 ; CHECK:       # %bb.0:
411 ; CHECK-NEXT:    vsetivli zero, 1, e64, m1, ta, ma
412 ; CHECK-NEXT:    vfmv.f.s fa0, v8
413 ; CHECK-NEXT:    ret
415 ; RV32ELEN32-LABEL: bitcast_v1i64_f64:
416 ; RV32ELEN32:       # %bb.0:
417 ; RV32ELEN32-NEXT:    addi sp, sp, -16
418 ; RV32ELEN32-NEXT:    .cfi_def_cfa_offset 16
419 ; RV32ELEN32-NEXT:    sw a0, 8(sp)
420 ; RV32ELEN32-NEXT:    sw a1, 12(sp)
421 ; RV32ELEN32-NEXT:    fld fa0, 8(sp)
422 ; RV32ELEN32-NEXT:    addi sp, sp, 16
423 ; RV32ELEN32-NEXT:    ret
425 ; RV64ELEN32-LABEL: bitcast_v1i64_f64:
426 ; RV64ELEN32:       # %bb.0:
427 ; RV64ELEN32-NEXT:    fmv.d.x fa0, a0
428 ; RV64ELEN32-NEXT:    ret
429   %b = bitcast <1 x i64> %a to double
430   ret double %b
433 define <1 x i16> @bitcast_i16_v1i16(i16 %a) {
434 ; CHECK-LABEL: bitcast_i16_v1i16:
435 ; CHECK:       # %bb.0:
436 ; CHECK-NEXT:    vsetivli zero, 1, e16, m1, ta, ma
437 ; CHECK-NEXT:    vmv.s.x v8, a0
438 ; CHECK-NEXT:    ret
440 ; ELEN32-LABEL: bitcast_i16_v1i16:
441 ; ELEN32:       # %bb.0:
442 ; ELEN32-NEXT:    vsetivli zero, 1, e16, m1, ta, ma
443 ; ELEN32-NEXT:    vmv.s.x v8, a0
444 ; ELEN32-NEXT:    ret
445   %b = bitcast i16 %a to <1 x i16>
446   ret <1 x i16> %b
449 define <2 x i16> @bitcast_i32_v2i16(i32 %a) {
450 ; CHECK-LABEL: bitcast_i32_v2i16:
451 ; CHECK:       # %bb.0:
452 ; CHECK-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
453 ; CHECK-NEXT:    vmv.s.x v8, a0
454 ; CHECK-NEXT:    ret
456 ; ELEN32-LABEL: bitcast_i32_v2i16:
457 ; ELEN32:       # %bb.0:
458 ; ELEN32-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
459 ; ELEN32-NEXT:    vmv.s.x v8, a0
460 ; ELEN32-NEXT:    ret
461   %b = bitcast i32 %a to <2 x i16>
462   ret <2 x i16> %b
465 define <1 x i32> @bitcast_i32_v1i32(i32 %a) {
466 ; CHECK-LABEL: bitcast_i32_v1i32:
467 ; CHECK:       # %bb.0:
468 ; CHECK-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
469 ; CHECK-NEXT:    vmv.s.x v8, a0
470 ; CHECK-NEXT:    ret
472 ; ELEN32-LABEL: bitcast_i32_v1i32:
473 ; ELEN32:       # %bb.0:
474 ; ELEN32-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
475 ; ELEN32-NEXT:    vmv.s.x v8, a0
476 ; ELEN32-NEXT:    ret
477   %b = bitcast i32 %a to <1 x i32>
478   ret <1 x i32> %b
481 define <4 x i16> @bitcast_i64_v4i16(i64 %a) {
482 ; RV32-LABEL: bitcast_i64_v4i16:
483 ; RV32:       # %bb.0:
484 ; RV32-NEXT:    vsetivli zero, 2, e32, m1, ta, ma
485 ; RV32-NEXT:    vslide1down.vx v8, v8, a0
486 ; RV32-NEXT:    vslide1down.vx v8, v8, a1
487 ; RV32-NEXT:    ret
489 ; RV64-LABEL: bitcast_i64_v4i16:
490 ; RV64:       # %bb.0:
491 ; RV64-NEXT:    vsetivli zero, 1, e64, m1, ta, ma
492 ; RV64-NEXT:    vmv.s.x v8, a0
493 ; RV64-NEXT:    ret
495 ; RV32ELEN32-LABEL: bitcast_i64_v4i16:
496 ; RV32ELEN32:       # %bb.0:
497 ; RV32ELEN32-NEXT:    vsetivli zero, 2, e32, m1, ta, ma
498 ; RV32ELEN32-NEXT:    vmv.v.x v8, a0
499 ; RV32ELEN32-NEXT:    vslide1down.vx v8, v8, a1
500 ; RV32ELEN32-NEXT:    ret
502 ; RV64ELEN32-LABEL: bitcast_i64_v4i16:
503 ; RV64ELEN32:       # %bb.0:
504 ; RV64ELEN32-NEXT:    addi sp, sp, -16
505 ; RV64ELEN32-NEXT:    .cfi_def_cfa_offset 16
506 ; RV64ELEN32-NEXT:    sd a0, 8(sp)
507 ; RV64ELEN32-NEXT:    addi a0, sp, 8
508 ; RV64ELEN32-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
509 ; RV64ELEN32-NEXT:    vle16.v v8, (a0)
510 ; RV64ELEN32-NEXT:    addi sp, sp, 16
511 ; RV64ELEN32-NEXT:    ret
512   %b = bitcast i64 %a to <4 x i16>
513   ret <4 x i16> %b
516 define <2 x i32> @bitcast_i64_v2i32(i64 %a) {
517 ; RV32-LABEL: bitcast_i64_v2i32:
518 ; RV32:       # %bb.0:
519 ; RV32-NEXT:    vsetivli zero, 2, e32, m1, ta, ma
520 ; RV32-NEXT:    vslide1down.vx v8, v8, a0
521 ; RV32-NEXT:    vslide1down.vx v8, v8, a1
522 ; RV32-NEXT:    ret
524 ; RV64-LABEL: bitcast_i64_v2i32:
525 ; RV64:       # %bb.0:
526 ; RV64-NEXT:    vsetivli zero, 1, e64, m1, ta, ma
527 ; RV64-NEXT:    vmv.s.x v8, a0
528 ; RV64-NEXT:    ret
530 ; RV32ELEN32-LABEL: bitcast_i64_v2i32:
531 ; RV32ELEN32:       # %bb.0:
532 ; RV32ELEN32-NEXT:    vsetivli zero, 2, e32, m1, ta, ma
533 ; RV32ELEN32-NEXT:    vmv.v.x v8, a0
534 ; RV32ELEN32-NEXT:    vslide1down.vx v8, v8, a1
535 ; RV32ELEN32-NEXT:    ret
537 ; RV64ELEN32-LABEL: bitcast_i64_v2i32:
538 ; RV64ELEN32:       # %bb.0:
539 ; RV64ELEN32-NEXT:    addi sp, sp, -16
540 ; RV64ELEN32-NEXT:    .cfi_def_cfa_offset 16
541 ; RV64ELEN32-NEXT:    sd a0, 8(sp)
542 ; RV64ELEN32-NEXT:    addi a0, sp, 8
543 ; RV64ELEN32-NEXT:    vsetivli zero, 2, e32, m1, ta, ma
544 ; RV64ELEN32-NEXT:    vle32.v v8, (a0)
545 ; RV64ELEN32-NEXT:    addi sp, sp, 16
546 ; RV64ELEN32-NEXT:    ret
547   %b = bitcast i64 %a to <2 x i32>
548   ret <2 x i32> %b
551 define <1 x i64> @bitcast_i64_v1i64(i64 %a) {
552 ; RV32-LABEL: bitcast_i64_v1i64:
553 ; RV32:       # %bb.0:
554 ; RV32-NEXT:    vsetivli zero, 2, e32, m1, ta, ma
555 ; RV32-NEXT:    vslide1down.vx v8, v8, a0
556 ; RV32-NEXT:    vslide1down.vx v8, v8, a1
557 ; RV32-NEXT:    ret
559 ; RV64-LABEL: bitcast_i64_v1i64:
560 ; RV64:       # %bb.0:
561 ; RV64-NEXT:    vsetivli zero, 1, e64, m1, ta, ma
562 ; RV64-NEXT:    vmv.s.x v8, a0
563 ; RV64-NEXT:    ret
565 ; ELEN32-LABEL: bitcast_i64_v1i64:
566 ; ELEN32:       # %bb.0:
567 ; ELEN32-NEXT:    ret
568   %b = bitcast i64 %a to <1 x i64>
569   ret <1 x i64> %b