|
1 | 1 | ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
|
2 |
| -; RUN: llc -mtriple riscv64 -mattr=+f,+d,+v,+zvfh -verify-machineinstrs -riscv-v-vector-bits-min=128 \ |
3 |
| -; RUN: < %s | FileCheck %s |
| 2 | +; RUN: llc -mtriple riscv64 -mattr=+f,+d,+v,+zvfh,+zvfbfmin -verify-machineinstrs -riscv-v-vector-bits-min=128 \ |
| 3 | +; RUN: < %s | FileCheck %s --check-prefixes=CHECK,ZVFH |
| 4 | +; RUN: llc -mtriple riscv64 -mattr=+f,+d,+v,+zvfhmin,+zvfbfmin -verify-machineinstrs -riscv-v-vector-bits-min=128 \ |
| 5 | +; RUN: < %s | FileCheck %s --check-prefixes=CHECK,ZVFHMIN |
4 | 6 |
|
5 | 7 | define <2 x i64> @test_vp_splice_v2i64(<2 x i64> %va, <2 x i64> %vb, i32 zeroext %evla, i32 zeroext %evlb) {
|
6 | 8 | ; CHECK-LABEL: test_vp_splice_v2i64:
|
@@ -338,13 +340,64 @@ define <4 x float> @test_vp_splice_nxv2f32_with_firstelt(float %first, <4 x floa
|
338 | 340 | }
|
339 | 341 |
|
340 | 342 | define <4 x half> @test_vp_splice_nxv2f16_with_firstelt(half %first, <4 x half> %vb, <4 x i1> %mask, i32 zeroext %evl) {
|
341 |
| -; CHECK-LABEL: test_vp_splice_nxv2f16_with_firstelt: |
342 |
| -; CHECK: # %bb.0: |
343 |
| -; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma |
344 |
| -; CHECK-NEXT: vfslide1up.vf v9, v8, fa0, v0.t |
345 |
| -; CHECK-NEXT: vmv1r.v v8, v9 |
346 |
| -; CHECK-NEXT: ret |
| 343 | +; ZVFH-LABEL: test_vp_splice_nxv2f16_with_firstelt: |
| 344 | +; ZVFH: # %bb.0: |
| 345 | +; ZVFH-NEXT: vsetvli zero, a0, e16, mf2, ta, ma |
| 346 | +; ZVFH-NEXT: vfslide1up.vf v9, v8, fa0, v0.t |
| 347 | +; ZVFH-NEXT: vmv1r.v v8, v9 |
| 348 | +; ZVFH-NEXT: ret |
| 349 | +; |
| 350 | +; ZVFHMIN-LABEL: test_vp_splice_nxv2f16_with_firstelt: |
| 351 | +; ZVFHMIN: # %bb.0: |
| 352 | +; ZVFHMIN-NEXT: fmv.x.w a1, fa0 |
| 353 | +; ZVFHMIN-NEXT: vsetivli zero, 4, e16, m1, ta, ma |
| 354 | +; ZVFHMIN-NEXT: vmv.s.x v9, a1 |
| 355 | +; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf2, ta, mu |
| 356 | +; ZVFHMIN-NEXT: vslideup.vi v9, v8, 1, v0.t |
| 357 | +; ZVFHMIN-NEXT: vmv1r.v v8, v9 |
| 358 | +; ZVFHMIN-NEXT: ret |
347 | 359 | %va = insertelement <4 x half> poison, half %first, i32 0
|
348 | 360 | %v = call <4 x half> @llvm.experimental.vp.splice.nxv2f16(<4 x half> %va, <4 x half> %vb, i32 0, <4 x i1> %mask, i32 1, i32 %evl)
|
349 | 361 | ret <4 x half> %v
|
350 | 362 | }
|
| 363 | + |
| 364 | +define <8 x bfloat> @test_vp_splice_v8bf16(<8 x bfloat> %va, <8 x bfloat> %vb, i32 zeroext %evla, i32 zeroext %evlb) { |
| 365 | +; CHECK-LABEL: test_vp_splice_v8bf16: |
| 366 | +; CHECK: # %bb.0: |
| 367 | +; CHECK-NEXT: addi a0, a0, -5 |
| 368 | +; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma |
| 369 | +; CHECK-NEXT: vslidedown.vi v8, v8, 5 |
| 370 | +; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma |
| 371 | +; CHECK-NEXT: vslideup.vx v8, v9, a0 |
| 372 | +; CHECK-NEXT: ret |
| 373 | + |
| 374 | + %v = call <8 x bfloat> @llvm.experimental.vp.splice.v8bf16(<8 x bfloat> %va, <8 x bfloat> %vb, i32 5, <8 x i1> splat (i1 1), i32 %evla, i32 %evlb) |
| 375 | + ret <8 x bfloat> %v |
| 376 | +} |
| 377 | + |
| 378 | +define <8 x bfloat> @test_vp_splice_v8bf16_negative_offset(<8 x bfloat> %va, <8 x bfloat> %vb, i32 zeroext %evla, i32 zeroext %evlb) { |
| 379 | +; CHECK-LABEL: test_vp_splice_v8bf16_negative_offset: |
| 380 | +; CHECK: # %bb.0: |
| 381 | +; CHECK-NEXT: addi a0, a0, -5 |
| 382 | +; CHECK-NEXT: vsetivli zero, 5, e16, m1, ta, ma |
| 383 | +; CHECK-NEXT: vslidedown.vx v8, v8, a0 |
| 384 | +; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma |
| 385 | +; CHECK-NEXT: vslideup.vi v8, v9, 5 |
| 386 | +; CHECK-NEXT: ret |
| 387 | + |
| 388 | + %v = call <8 x bfloat> @llvm.experimental.vp.splice.v8bf16(<8 x bfloat> %va, <8 x bfloat> %vb, i32 -5, <8 x i1> splat (i1 1), i32 %evla, i32 %evlb) |
| 389 | + ret <8 x bfloat> %v |
| 390 | +} |
| 391 | + |
| 392 | +define <8 x bfloat> @test_vp_splice_v8bf16_masked(<8 x bfloat> %va, <8 x bfloat> %vb, <8 x i1> %mask, i32 zeroext %evla, i32 zeroext %evlb) { |
| 393 | +; CHECK-LABEL: test_vp_splice_v8bf16_masked: |
| 394 | +; CHECK: # %bb.0: |
| 395 | +; CHECK-NEXT: addi a0, a0, -5 |
| 396 | +; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma |
| 397 | +; CHECK-NEXT: vslidedown.vi v8, v8, 5, v0.t |
| 398 | +; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu |
| 399 | +; CHECK-NEXT: vslideup.vx v8, v9, a0, v0.t |
| 400 | +; CHECK-NEXT: ret |
| 401 | + %v = call <8 x bfloat> @llvm.experimental.vp.splice.v8bf16(<8 x bfloat> %va, <8 x bfloat> %vb, i32 5, <8 x i1> %mask, i32 %evla, i32 %evlb) |
| 402 | + ret <8 x bfloat> %v |
| 403 | +} |
0 commit comments