Skip to content

Commit e36658c

Browse files
committed
Add testcases.
1 parent 88b98d3 commit e36658c

File tree

2 files changed

+123
-1
lines changed

2 files changed

+123
-1
lines changed

llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vp-splice.ll

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -288,3 +288,64 @@ define <8 x half> @test_vp_splice_v8f16_masked(<8 x half> %va, <8 x half> %vb, <
288288
%v = call <8 x half> @llvm.experimental.vp.splice.v8f16(<8 x half> %va, <8 x half> %vb, i32 5, <8 x i1> %mask, i32 %evla, i32 %evlb)
289289
ret <8 x half> %v
290290
}
291+
292+
define <4 x i32> @test_vp_splice_v4i32_with_firstelt(i32 %first, <4 x i32> %vb, <4 x i1> %mask, i32 zeroext %evl) {
293+
; CHECK-LABEL: test_vp_splice_v4i32_with_firstelt:
294+
; CHECK: # %bb.0:
295+
; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma
296+
; CHECK-NEXT: vmv.s.x v9, a0
297+
; CHECK-NEXT: vslidedown.vi v9, v9, 0, v0.t
298+
; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, mu
299+
; CHECK-NEXT: vslideup.vi v9, v8, 1, v0.t
300+
; CHECK-NEXT: vmv.v.v v8, v9
301+
; CHECK-NEXT: ret
302+
%va = insertelement <4 x i32> poison, i32 %first, i32 0
303+
%v = call <4 x i32> @llvm.experimental.vp.splice.v4i32(<4 x i32> %va, <4 x i32> %vb, i32 0, <4 x i1> %mask, i32 1, i32 %evl)
304+
ret <4 x i32> %v
305+
}
306+
307+
define <4 x i32> @test_vp_splice_v4i32_with_splat_firstelt(i32 %first, <4 x i32> %vb, <4 x i1> %mask, i32 zeroext %evl) {
308+
; CHECK-LABEL: test_vp_splice_v4i32_with_splat_firstelt:
309+
; CHECK: # %bb.0:
310+
; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma
311+
; CHECK-NEXT: vmv.v.x v9, a0
312+
; CHECK-NEXT: vslidedown.vi v9, v9, 0, v0.t
313+
; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, mu
314+
; CHECK-NEXT: vslideup.vi v9, v8, 1, v0.t
315+
; CHECK-NEXT: vmv.v.v v8, v9
316+
; CHECK-NEXT: ret
317+
%ins = insertelement <4 x i32> poison, i32 %first, i32 0
318+
%splat = shufflevector <4 x i32> %ins, <4 x i32> poison, <4 x i32> zeroinitializer
319+
%v = call <4 x i32> @llvm.experimental.vp.splice.v4i32(<4 x i32> %splat, <4 x i32> %vb, i32 0, <4 x i1> %mask, i32 1, i32 %evl)
320+
ret <4 x i32> %v
321+
}
322+
323+
define <4 x float> @test_vp_splice_nxv2f32_with_firstelt(float %first, <4 x float> %vb, <4 x i1> %mask, i32 zeroext %evl) {
324+
; CHECK-LABEL: test_vp_splice_nxv2f32_with_firstelt:
325+
; CHECK: # %bb.0:
326+
; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma
327+
; CHECK-NEXT: vfmv.s.f v9, fa0
328+
; CHECK-NEXT: vslidedown.vi v9, v9, 0, v0.t
329+
; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, mu
330+
; CHECK-NEXT: vslideup.vi v9, v8, 1, v0.t
331+
; CHECK-NEXT: vmv.v.v v8, v9
332+
; CHECK-NEXT: ret
333+
%va = insertelement <4 x float> poison, float %first, i32 0
334+
%v = call <4 x float> @llvm.experimental.vp.splice.nxv2f32(<4 x float> %va, <4 x float> %vb, i32 0, <4 x i1> %mask, i32 1, i32 %evl)
335+
ret <4 x float> %v
336+
}
337+
338+
define <4 x half> @test_vp_splice_nxv2f16_with_firstelt(half %first, <4 x half> %vb, <4 x i1> %mask, i32 zeroext %evl) {
339+
; CHECK-LABEL: test_vp_splice_nxv2f16_with_firstelt:
340+
; CHECK: # %bb.0:
341+
; CHECK-NEXT: vsetivli zero, 1, e16, mf2, ta, ma
342+
; CHECK-NEXT: vfmv.s.f v9, fa0
343+
; CHECK-NEXT: vslidedown.vi v9, v9, 0, v0.t
344+
; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, mu
345+
; CHECK-NEXT: vslideup.vi v9, v8, 1, v0.t
346+
; CHECK-NEXT: vmv1r.v v8, v9
347+
; CHECK-NEXT: ret
348+
%va = insertelement <4 x half> poison, half %first, i32 0
349+
%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)
350+
ret <4 x half> %v
351+
}

llvm/test/CodeGen/RISCV/rvv/vp-splice.ll

Lines changed: 62 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
; 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 \
33
; RUN: < %s | FileCheck %s
44

55
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
427427
%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)
428428
ret <vscale x 16 x i64> %v
429429
}
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

Comments
 (0)