1
1
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2
- ; RUN: llc -mtriple=riscv32 -mattr=+v,+d,+zvfh -verify-machineinstrs \
3
- ; RUN: -target-abi=ilp32d < %s | FileCheck %s --check-prefixes=CHECK,RV32
4
- ; RUN: llc -mtriple=riscv64 -mattr=+v,+d,+zvfh -verify-machineinstrs \
5
- ; RUN: -target-abi=lp64d < %s | FileCheck %s --check-prefixes=CHECK,RV64
6
- ; RUN: llc -mtriple=riscv32 -mattr=+zve32f,+zvl128b,+d,+zvfh \
2
+ ; RUN: llc -mtriple=riscv32 -mattr=+v,+d,+zvfh,+zfbfmin,+zvfbfmin -verify-machineinstrs \
3
+ ; RUN: -target-abi=ilp32d < %s | FileCheck %s --check-prefixes=CHECK,ZVFH,RV32
4
+ ; RUN: llc -mtriple=riscv64 -mattr=+v,+d,+zvfh,+zfbfmin,+zvfbfmin -verify-machineinstrs \
5
+ ; RUN: -target-abi=lp64d < %s | FileCheck %s --check-prefixes=CHECK,ZVFH,RV64
6
+ ; RUN: llc -mtriple=riscv32 -mattr=+v,+d,+zfhmin,+zvfhmin,+zfbfmin,+zvfbfmin -verify-machineinstrs \
7
+ ; RUN: -target-abi=ilp32d < %s | FileCheck %s --check-prefixes=CHECK,ZVFHMIN,RV32
8
+ ; RUN: llc -mtriple=riscv64 -mattr=+v,+d,+zfhmin,+zvfhmin,+zfbfmin,+zvfbfmin -verify-machineinstrs \
9
+ ; RUN: -target-abi=lp64d < %s | FileCheck %s --check-prefixes=CHECK,ZVFHMIN,RV64
10
+ ; RUN: llc -mtriple=riscv32 -mattr=+zve32f,+zvl128b,+d,+zvfh,+zfbfmin,+zvfbfmin \
7
11
; RUN: -verify-machineinstrs -target-abi=ilp32d < %s | FileCheck %s \
8
12
; RUN: --check-prefixes=ELEN32,RV32ELEN32
9
- ; RUN: llc -mtriple=riscv64 -mattr=+zve32f,+zvl128b,+d,+zvfh \
13
+ ; RUN: llc -mtriple=riscv64 -mattr=+zve32f,+zvl128b,+d,+zvfh,+zfbfmin,+zvfbfmin \
10
14
; RUN: -verify-machineinstrs -target-abi=lp64d < %s | FileCheck %s \
11
15
; RUN: --check-prefixes=ELEN32,RV64ELEN32
12
16
@@ -262,13 +266,92 @@ define i64 @bitcast_v1i64_i64(<1 x i64> %a) {
262
266
ret i64 %b
263
267
}
264
268
265
- define half @bitcast_v2i8_f16 (<2 x i8 > %a ) {
266
- ; CHECK-LABEL: bitcast_v2i8_f16 :
269
+ define bfloat @bitcast_v2i8_bf16 (<2 x i8 > %a ) {
270
+ ; CHECK-LABEL: bitcast_v2i8_bf16 :
267
271
; CHECK: # %bb.0:
268
272
; CHECK-NEXT: vsetivli zero, 1, e16, m1, ta, ma
269
- ; CHECK-NEXT: vfmv.f.s fa0, v8
273
+ ; CHECK-NEXT: vmv.x.s a0, v8
274
+ ; CHECK-NEXT: fmv.h.x fa0, a0
275
+ ; CHECK-NEXT: ret
276
+ ;
277
+ ; ELEN32-LABEL: bitcast_v2i8_bf16:
278
+ ; ELEN32: # %bb.0:
279
+ ; ELEN32-NEXT: vsetivli zero, 1, e16, m1, ta, ma
280
+ ; ELEN32-NEXT: vmv.x.s a0, v8
281
+ ; ELEN32-NEXT: fmv.h.x fa0, a0
282
+ ; ELEN32-NEXT: ret
283
+ %b = bitcast <2 x i8 > %a to bfloat
284
+ ret bfloat %b
285
+ }
286
+
287
+ define bfloat @bitcast_v1i16_bf16 (<1 x i16 > %a ) {
288
+ ; CHECK-LABEL: bitcast_v1i16_bf16:
289
+ ; CHECK: # %bb.0:
290
+ ; CHECK-NEXT: vsetivli zero, 1, e16, m1, ta, ma
291
+ ; CHECK-NEXT: vmv.x.s a0, v8
292
+ ; CHECK-NEXT: fmv.h.x fa0, a0
293
+ ; CHECK-NEXT: ret
294
+ ;
295
+ ; ELEN32-LABEL: bitcast_v1i16_bf16:
296
+ ; ELEN32: # %bb.0:
297
+ ; ELEN32-NEXT: vsetivli zero, 1, e16, m1, ta, ma
298
+ ; ELEN32-NEXT: vmv.x.s a0, v8
299
+ ; ELEN32-NEXT: fmv.h.x fa0, a0
300
+ ; ELEN32-NEXT: ret
301
+ %b = bitcast <1 x i16 > %a to bfloat
302
+ ret bfloat %b
303
+ }
304
+
305
+ define bfloat @bitcast_v1bf16_bf16 (<1 x bfloat> %a ) {
306
+ ; CHECK-LABEL: bitcast_v1bf16_bf16:
307
+ ; CHECK: # %bb.0:
308
+ ; CHECK-NEXT: vsetivli zero, 1, e16, m1, ta, ma
309
+ ; CHECK-NEXT: vmv.x.s a0, v8
310
+ ; CHECK-NEXT: fmv.h.x fa0, a0
311
+ ; CHECK-NEXT: ret
312
+ ;
313
+ ; ELEN32-LABEL: bitcast_v1bf16_bf16:
314
+ ; ELEN32: # %bb.0:
315
+ ; ELEN32-NEXT: vsetivli zero, 1, e16, m1, ta, ma
316
+ ; ELEN32-NEXT: vmv.x.s a0, v8
317
+ ; ELEN32-NEXT: fmv.h.x fa0, a0
318
+ ; ELEN32-NEXT: ret
319
+ %b = bitcast <1 x bfloat> %a to bfloat
320
+ ret bfloat %b
321
+ }
322
+
323
+ define <1 x bfloat> @bitcast_bf16_v1bf16 (bfloat %a ) {
324
+ ; CHECK-LABEL: bitcast_bf16_v1bf16:
325
+ ; CHECK: # %bb.0:
326
+ ; CHECK-NEXT: fmv.x.h a0, fa0
327
+ ; CHECK-NEXT: vsetivli zero, 1, e16, m1, ta, ma
328
+ ; CHECK-NEXT: vmv.s.x v8, a0
270
329
; CHECK-NEXT: ret
271
330
;
331
+ ; ELEN32-LABEL: bitcast_bf16_v1bf16:
332
+ ; ELEN32: # %bb.0:
333
+ ; ELEN32-NEXT: fmv.x.h a0, fa0
334
+ ; ELEN32-NEXT: vsetivli zero, 1, e16, m1, ta, ma
335
+ ; ELEN32-NEXT: vmv.s.x v8, a0
336
+ ; ELEN32-NEXT: ret
337
+ %b = bitcast bfloat %a to <1 x bfloat>
338
+ ret <1 x bfloat> %b
339
+ }
340
+
341
+ define half @bitcast_v2i8_f16 (<2 x i8 > %a ) {
342
+ ; ZVFH-LABEL: bitcast_v2i8_f16:
343
+ ; ZVFH: # %bb.0:
344
+ ; ZVFH-NEXT: vsetivli zero, 1, e16, m1, ta, ma
345
+ ; ZVFH-NEXT: vfmv.f.s fa0, v8
346
+ ; ZVFH-NEXT: ret
347
+ ;
348
+ ; ZVFHMIN-LABEL: bitcast_v2i8_f16:
349
+ ; ZVFHMIN: # %bb.0:
350
+ ; ZVFHMIN-NEXT: vsetivli zero, 1, e16, m1, ta, ma
351
+ ; ZVFHMIN-NEXT: vmv.x.s a0, v8
352
+ ; ZVFHMIN-NEXT: fmv.h.x fa0, a0
353
+ ; ZVFHMIN-NEXT: ret
354
+ ;
272
355
; ELEN32-LABEL: bitcast_v2i8_f16:
273
356
; ELEN32: # %bb.0:
274
357
; ELEN32-NEXT: vsetivli zero, 1, e16, m1, ta, ma
@@ -279,11 +362,18 @@ define half @bitcast_v2i8_f16(<2 x i8> %a) {
279
362
}
280
363
281
364
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, m1, ta, ma
285
- ; CHECK-NEXT: vfmv.f.s fa0, v8
286
- ; CHECK-NEXT: ret
365
+ ; ZVFH-LABEL: bitcast_v1i16_f16:
366
+ ; ZVFH: # %bb.0:
367
+ ; ZVFH-NEXT: vsetivli zero, 1, e16, m1, ta, ma
368
+ ; ZVFH-NEXT: vfmv.f.s fa0, v8
369
+ ; ZVFH-NEXT: ret
370
+ ;
371
+ ; ZVFHMIN-LABEL: bitcast_v1i16_f16:
372
+ ; ZVFHMIN: # %bb.0:
373
+ ; ZVFHMIN-NEXT: vsetivli zero, 1, e16, m1, ta, ma
374
+ ; ZVFHMIN-NEXT: vmv.x.s a0, v8
375
+ ; ZVFHMIN-NEXT: fmv.h.x fa0, a0
376
+ ; ZVFHMIN-NEXT: ret
287
377
;
288
378
; ELEN32-LABEL: bitcast_v1i16_f16:
289
379
; ELEN32: # %bb.0:
@@ -294,6 +384,52 @@ define half @bitcast_v1i16_f16(<1 x i16> %a) {
294
384
ret half %b
295
385
}
296
386
387
+ define half @bitcast_v1f16_f16 (<1 x half > %a ) {
388
+ ; ZVFH-LABEL: bitcast_v1f16_f16:
389
+ ; ZVFH: # %bb.0:
390
+ ; ZVFH-NEXT: vsetivli zero, 1, e16, m1, ta, ma
391
+ ; ZVFH-NEXT: vfmv.f.s fa0, v8
392
+ ; ZVFH-NEXT: ret
393
+ ;
394
+ ; ZVFHMIN-LABEL: bitcast_v1f16_f16:
395
+ ; ZVFHMIN: # %bb.0:
396
+ ; ZVFHMIN-NEXT: vsetivli zero, 1, e16, m1, ta, ma
397
+ ; ZVFHMIN-NEXT: vmv.x.s a0, v8
398
+ ; ZVFHMIN-NEXT: fmv.h.x fa0, a0
399
+ ; ZVFHMIN-NEXT: ret
400
+ ;
401
+ ; ELEN32-LABEL: bitcast_v1f16_f16:
402
+ ; ELEN32: # %bb.0:
403
+ ; ELEN32-NEXT: vsetivli zero, 1, e16, m1, ta, ma
404
+ ; ELEN32-NEXT: vfmv.f.s fa0, v8
405
+ ; ELEN32-NEXT: ret
406
+ %b = bitcast <1 x half > %a to half
407
+ ret half %b
408
+ }
409
+
410
+ define <1 x half > @bitcast_f16_v1f16 (half %a ) {
411
+ ; ZVFH-LABEL: bitcast_f16_v1f16:
412
+ ; ZVFH: # %bb.0:
413
+ ; ZVFH-NEXT: vsetivli zero, 1, e16, m1, ta, ma
414
+ ; ZVFH-NEXT: vfmv.s.f v8, fa0
415
+ ; ZVFH-NEXT: ret
416
+ ;
417
+ ; ZVFHMIN-LABEL: bitcast_f16_v1f16:
418
+ ; ZVFHMIN: # %bb.0:
419
+ ; ZVFHMIN-NEXT: fmv.x.h a0, fa0
420
+ ; ZVFHMIN-NEXT: vsetivli zero, 1, e16, m1, ta, ma
421
+ ; ZVFHMIN-NEXT: vmv.s.x v8, a0
422
+ ; ZVFHMIN-NEXT: ret
423
+ ;
424
+ ; ELEN32-LABEL: bitcast_f16_v1f16:
425
+ ; ELEN32: # %bb.0:
426
+ ; ELEN32-NEXT: vsetivli zero, 1, e16, m1, ta, ma
427
+ ; ELEN32-NEXT: vfmv.s.f v8, fa0
428
+ ; ELEN32-NEXT: ret
429
+ %b = bitcast half %a to <1 x half >
430
+ ret <1 x half > %b
431
+ }
432
+
297
433
define float @bitcast_v4i8_f32 (<4 x i8 > %a ) {
298
434
; CHECK-LABEL: bitcast_v4i8_f32:
299
435
; CHECK: # %bb.0:
0 commit comments