|
1 | 1 | ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
|
2 |
| -; RUN: llc -mtriple riscv64 -mattr=+f,+d,+v -verify-machineinstrs \ |
| 2 | +; RUN: llc -mtriple riscv64 -mattr=+f,+d,+v,+zvfh -verify-machineinstrs \ |
3 | 3 | ; RUN: < %s | FileCheck %s
|
4 | 4 |
|
5 | 5 | declare <vscale x 2 x i64> @llvm.experimental.vp.splice.nxv2i64(<vscale x 2 x i64>, <vscale x 2 x i64>, i32, <vscale x 2 x i1>, i32, i32)
|
@@ -427,3 +427,64 @@ define <vscale x 16 x i64> @test_vp_splice_nxv16i64_negative_offset(<vscale x 16
|
427 | 427 | %v = call <vscale x 16 x i64> @llvm.experimental.vp.splice.nxv16i64(<vscale x 16 x i64> %va, <vscale x 16 x i64> %vb, i32 -1, <vscale x 16 x i1> splat (i1 1), i32 %evla, i32 %evlb)
|
428 | 428 | ret <vscale x 16 x i64> %v
|
429 | 429 | }
|
| 430 | + |
| 431 | +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) { |
| 432 | +; CHECK-LABEL: test_vp_splice_nxv2i32_with_firstelt: |
| 433 | +; CHECK: # %bb.0: |
| 434 | +; CHECK-NEXT: vsetvli a2, zero, e32, m1, ta, ma |
| 435 | +; CHECK-NEXT: vmv.s.x v9, a0 |
| 436 | +; CHECK-NEXT: vslidedown.vi v9, v9, 0, v0.t |
| 437 | +; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, mu |
| 438 | +; CHECK-NEXT: vslideup.vi v9, v8, 1, v0.t |
| 439 | +; CHECK-NEXT: vmv.v.v v8, v9 |
| 440 | +; CHECK-NEXT: ret |
| 441 | + %va = insertelement <vscale x 2 x i32> poison, i32 %first, i32 0 |
| 442 | + %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) |
| 443 | + ret <vscale x 2 x i32> %v |
| 444 | +} |
| 445 | + |
| 446 | +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) { |
| 447 | +; CHECK-LABEL: test_vp_splice_nxv2i32_with_splat_firstelt: |
| 448 | +; CHECK: # %bb.0: |
| 449 | +; CHECK-NEXT: vsetvli a2, zero, e32, m1, ta, ma |
| 450 | +; CHECK-NEXT: vmv.v.x v9, a0 |
| 451 | +; CHECK-NEXT: vslidedown.vi v9, v9, 0, v0.t |
| 452 | +; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, mu |
| 453 | +; CHECK-NEXT: vslideup.vi v9, v8, 1, v0.t |
| 454 | +; CHECK-NEXT: vmv.v.v v8, v9 |
| 455 | +; CHECK-NEXT: ret |
| 456 | + %ins = insertelement <vscale x 2 x i32> poison, i32 %first, i32 0 |
| 457 | + %splat = shufflevector <vscale x 2 x i32> %ins, <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer |
| 458 | + %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) |
| 459 | + ret <vscale x 2 x i32> %v |
| 460 | +} |
| 461 | + |
| 462 | +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) { |
| 463 | +; CHECK-LABEL: test_vp_splice_nxv2f32_with_firstelt: |
| 464 | +; CHECK: # %bb.0: |
| 465 | +; CHECK-NEXT: vsetvli a1, zero, e32, m1, ta, ma |
| 466 | +; CHECK-NEXT: vfmv.s.f v9, fa0 |
| 467 | +; CHECK-NEXT: vslidedown.vi v9, v9, 0, v0.t |
| 468 | +; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, mu |
| 469 | +; CHECK-NEXT: vslideup.vi v9, v8, 1, v0.t |
| 470 | +; CHECK-NEXT: vmv.v.v v8, v9 |
| 471 | +; CHECK-NEXT: ret |
| 472 | + %va = insertelement <vscale x 2 x float> poison, float %first, i32 0 |
| 473 | + %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) |
| 474 | + ret <vscale x 2 x float> %v |
| 475 | +} |
| 476 | + |
| 477 | +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) { |
| 478 | +; CHECK-LABEL: test_vp_splice_nxv2f16_with_firstelt: |
| 479 | +; CHECK: # %bb.0: |
| 480 | +; CHECK-NEXT: vsetivli zero, 1, e16, mf2, ta, ma |
| 481 | +; CHECK-NEXT: vfmv.s.f v9, fa0 |
| 482 | +; CHECK-NEXT: vslidedown.vi v9, v9, 0, v0.t |
| 483 | +; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, mu |
| 484 | +; CHECK-NEXT: vslideup.vi v9, v8, 1, v0.t |
| 485 | +; CHECK-NEXT: vmv1r.v v8, v9 |
| 486 | +; CHECK-NEXT: ret |
| 487 | + %va = insertelement <vscale x 2 x half> poison, half %first, i32 0 |
| 488 | + %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) |
| 489 | + ret <vscale x 2 x half> %v |
| 490 | +} |
0 commit comments