|
1 | 1 | ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
|
2 |
| -; RUN: llc -mtriple riscv64 -mattr=+f,+d,+v,+zvfh,+zvfbfmin -verify-machineinstrs \ |
3 |
| -; RUN: < %s | FileCheck %s |
4 |
| -; RUN: llc -mtriple riscv64 -mattr=+f,+d,+v,+zvfhmin,+zvfbfmin -verify-machineinstrs \ |
5 |
| -; RUN: < %s | FileCheck %s |
| 2 | +; RUN: llc -mtriple riscv64 -mattr=+f,+d,+v,+zfh,+zfbfmin,+zvfh,+zvfbfmin -verify-machineinstrs \ |
| 3 | +; RUN: < %s | FileCheck %s --check-prefixes=CHECK,ZVFH |
| 4 | +; RUN: llc -mtriple riscv64 -mattr=+f,+d,+v,+zfh,+zfbfmin,+zvfhmin,+zvfbfmin -verify-machineinstrs \ |
| 5 | +; RUN: < %s | FileCheck %s --check-prefixes=CHECK,ZVFHMIN |
6 | 6 |
|
7 | 7 | define <vscale x 2 x i64> @test_vp_splice_nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> %vb, i32 zeroext %evla, i32 zeroext %evlb) {
|
8 | 8 | ; CHECK-LABEL: test_vp_splice_nxv2i64:
|
@@ -505,3 +505,73 @@ define <vscale x 2 x bfloat> @test_vp_splice_nxv2bf16_masked(<vscale x 2 x bfloa
|
505 | 505 | %v = call <vscale x 2 x bfloat> @llvm.experimental.vp.splice.nxv2bf16(<vscale x 2 x bfloat> %va, <vscale x 2 x bfloat> %vb, i32 5, <vscale x 2 x i1> %mask, i32 %evla, i32 %evlb)
|
506 | 506 | ret <vscale x 2 x bfloat> %v
|
507 | 507 | }
|
| 508 | + |
| 509 | +define <vscale x 2 x i32> @test_vp_splice_nxv2i32_with_firstelt(i32 %first, <vscale x 2 x i32> %vb, <vscale x 2 x i1> %mask, i32 zeroext %evl) { |
| 510 | +; CHECK-LABEL: test_vp_splice_nxv2i32_with_firstelt: |
| 511 | +; CHECK: # %bb.0: |
| 512 | +; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma |
| 513 | +; CHECK-NEXT: vslide1up.vx v9, v8, a0, v0.t |
| 514 | +; CHECK-NEXT: vmv.v.v v8, v9 |
| 515 | +; CHECK-NEXT: ret |
| 516 | + %va = insertelement <vscale x 2 x i32> poison, i32 %first, i32 0 |
| 517 | + %v = call <vscale x 2 x i32> @llvm.experimental.vp.splice.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> %vb, i32 0, <vscale x 2 x i1> %mask, i32 1, i32 %evl) |
| 518 | + ret <vscale x 2 x i32> %v |
| 519 | +} |
| 520 | + |
| 521 | +define <vscale x 2 x i32> @test_vp_splice_nxv2i32_with_splat_firstelt(i32 %first, <vscale x 2 x i32> %vb, <vscale x 2 x i1> %mask, i32 zeroext %evl) { |
| 522 | +; CHECK-LABEL: test_vp_splice_nxv2i32_with_splat_firstelt: |
| 523 | +; CHECK: # %bb.0: |
| 524 | +; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma |
| 525 | +; CHECK-NEXT: vslide1up.vx v9, v8, a0, v0.t |
| 526 | +; CHECK-NEXT: vmv.v.v v8, v9 |
| 527 | +; CHECK-NEXT: ret |
| 528 | + %ins = insertelement <vscale x 2 x i32> poison, i32 %first, i32 0 |
| 529 | + %splat = shufflevector <vscale x 2 x i32> %ins, <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer |
| 530 | + %v = call <vscale x 2 x i32> @llvm.experimental.vp.splice.nxv2i32(<vscale x 2 x i32> %splat, <vscale x 2 x i32> %vb, i32 0, <vscale x 2 x i1> %mask, i32 1, i32 %evl) |
| 531 | + ret <vscale x 2 x i32> %v |
| 532 | +} |
| 533 | + |
| 534 | +define <vscale x 2 x float> @test_vp_splice_nxv2f32_with_firstelt(float %first, <vscale x 2 x float> %vb, <vscale x 2 x i1> %mask, i32 zeroext %evl) { |
| 535 | +; CHECK-LABEL: test_vp_splice_nxv2f32_with_firstelt: |
| 536 | +; CHECK: # %bb.0: |
| 537 | +; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma |
| 538 | +; CHECK-NEXT: vfslide1up.vf v9, v8, fa0, v0.t |
| 539 | +; CHECK-NEXT: vmv.v.v v8, v9 |
| 540 | +; CHECK-NEXT: ret |
| 541 | + %va = insertelement <vscale x 2 x float> poison, float %first, i32 0 |
| 542 | + %v = call <vscale x 2 x float> @llvm.experimental.vp.splice.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %vb, i32 0, <vscale x 2 x i1> %mask, i32 1, i32 %evl) |
| 543 | + ret <vscale x 2 x float> %v |
| 544 | +} |
| 545 | + |
| 546 | +define <vscale x 2 x half> @test_vp_splice_nxv2f16_with_firstelt(half %first, <vscale x 2 x half> %vb, <vscale x 2 x i1> %mask, i32 zeroext %evl) { |
| 547 | +; ZVFH-LABEL: test_vp_splice_nxv2f16_with_firstelt: |
| 548 | +; ZVFH: # %bb.0: |
| 549 | +; ZVFH-NEXT: vsetvli zero, a0, e16, mf2, ta, ma |
| 550 | +; ZVFH-NEXT: vfslide1up.vf v9, v8, fa0, v0.t |
| 551 | +; ZVFH-NEXT: vmv1r.v v8, v9 |
| 552 | +; ZVFH-NEXT: ret |
| 553 | +; |
| 554 | +; ZVFHMIN-LABEL: test_vp_splice_nxv2f16_with_firstelt: |
| 555 | +; ZVFHMIN: # %bb.0: |
| 556 | +; ZVFHMIN-NEXT: fmv.x.h a1, fa0 |
| 557 | +; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf2, ta, ma |
| 558 | +; ZVFHMIN-NEXT: vslide1up.vx v9, v8, a1, v0.t |
| 559 | +; ZVFHMIN-NEXT: vmv1r.v v8, v9 |
| 560 | +; ZVFHMIN-NEXT: ret |
| 561 | + %va = insertelement <vscale x 2 x half> poison, half %first, i32 0 |
| 562 | + %v = call <vscale x 2 x half> @llvm.experimental.vp.splice.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %vb, i32 0, <vscale x 2 x i1> %mask, i32 1, i32 %evl) |
| 563 | + ret <vscale x 2 x half> %v |
| 564 | +} |
| 565 | + |
| 566 | +define <vscale x 2 x bfloat> @test_vp_splice_nxv2bf16_with_firstelt(bfloat %first, <vscale x 2 x bfloat> %vb, <vscale x 2 x i1> %mask, i32 zeroext %evl) { |
| 567 | +; CHECK-LABEL: test_vp_splice_nxv2bf16_with_firstelt: |
| 568 | +; CHECK: # %bb.0: |
| 569 | +; CHECK-NEXT: fmv.x.h a1, fa0 |
| 570 | +; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma |
| 571 | +; CHECK-NEXT: vslide1up.vx v9, v8, a1, v0.t |
| 572 | +; CHECK-NEXT: vmv1r.v v8, v9 |
| 573 | +; CHECK-NEXT: ret |
| 574 | + %va = insertelement <vscale x 2 x bfloat> poison, bfloat %first, i32 0 |
| 575 | + %v = call <vscale x 2 x bfloat> @llvm.experimental.vp.splice.nxv2bf16(<vscale x 2 x bfloat> %va, <vscale x 2 x bfloat> %vb, i32 0, <vscale x 2 x i1> %mask, i32 1, i32 %evl) |
| 576 | + ret <vscale x 2 x bfloat> %v |
| 577 | +} |
0 commit comments