|
1 | 1 | ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
|
2 |
| -; RUN: llc -mtriple=riscv32 -target-abi=ilp32d -mattr=+v,+zfh,+zvfh,+f,+d -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,ZVFH,ZVFH32 |
3 |
| -; RUN: llc -mtriple=riscv64 -target-abi=lp64d -mattr=+v,+zfh,+zvfh,+f,+d -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,ZVFH,ZVFH64 |
4 |
| -; RUN: llc -mtriple=riscv32 -target-abi=ilp32d -mattr=+v,+zfh,+zvfhmin,+f,+d -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,ZVFHMIN,ZVFHMIN32 |
5 |
| -; RUN: llc -mtriple=riscv64 -target-abi=lp64d -mattr=+v,+zfh,+zvfhmin,+f,+d -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,ZVFHMIN,ZVFHMIN64 |
| 2 | +; RUN: llc -mtriple=riscv32 -target-abi=ilp32d -mattr=+v,+zfh,+zvfh,+zvfbfmin,+f,+d -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,ZVFH,ZVFH32 |
| 3 | +; RUN: llc -mtriple=riscv64 -target-abi=lp64d -mattr=+v,+zfh,+zvfh,+zvfbfmin,+f,+d -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,ZVFH,ZVFH64 |
| 4 | +; RUN: llc -mtriple=riscv32 -target-abi=ilp32d -mattr=+v,+zfh,+zvfhmin,+zvfbfmin,+f,+d -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,ZVFHMIN,ZVFHMIN32 |
| 5 | +; RUN: llc -mtriple=riscv64 -target-abi=lp64d -mattr=+v,+zfh,+zvfhmin,+zvfbfmin,+f,+d -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,ZVFHMIN,ZVFHMIN64 |
6 | 6 |
|
7 | 7 | define void @si2fp_v2i32_v2f32(ptr %x, ptr %y) {
|
8 | 8 | ; CHECK-LABEL: si2fp_v2i32_v2f32:
|
@@ -418,6 +418,122 @@ define <8 x double> @ui2fp_v8i1_v8f64(<8 x i1> %x) {
|
418 | 418 | ret <8 x double> %z
|
419 | 419 | }
|
420 | 420 |
|
| 421 | +define void @si2fp_v2i64_v2bf16(ptr %x, ptr %y) { |
| 422 | +; CHECK-LABEL: si2fp_v2i64_v2bf16: |
| 423 | +; CHECK: # %bb.0: |
| 424 | +; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, ma |
| 425 | +; CHECK-NEXT: vle64.v v8, (a0) |
| 426 | +; CHECK-NEXT: vfncvt.f.x.w v9, v8 |
| 427 | +; CHECK-NEXT: vsetvli zero, zero, e16, mf4, ta, ma |
| 428 | +; CHECK-NEXT: vfncvtbf16.f.f.w v8, v9 |
| 429 | +; CHECK-NEXT: vse16.v v8, (a1) |
| 430 | +; CHECK-NEXT: ret |
| 431 | + %a = load <2 x i64>, ptr %x |
| 432 | + %d = sitofp <2 x i64> %a to <2 x bfloat> |
| 433 | + store <2 x bfloat> %d, ptr %y |
| 434 | + ret void |
| 435 | +} |
| 436 | + |
| 437 | +define void @ui2fp_v2i64_v2bf16(ptr %x, ptr %y) { |
| 438 | +; CHECK-LABEL: ui2fp_v2i64_v2bf16: |
| 439 | +; CHECK: # %bb.0: |
| 440 | +; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, ma |
| 441 | +; CHECK-NEXT: vle64.v v8, (a0) |
| 442 | +; CHECK-NEXT: vfncvt.f.xu.w v9, v8 |
| 443 | +; CHECK-NEXT: vsetvli zero, zero, e16, mf4, ta, ma |
| 444 | +; CHECK-NEXT: vfncvtbf16.f.f.w v8, v9 |
| 445 | +; CHECK-NEXT: vse16.v v8, (a1) |
| 446 | +; CHECK-NEXT: ret |
| 447 | + %a = load <2 x i64>, ptr %x |
| 448 | + %d = uitofp <2 x i64> %a to <2 x bfloat> |
| 449 | + store <2 x bfloat> %d, ptr %y |
| 450 | + ret void |
| 451 | +} |
| 452 | + |
| 453 | +define <2 x bfloat> @si2fp_v2i1_v2bf16(<2 x i1> %x) { |
| 454 | +; CHECK-LABEL: si2fp_v2i1_v2bf16: |
| 455 | +; CHECK: # %bb.0: |
| 456 | +; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, ma |
| 457 | +; CHECK-NEXT: vmv.v.i v8, 0 |
| 458 | +; CHECK-NEXT: vmerge.vim v8, v8, -1, v0 |
| 459 | +; CHECK-NEXT: vfwcvt.f.x.v v9, v8 |
| 460 | +; CHECK-NEXT: vfncvtbf16.f.f.w v8, v9 |
| 461 | +; CHECK-NEXT: ret |
| 462 | + %z = sitofp <2 x i1> %x to <2 x bfloat> |
| 463 | + ret <2 x bfloat> %z |
| 464 | +} |
| 465 | + |
| 466 | +define <2 x bfloat> @ui2fp_v2i1_v2bf16(<2 x i1> %x) { |
| 467 | +; CHECK-LABEL: ui2fp_v2i1_v2bf16: |
| 468 | +; CHECK: # %bb.0: |
| 469 | +; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, ma |
| 470 | +; CHECK-NEXT: vmv.v.i v8, 0 |
| 471 | +; CHECK-NEXT: vmerge.vim v8, v8, 1, v0 |
| 472 | +; CHECK-NEXT: vfwcvt.f.xu.v v9, v8 |
| 473 | +; CHECK-NEXT: vfncvtbf16.f.f.w v8, v9 |
| 474 | +; CHECK-NEXT: ret |
| 475 | + %z = uitofp <2 x i1> %x to <2 x bfloat> |
| 476 | + ret <2 x bfloat> %z |
| 477 | +} |
| 478 | + |
| 479 | +define void @si2fp_v8i64_v8bf16(ptr %x, ptr %y) { |
| 480 | +; CHECK-LABEL: si2fp_v8i64_v8bf16: |
| 481 | +; CHECK: # %bb.0: |
| 482 | +; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma |
| 483 | +; CHECK-NEXT: vle64.v v8, (a0) |
| 484 | +; CHECK-NEXT: vfncvt.f.x.w v12, v8 |
| 485 | +; CHECK-NEXT: vsetvli zero, zero, e16, m1, ta, ma |
| 486 | +; CHECK-NEXT: vfncvtbf16.f.f.w v8, v12 |
| 487 | +; CHECK-NEXT: vse16.v v8, (a1) |
| 488 | +; CHECK-NEXT: ret |
| 489 | + %a = load <8 x i64>, ptr %x |
| 490 | + %d = sitofp <8 x i64> %a to <8 x bfloat> |
| 491 | + store <8 x bfloat> %d, ptr %y |
| 492 | + ret void |
| 493 | +} |
| 494 | + |
| 495 | +define void @ui2fp_v8i64_v8bf16(ptr %x, ptr %y) { |
| 496 | +; CHECK-LABEL: ui2fp_v8i64_v8bf16: |
| 497 | +; CHECK: # %bb.0: |
| 498 | +; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma |
| 499 | +; CHECK-NEXT: vle64.v v8, (a0) |
| 500 | +; CHECK-NEXT: vfncvt.f.xu.w v12, v8 |
| 501 | +; CHECK-NEXT: vsetvli zero, zero, e16, m1, ta, ma |
| 502 | +; CHECK-NEXT: vfncvtbf16.f.f.w v8, v12 |
| 503 | +; CHECK-NEXT: vse16.v v8, (a1) |
| 504 | +; CHECK-NEXT: ret |
| 505 | + %a = load <8 x i64>, ptr %x |
| 506 | + %d = uitofp <8 x i64> %a to <8 x bfloat> |
| 507 | + store <8 x bfloat> %d, ptr %y |
| 508 | + ret void |
| 509 | +} |
| 510 | + |
| 511 | +define <8 x bfloat> @si2fp_v8i1_v8bf16(<8 x i1> %x) { |
| 512 | +; CHECK-LABEL: si2fp_v8i1_v8bf16: |
| 513 | +; CHECK: # %bb.0: |
| 514 | +; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma |
| 515 | +; CHECK-NEXT: vmv.v.i v8, 0 |
| 516 | +; CHECK-NEXT: vmerge.vim v8, v8, -1, v0 |
| 517 | +; CHECK-NEXT: vfwcvt.f.x.v v10, v8 |
| 518 | +; CHECK-NEXT: vfncvtbf16.f.f.w v8, v10 |
| 519 | +; CHECK-NEXT: ret |
| 520 | + %z = sitofp <8 x i1> %x to <8 x bfloat> |
| 521 | + ret <8 x bfloat> %z |
| 522 | +} |
| 523 | + |
| 524 | +define <8 x bfloat> @ui2fp_v8i1_v8bf16(<8 x i1> %x) { |
| 525 | +; CHECK-LABEL: ui2fp_v8i1_v8bf16: |
| 526 | +; CHECK: # %bb.0: |
| 527 | +; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma |
| 528 | +; CHECK-NEXT: vmv.v.i v8, 0 |
| 529 | +; CHECK-NEXT: vmerge.vim v8, v8, 1, v0 |
| 530 | +; CHECK-NEXT: vfwcvt.f.xu.v v10, v8 |
| 531 | +; CHECK-NEXT: vfncvtbf16.f.f.w v8, v10 |
| 532 | +; CHECK-NEXT: ret |
| 533 | + %z = uitofp <8 x i1> %x to <8 x bfloat> |
| 534 | + ret <8 x bfloat> %z |
| 535 | +} |
| 536 | + |
421 | 537 | define void @si2fp_v2i64_v2f16(ptr %x, ptr %y) {
|
422 | 538 | ; CHECK-LABEL: si2fp_v2i64_v2f16:
|
423 | 539 | ; CHECK: # %bb.0:
|
|
0 commit comments