|
1 | 1 | ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 4
|
2 |
| -; RUN: llc -verify-machineinstrs -mtriple=riscv32 -mattr=+m,+v,+f,+d,+zfh,+zvfh %s -o - | FileCheck %s |
3 |
| -; RUN: llc -verify-machineinstrs -mtriple=riscv64 -mattr=+m,+v,+f,+d,+zfh,+zvfh %s -o - | FileCheck %s |
| 2 | +; RUN: llc -verify-machineinstrs -mtriple=riscv32 -mattr=+m,+v,+f,+d,+zvfh,+zvfbfmin < %s | FileCheck %s |
| 3 | +; RUN: llc -verify-machineinstrs -mtriple=riscv64 -mattr=+m,+v,+f,+d,+zvfh,+zvfbfmin < %s | FileCheck %s |
| 4 | +; RUN: llc -verify-machineinstrs -mtriple=riscv32 -mattr=+m,+v,+f,+d,+zvfhmin,+zvfbfmin < %s | FileCheck %s |
| 5 | +; RUN: llc -verify-machineinstrs -mtriple=riscv64 -mattr=+m,+v,+f,+d,+zvfhmin,+zvfbfmin < %s | FileCheck %s |
4 | 6 |
|
5 | 7 | ; Vector compress for i8 type
|
6 | 8 |
|
@@ -472,6 +474,134 @@ define <vscale x 8 x i64> @vector_compress_nxv8i64_passthru(<vscale x 8 x i64> %
|
472 | 474 | ret <vscale x 8 x i64> %ret
|
473 | 475 | }
|
474 | 476 |
|
| 477 | +; Vector compress for bf16 type |
| 478 | + |
| 479 | +define <vscale x 1 x bfloat> @vector_compress_nxv1bf16(<vscale x 1 x bfloat> %data, <vscale x 1 x i1> %mask) { |
| 480 | +; CHECK-LABEL: vector_compress_nxv1bf16: |
| 481 | +; CHECK: # %bb.0: |
| 482 | +; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, ma |
| 483 | +; CHECK-NEXT: vcompress.vm v9, v8, v0 |
| 484 | +; CHECK-NEXT: vmv1r.v v8, v9 |
| 485 | +; CHECK-NEXT: ret |
| 486 | + %ret = call <vscale x 1 x bfloat> @llvm.experimental.vector.compress.nxv1bf16(<vscale x 1 x bfloat> %data, <vscale x 1 x i1> %mask, <vscale x 1 x bfloat> undef) |
| 487 | + ret <vscale x 1 x bfloat> %ret |
| 488 | +} |
| 489 | + |
| 490 | +define <vscale x 1 x bfloat> @vector_compress_nxv1bf16_passthru(<vscale x 1 x bfloat> %passthru, <vscale x 1 x bfloat> %data, <vscale x 1 x i1> %mask) { |
| 491 | +; CHECK-LABEL: vector_compress_nxv1bf16_passthru: |
| 492 | +; CHECK: # %bb.0: |
| 493 | +; CHECK-NEXT: vsetvli a0, zero, e16, mf4, tu, ma |
| 494 | +; CHECK-NEXT: vcompress.vm v8, v9, v0 |
| 495 | +; CHECK-NEXT: ret |
| 496 | + %ret = call <vscale x 1 x bfloat> @llvm.experimental.vector.compress.nxv1bf16(<vscale x 1 x bfloat> %data, <vscale x 1 x i1> %mask, <vscale x 1 x bfloat> %passthru) |
| 497 | + ret <vscale x 1 x bfloat> %ret |
| 498 | +} |
| 499 | + |
| 500 | +define <vscale x 2 x bfloat> @vector_compress_nxv2bf16(<vscale x 2 x bfloat> %data, <vscale x 2 x i1> %mask) { |
| 501 | +; CHECK-LABEL: vector_compress_nxv2bf16: |
| 502 | +; CHECK: # %bb.0: |
| 503 | +; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, ma |
| 504 | +; CHECK-NEXT: vcompress.vm v9, v8, v0 |
| 505 | +; CHECK-NEXT: vmv1r.v v8, v9 |
| 506 | +; CHECK-NEXT: ret |
| 507 | + %ret = call <vscale x 2 x bfloat> @llvm.experimental.vector.compress.nxv2bf16(<vscale x 2 x bfloat> %data, <vscale x 2 x i1> %mask, <vscale x 2 x bfloat> undef) |
| 508 | + ret <vscale x 2 x bfloat> %ret |
| 509 | +} |
| 510 | + |
| 511 | +define <vscale x 2 x bfloat> @vector_compress_nxv2bf16_passthru(<vscale x 2 x bfloat> %passthru, <vscale x 2 x bfloat> %data, <vscale x 2 x i1> %mask) { |
| 512 | +; CHECK-LABEL: vector_compress_nxv2bf16_passthru: |
| 513 | +; CHECK: # %bb.0: |
| 514 | +; CHECK-NEXT: vsetvli a0, zero, e16, mf2, tu, ma |
| 515 | +; CHECK-NEXT: vcompress.vm v8, v9, v0 |
| 516 | +; CHECK-NEXT: ret |
| 517 | + %ret = call <vscale x 2 x bfloat> @llvm.experimental.vector.compress.nxv2bf16(<vscale x 2 x bfloat> %data, <vscale x 2 x i1> %mask, <vscale x 2 x bfloat> %passthru) |
| 518 | + ret <vscale x 2 x bfloat> %ret |
| 519 | +} |
| 520 | + |
| 521 | +define <vscale x 4 x bfloat> @vector_compress_nxv4bf16(<vscale x 4 x bfloat> %data, <vscale x 4 x i1> %mask) { |
| 522 | +; CHECK-LABEL: vector_compress_nxv4bf16: |
| 523 | +; CHECK: # %bb.0: |
| 524 | +; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, ma |
| 525 | +; CHECK-NEXT: vcompress.vm v9, v8, v0 |
| 526 | +; CHECK-NEXT: vmv.v.v v8, v9 |
| 527 | +; CHECK-NEXT: ret |
| 528 | + %ret = call <vscale x 4 x bfloat> @llvm.experimental.vector.compress.nxv4bf16(<vscale x 4 x bfloat> %data, <vscale x 4 x i1> %mask, <vscale x 4 x bfloat> undef) |
| 529 | + ret <vscale x 4 x bfloat> %ret |
| 530 | +} |
| 531 | + |
| 532 | +define <vscale x 4 x bfloat> @vector_compress_nxv4bf16_passthru(<vscale x 4 x bfloat> %passthru, <vscale x 4 x bfloat> %data, <vscale x 4 x i1> %mask) { |
| 533 | +; CHECK-LABEL: vector_compress_nxv4bf16_passthru: |
| 534 | +; CHECK: # %bb.0: |
| 535 | +; CHECK-NEXT: vsetvli a0, zero, e16, m1, tu, ma |
| 536 | +; CHECK-NEXT: vcompress.vm v8, v9, v0 |
| 537 | +; CHECK-NEXT: ret |
| 538 | + %ret = call <vscale x 4 x bfloat> @llvm.experimental.vector.compress.nxv4bf16(<vscale x 4 x bfloat> %data, <vscale x 4 x i1> %mask, <vscale x 4 x bfloat> %passthru) |
| 539 | + ret <vscale x 4 x bfloat> %ret |
| 540 | +} |
| 541 | + |
| 542 | +define <vscale x 8 x bfloat> @vector_compress_nxv8bf16(<vscale x 8 x bfloat> %data, <vscale x 8 x i1> %mask) { |
| 543 | +; CHECK-LABEL: vector_compress_nxv8bf16: |
| 544 | +; CHECK: # %bb.0: |
| 545 | +; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, ma |
| 546 | +; CHECK-NEXT: vcompress.vm v10, v8, v0 |
| 547 | +; CHECK-NEXT: vmv.v.v v8, v10 |
| 548 | +; CHECK-NEXT: ret |
| 549 | + %ret = call <vscale x 8 x bfloat> @llvm.experimental.vector.compress.nxv8bf16(<vscale x 8 x bfloat> %data, <vscale x 8 x i1> %mask, <vscale x 8 x bfloat> undef) |
| 550 | + ret <vscale x 8 x bfloat> %ret |
| 551 | +} |
| 552 | + |
| 553 | +define <vscale x 8 x bfloat> @vector_compress_nxv8bf16_passthru(<vscale x 8 x bfloat> %passthru, <vscale x 8 x bfloat> %data, <vscale x 8 x i1> %mask) { |
| 554 | +; CHECK-LABEL: vector_compress_nxv8bf16_passthru: |
| 555 | +; CHECK: # %bb.0: |
| 556 | +; CHECK-NEXT: vsetvli a0, zero, e16, m2, tu, ma |
| 557 | +; CHECK-NEXT: vcompress.vm v8, v10, v0 |
| 558 | +; CHECK-NEXT: ret |
| 559 | + %ret = call <vscale x 8 x bfloat> @llvm.experimental.vector.compress.nxv8bf16(<vscale x 8 x bfloat> %data, <vscale x 8 x i1> %mask, <vscale x 8 x bfloat> %passthru) |
| 560 | + ret <vscale x 8 x bfloat> %ret |
| 561 | +} |
| 562 | + |
| 563 | +define <vscale x 16 x bfloat> @vector_compress_nxv16bf16(<vscale x 16 x bfloat> %data, <vscale x 16 x i1> %mask) { |
| 564 | +; CHECK-LABEL: vector_compress_nxv16bf16: |
| 565 | +; CHECK: # %bb.0: |
| 566 | +; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, ma |
| 567 | +; CHECK-NEXT: vcompress.vm v12, v8, v0 |
| 568 | +; CHECK-NEXT: vmv.v.v v8, v12 |
| 569 | +; CHECK-NEXT: ret |
| 570 | + %ret = call <vscale x 16 x bfloat> @llvm.experimental.vector.compress.nxv16bf16(<vscale x 16 x bfloat> %data, <vscale x 16 x i1> %mask, <vscale x 16 x bfloat> undef) |
| 571 | + ret <vscale x 16 x bfloat> %ret |
| 572 | +} |
| 573 | + |
| 574 | +define <vscale x 16 x bfloat> @vector_compress_nxv16bf16_passthru(<vscale x 16 x bfloat> %passthru, <vscale x 16 x bfloat> %data, <vscale x 16 x i1> %mask) { |
| 575 | +; CHECK-LABEL: vector_compress_nxv16bf16_passthru: |
| 576 | +; CHECK: # %bb.0: |
| 577 | +; CHECK-NEXT: vsetvli a0, zero, e16, m4, tu, ma |
| 578 | +; CHECK-NEXT: vcompress.vm v8, v12, v0 |
| 579 | +; CHECK-NEXT: ret |
| 580 | + %ret = call <vscale x 16 x bfloat> @llvm.experimental.vector.compress.nxv16bf16(<vscale x 16 x bfloat> %data, <vscale x 16 x i1> %mask, <vscale x 16 x bfloat> %passthru) |
| 581 | + ret <vscale x 16 x bfloat> %ret |
| 582 | +} |
| 583 | + |
| 584 | +define <vscale x 32 x bfloat> @vector_compress_nxv32bf16(<vscale x 32 x bfloat> %data, <vscale x 32 x i1> %mask) { |
| 585 | +; CHECK-LABEL: vector_compress_nxv32bf16: |
| 586 | +; CHECK: # %bb.0: |
| 587 | +; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, ma |
| 588 | +; CHECK-NEXT: vcompress.vm v16, v8, v0 |
| 589 | +; CHECK-NEXT: vmv.v.v v8, v16 |
| 590 | +; CHECK-NEXT: ret |
| 591 | + %ret = call <vscale x 32 x bfloat> @llvm.experimental.vector.compress.nxv32bf16(<vscale x 32 x bfloat> %data, <vscale x 32 x i1> %mask, <vscale x 32 x bfloat> undef) |
| 592 | + ret <vscale x 32 x bfloat> %ret |
| 593 | +} |
| 594 | + |
| 595 | +define <vscale x 32 x bfloat> @vector_compress_nxv32bf16_passthru(<vscale x 32 x bfloat> %passthru, <vscale x 32 x bfloat> %data, <vscale x 32 x i1> %mask) { |
| 596 | +; CHECK-LABEL: vector_compress_nxv32bf16_passthru: |
| 597 | +; CHECK: # %bb.0: |
| 598 | +; CHECK-NEXT: vsetvli a0, zero, e16, m8, tu, ma |
| 599 | +; CHECK-NEXT: vcompress.vm v8, v16, v0 |
| 600 | +; CHECK-NEXT: ret |
| 601 | + %ret = call <vscale x 32 x bfloat> @llvm.experimental.vector.compress.nxv32bf16(<vscale x 32 x bfloat> %data, <vscale x 32 x i1> %mask, <vscale x 32 x bfloat> %passthru) |
| 602 | + ret <vscale x 32 x bfloat> %ret |
| 603 | +} |
| 604 | + |
475 | 605 | ; Vector compress for f16 type
|
476 | 606 |
|
477 | 607 | define <vscale x 1 x half> @vector_compress_nxv1f16(<vscale x 1 x half> %data, <vscale x 1 x i1> %mask) {
|
|
0 commit comments