922 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=riscv64 -mattr=+v -verify-machineinstrs < %s | FileCheck %s --check-prefix=NOVLDEP3; RUN: llc -mtriple=riscv64 -mattr=+v,+vl-dependent-latency -verify-machineinstrs < %s | FileCheck %s --check-prefix=VLDEP4 5define <vscale x 1 x i1> @test_vp_splice_nxv1i1(<vscale x 1 x i1> %va, <vscale x 1 x i1> %vb, i32 zeroext %evla, i32 zeroext %evlb) #0 {6; NOVLDEP-LABEL: test_vp_splice_nxv1i1:7; NOVLDEP: # %bb.0:8; NOVLDEP-NEXT: vsetvli zero, a1, e8, mf8, ta, ma9; NOVLDEP-NEXT: vmv1r.v v9, v010; NOVLDEP-NEXT: vmv1r.v v0, v811; NOVLDEP-NEXT: vmv.v.i v8, 012; NOVLDEP-NEXT: vmerge.vim v8, v8, 1, v013; NOVLDEP-NEXT: vsetvli zero, a0, e8, mf8, ta, ma14; NOVLDEP-NEXT: vmv.v.i v10, 015; NOVLDEP-NEXT: vmv1r.v v0, v916; NOVLDEP-NEXT: vmerge.vim v9, v10, 1, v017; NOVLDEP-NEXT: vsetvli zero, a1, e8, mf8, ta, ma18; NOVLDEP-NEXT: vslidedown.vi v9, v9, 119; NOVLDEP-NEXT: addi a0, a0, -120; NOVLDEP-NEXT: vslideup.vx v9, v8, a021; NOVLDEP-NEXT: vmsne.vi v0, v9, 022; NOVLDEP-NEXT: ret23;24; VLDEP-LABEL: test_vp_splice_nxv1i1:25; VLDEP: # %bb.0:26; VLDEP-NEXT: vsetvli zero, a1, e8, mf8, ta, ma27; VLDEP-NEXT: vmv1r.v v9, v028; VLDEP-NEXT: vmv1r.v v0, v829; VLDEP-NEXT: vmv.v.i v8, 030; VLDEP-NEXT: vmerge.vim v8, v8, 1, v031; VLDEP-NEXT: vsetvli zero, a0, e8, mf8, ta, ma32; VLDEP-NEXT: vmv.v.i v10, 033; VLDEP-NEXT: vmv1r.v v0, v934; VLDEP-NEXT: vmerge.vim v9, v10, 1, v035; VLDEP-NEXT: addi a0, a0, -136; VLDEP-NEXT: vsetvli zero, a0, e8, mf8, ta, ma37; VLDEP-NEXT: vslidedown.vi v9, v9, 138; VLDEP-NEXT: vsetvli zero, a1, e8, mf8, ta, ma39; VLDEP-NEXT: vslideup.vx v9, v8, a040; VLDEP-NEXT: vmsne.vi v0, v9, 041; VLDEP-NEXT: ret42 43 %v = call <vscale x 1 x i1> @llvm.experimental.vp.splice.nxv1i1(<vscale x 1 x i1> %va, <vscale x 1 x i1> %vb, i32 1, <vscale x 1 x i1> splat (i1 1), i32 %evla, i32 %evlb)44 ret <vscale x 1 x i1> %v45}46 47define <vscale x 1 x i1> @test_vp_splice_nxv1i1_negative_offset(<vscale x 1 x i1> %va, <vscale x 1 x i1> %vb, i32 zeroext %evla, i32 zeroext %evlb) #0 {48; NOVLDEP-LABEL: test_vp_splice_nxv1i1_negative_offset:49; NOVLDEP: # %bb.0:50; NOVLDEP-NEXT: vsetvli zero, a1, e8, mf8, ta, ma51; NOVLDEP-NEXT: vmv1r.v v9, v052; NOVLDEP-NEXT: vmv1r.v v0, v853; NOVLDEP-NEXT: vmv.v.i v8, 054; NOVLDEP-NEXT: vmerge.vim v8, v8, 1, v055; NOVLDEP-NEXT: vsetvli zero, a0, e8, mf8, ta, ma56; NOVLDEP-NEXT: vmv.v.i v10, 057; NOVLDEP-NEXT: vmv1r.v v0, v958; NOVLDEP-NEXT: vmerge.vim v9, v10, 1, v059; NOVLDEP-NEXT: addi a0, a0, -260; NOVLDEP-NEXT: vsetvli zero, a1, e8, mf8, ta, ma61; NOVLDEP-NEXT: vslidedown.vx v9, v9, a062; NOVLDEP-NEXT: vslideup.vi v9, v8, 263; NOVLDEP-NEXT: vmsne.vi v0, v9, 064; NOVLDEP-NEXT: ret65;66; VLDEP-LABEL: test_vp_splice_nxv1i1_negative_offset:67; VLDEP: # %bb.0:68; VLDEP-NEXT: vsetvli zero, a1, e8, mf8, ta, ma69; VLDEP-NEXT: vmv1r.v v9, v070; VLDEP-NEXT: vmv1r.v v0, v871; VLDEP-NEXT: vmv.v.i v8, 072; VLDEP-NEXT: vmerge.vim v8, v8, 1, v073; VLDEP-NEXT: vsetvli zero, a0, e8, mf8, ta, ma74; VLDEP-NEXT: vmv.v.i v10, 075; VLDEP-NEXT: vmv1r.v v0, v976; VLDEP-NEXT: vmerge.vim v9, v10, 1, v077; VLDEP-NEXT: addi a0, a0, -278; VLDEP-NEXT: vsetivli zero, 2, e8, mf8, ta, ma79; VLDEP-NEXT: vslidedown.vx v9, v9, a080; VLDEP-NEXT: vsetvli zero, a1, e8, mf8, ta, ma81; VLDEP-NEXT: vslideup.vi v9, v8, 282; VLDEP-NEXT: vmsne.vi v0, v9, 083; VLDEP-NEXT: ret84 85 %v = call <vscale x 1 x i1> @llvm.experimental.vp.splice.nxv1i1(<vscale x 1 x i1> %va, <vscale x 1 x i1> %vb, i32 -2, <vscale x 1 x i1> splat (i1 1), i32 %evla, i32 %evlb)86 ret <vscale x 1 x i1> %v87}88 89define <vscale x 1 x i1> @test_vp_splice_nxv1i1_masked(<vscale x 1 x i1> %va, <vscale x 1 x i1> %vb, <vscale x 1 x i1> %mask, i32 zeroext %evla, i32 zeroext %evlb) #0 {90; NOVLDEP-LABEL: test_vp_splice_nxv1i1_masked:91; NOVLDEP: # %bb.0:92; NOVLDEP-NEXT: vsetvli zero, a1, e8, mf8, ta, ma93; NOVLDEP-NEXT: vmv1r.v v10, v094; NOVLDEP-NEXT: vmv1r.v v0, v895; NOVLDEP-NEXT: vmv.v.i v8, 096; NOVLDEP-NEXT: vmerge.vim v8, v8, 1, v097; NOVLDEP-NEXT: vsetvli zero, a0, e8, mf8, ta, ma98; NOVLDEP-NEXT: vmv.v.i v11, 099; NOVLDEP-NEXT: vmv1r.v v0, v10100; NOVLDEP-NEXT: vmerge.vim v10, v11, 1, v0101; NOVLDEP-NEXT: addi a0, a0, -1102; NOVLDEP-NEXT: vmv1r.v v0, v9103; NOVLDEP-NEXT: vsetvli zero, a1, e8, mf8, ta, ma104; NOVLDEP-NEXT: vslidedown.vi v10, v10, 1, v0.t105; NOVLDEP-NEXT: vsetvli zero, zero, e8, mf8, ta, mu106; NOVLDEP-NEXT: vslideup.vx v10, v8, a0, v0.t107; NOVLDEP-NEXT: vsetvli zero, zero, e8, mf8, ta, ma108; NOVLDEP-NEXT: vmsne.vi v0, v10, 0, v0.t109; NOVLDEP-NEXT: ret110;111; VLDEP-LABEL: test_vp_splice_nxv1i1_masked:112; VLDEP: # %bb.0:113; VLDEP-NEXT: vsetvli zero, a1, e8, mf8, ta, ma114; VLDEP-NEXT: vmv1r.v v10, v0115; VLDEP-NEXT: vmv1r.v v0, v8116; VLDEP-NEXT: vmv.v.i v8, 0117; VLDEP-NEXT: vmerge.vim v8, v8, 1, v0118; VLDEP-NEXT: vsetvli zero, a0, e8, mf8, ta, ma119; VLDEP-NEXT: vmv.v.i v11, 0120; VLDEP-NEXT: vmv1r.v v0, v10121; VLDEP-NEXT: vmerge.vim v10, v11, 1, v0122; VLDEP-NEXT: addi a0, a0, -1123; VLDEP-NEXT: vmv1r.v v0, v9124; VLDEP-NEXT: vsetvli zero, a0, e8, mf8, ta, ma125; VLDEP-NEXT: vslidedown.vi v10, v10, 1, v0.t126; VLDEP-NEXT: vsetvli zero, a1, e8, mf8, ta, mu127; VLDEP-NEXT: vslideup.vx v10, v8, a0, v0.t128; VLDEP-NEXT: vsetvli zero, zero, e8, mf8, ta, ma129; VLDEP-NEXT: vmsne.vi v0, v10, 0, v0.t130; VLDEP-NEXT: ret131 %v = call <vscale x 1 x i1> @llvm.experimental.vp.splice.nxv1i1(<vscale x 1 x i1> %va, <vscale x 1 x i1> %vb, i32 1, <vscale x 1 x i1> %mask, i32 %evla, i32 %evlb)132 ret <vscale x 1 x i1> %v133}134 135define <vscale x 2 x i1> @test_vp_splice_nxv2i1(<vscale x 2 x i1> %va, <vscale x 2 x i1> %vb, i32 zeroext %evla, i32 zeroext %evlb) #0 {136; NOVLDEP-LABEL: test_vp_splice_nxv2i1:137; NOVLDEP: # %bb.0:138; NOVLDEP-NEXT: vsetvli zero, a1, e8, mf4, ta, ma139; NOVLDEP-NEXT: vmv1r.v v9, v0140; NOVLDEP-NEXT: vmv1r.v v0, v8141; NOVLDEP-NEXT: vmv.v.i v8, 0142; NOVLDEP-NEXT: vmerge.vim v8, v8, 1, v0143; NOVLDEP-NEXT: vsetvli zero, a0, e8, mf4, ta, ma144; NOVLDEP-NEXT: vmv.v.i v10, 0145; NOVLDEP-NEXT: vmv1r.v v0, v9146; NOVLDEP-NEXT: vmerge.vim v9, v10, 1, v0147; NOVLDEP-NEXT: vsetvli zero, a1, e8, mf4, ta, ma148; NOVLDEP-NEXT: vslidedown.vi v9, v9, 3149; NOVLDEP-NEXT: addi a0, a0, -3150; NOVLDEP-NEXT: vslideup.vx v9, v8, a0151; NOVLDEP-NEXT: vmsne.vi v0, v9, 0152; NOVLDEP-NEXT: ret153;154; VLDEP-LABEL: test_vp_splice_nxv2i1:155; VLDEP: # %bb.0:156; VLDEP-NEXT: vsetvli zero, a1, e8, mf4, ta, ma157; VLDEP-NEXT: vmv1r.v v9, v0158; VLDEP-NEXT: vmv1r.v v0, v8159; VLDEP-NEXT: vmv.v.i v8, 0160; VLDEP-NEXT: vmerge.vim v8, v8, 1, v0161; VLDEP-NEXT: vsetvli zero, a0, e8, mf4, ta, ma162; VLDEP-NEXT: vmv.v.i v10, 0163; VLDEP-NEXT: vmv1r.v v0, v9164; VLDEP-NEXT: vmerge.vim v9, v10, 1, v0165; VLDEP-NEXT: addi a0, a0, -3166; VLDEP-NEXT: vsetvli zero, a0, e8, mf4, ta, ma167; VLDEP-NEXT: vslidedown.vi v9, v9, 3168; VLDEP-NEXT: vsetvli zero, a1, e8, mf4, ta, ma169; VLDEP-NEXT: vslideup.vx v9, v8, a0170; VLDEP-NEXT: vmsne.vi v0, v9, 0171; VLDEP-NEXT: ret172 173 %v = call <vscale x 2 x i1> @llvm.experimental.vp.splice.nxv2i1(<vscale x 2 x i1> %va, <vscale x 2 x i1> %vb, i32 3, <vscale x 2 x i1> splat (i1 1), i32 %evla, i32 %evlb)174 ret <vscale x 2 x i1> %v175}176 177define <vscale x 2 x i1> @test_vp_splice_nxv2i1_negative_offset(<vscale x 2 x i1> %va, <vscale x 2 x i1> %vb, i32 zeroext %evla, i32 zeroext %evlb) #0 {178; NOVLDEP-LABEL: test_vp_splice_nxv2i1_negative_offset:179; NOVLDEP: # %bb.0:180; NOVLDEP-NEXT: vsetvli zero, a1, e8, mf4, ta, ma181; NOVLDEP-NEXT: vmv1r.v v9, v0182; NOVLDEP-NEXT: vmv1r.v v0, v8183; NOVLDEP-NEXT: vmv.v.i v8, 0184; NOVLDEP-NEXT: vmerge.vim v8, v8, 1, v0185; NOVLDEP-NEXT: vsetvli zero, a0, e8, mf4, ta, ma186; NOVLDEP-NEXT: vmv.v.i v10, 0187; NOVLDEP-NEXT: vmv1r.v v0, v9188; NOVLDEP-NEXT: vmerge.vim v9, v10, 1, v0189; NOVLDEP-NEXT: addi a0, a0, -4190; NOVLDEP-NEXT: vsetvli zero, a1, e8, mf4, ta, ma191; NOVLDEP-NEXT: vslidedown.vx v9, v9, a0192; NOVLDEP-NEXT: vslideup.vi v9, v8, 4193; NOVLDEP-NEXT: vmsne.vi v0, v9, 0194; NOVLDEP-NEXT: ret195;196; VLDEP-LABEL: test_vp_splice_nxv2i1_negative_offset:197; VLDEP: # %bb.0:198; VLDEP-NEXT: vsetvli zero, a1, e8, mf4, ta, ma199; VLDEP-NEXT: vmv1r.v v9, v0200; VLDEP-NEXT: vmv1r.v v0, v8201; VLDEP-NEXT: vmv.v.i v8, 0202; VLDEP-NEXT: vmerge.vim v8, v8, 1, v0203; VLDEP-NEXT: vsetvli zero, a0, e8, mf4, ta, ma204; VLDEP-NEXT: vmv.v.i v10, 0205; VLDEP-NEXT: vmv1r.v v0, v9206; VLDEP-NEXT: vmerge.vim v9, v10, 1, v0207; VLDEP-NEXT: addi a0, a0, -4208; VLDEP-NEXT: vsetivli zero, 4, e8, mf4, ta, ma209; VLDEP-NEXT: vslidedown.vx v9, v9, a0210; VLDEP-NEXT: vsetvli zero, a1, e8, mf4, ta, ma211; VLDEP-NEXT: vslideup.vi v9, v8, 4212; VLDEP-NEXT: vmsne.vi v0, v9, 0213; VLDEP-NEXT: ret214 215 %v = call <vscale x 2 x i1> @llvm.experimental.vp.splice.nxv2i1(<vscale x 2 x i1> %va, <vscale x 2 x i1> %vb, i32 -4, <vscale x 2 x i1> splat (i1 1), i32 %evla, i32 %evlb)216 ret <vscale x 2 x i1> %v217}218 219define <vscale x 2 x i1> @test_vp_splice_nxv2i1_masked(<vscale x 2 x i1> %va, <vscale x 2 x i1> %vb, <vscale x 2 x i1> %mask, i32 zeroext %evla, i32 zeroext %evlb) #0 {220; NOVLDEP-LABEL: test_vp_splice_nxv2i1_masked:221; NOVLDEP: # %bb.0:222; NOVLDEP-NEXT: vsetvli zero, a1, e8, mf4, ta, ma223; NOVLDEP-NEXT: vmv1r.v v10, v0224; NOVLDEP-NEXT: vmv1r.v v0, v8225; NOVLDEP-NEXT: vmv.v.i v8, 0226; NOVLDEP-NEXT: vmerge.vim v8, v8, 1, v0227; NOVLDEP-NEXT: vsetvli zero, a0, e8, mf4, ta, ma228; NOVLDEP-NEXT: vmv.v.i v11, 0229; NOVLDEP-NEXT: vmv1r.v v0, v10230; NOVLDEP-NEXT: vmerge.vim v10, v11, 1, v0231; NOVLDEP-NEXT: addi a0, a0, -3232; NOVLDEP-NEXT: vmv1r.v v0, v9233; NOVLDEP-NEXT: vsetvli zero, a1, e8, mf4, ta, ma234; NOVLDEP-NEXT: vslidedown.vi v10, v10, 3, v0.t235; NOVLDEP-NEXT: vsetvli zero, zero, e8, mf4, ta, mu236; NOVLDEP-NEXT: vslideup.vx v10, v8, a0, v0.t237; NOVLDEP-NEXT: vsetvli zero, zero, e8, mf4, ta, ma238; NOVLDEP-NEXT: vmsne.vi v0, v10, 0, v0.t239; NOVLDEP-NEXT: ret240;241; VLDEP-LABEL: test_vp_splice_nxv2i1_masked:242; VLDEP: # %bb.0:243; VLDEP-NEXT: vsetvli zero, a1, e8, mf4, ta, ma244; VLDEP-NEXT: vmv1r.v v10, v0245; VLDEP-NEXT: vmv1r.v v0, v8246; VLDEP-NEXT: vmv.v.i v8, 0247; VLDEP-NEXT: vmerge.vim v8, v8, 1, v0248; VLDEP-NEXT: vsetvli zero, a0, e8, mf4, ta, ma249; VLDEP-NEXT: vmv.v.i v11, 0250; VLDEP-NEXT: vmv1r.v v0, v10251; VLDEP-NEXT: vmerge.vim v10, v11, 1, v0252; VLDEP-NEXT: addi a0, a0, -3253; VLDEP-NEXT: vmv1r.v v0, v9254; VLDEP-NEXT: vsetvli zero, a0, e8, mf4, ta, ma255; VLDEP-NEXT: vslidedown.vi v10, v10, 3, v0.t256; VLDEP-NEXT: vsetvli zero, a1, e8, mf4, ta, mu257; VLDEP-NEXT: vslideup.vx v10, v8, a0, v0.t258; VLDEP-NEXT: vsetvli zero, zero, e8, mf4, ta, ma259; VLDEP-NEXT: vmsne.vi v0, v10, 0, v0.t260; VLDEP-NEXT: ret261 %v = call <vscale x 2 x i1> @llvm.experimental.vp.splice.nxv2i1(<vscale x 2 x i1> %va, <vscale x 2 x i1> %vb, i32 3, <vscale x 2 x i1> %mask, i32 %evla, i32 %evlb)262 ret <vscale x 2 x i1> %v263}264 265define <vscale x 4 x i1> @test_vp_splice_nxv4i1(<vscale x 4 x i1> %va, <vscale x 4 x i1> %vb, i32 zeroext %evla, i32 zeroext %evlb) #0 {266; NOVLDEP-LABEL: test_vp_splice_nxv4i1:267; NOVLDEP: # %bb.0:268; NOVLDEP-NEXT: vsetvli zero, a1, e8, mf2, ta, ma269; NOVLDEP-NEXT: vmv1r.v v9, v0270; NOVLDEP-NEXT: vmv1r.v v0, v8271; NOVLDEP-NEXT: vmv.v.i v8, 0272; NOVLDEP-NEXT: vmerge.vim v8, v8, 1, v0273; NOVLDEP-NEXT: vsetvli zero, a0, e8, mf2, ta, ma274; NOVLDEP-NEXT: vmv.v.i v10, 0275; NOVLDEP-NEXT: vmv1r.v v0, v9276; NOVLDEP-NEXT: vmerge.vim v9, v10, 1, v0277; NOVLDEP-NEXT: vsetvli zero, a1, e8, mf2, ta, ma278; NOVLDEP-NEXT: vslidedown.vi v9, v9, 5279; NOVLDEP-NEXT: addi a0, a0, -5280; NOVLDEP-NEXT: vslideup.vx v9, v8, a0281; NOVLDEP-NEXT: vmsne.vi v0, v9, 0282; NOVLDEP-NEXT: ret283;284; VLDEP-LABEL: test_vp_splice_nxv4i1:285; VLDEP: # %bb.0:286; VLDEP-NEXT: vsetvli zero, a1, e8, mf2, ta, ma287; VLDEP-NEXT: vmv1r.v v9, v0288; VLDEP-NEXT: vmv1r.v v0, v8289; VLDEP-NEXT: vmv.v.i v8, 0290; VLDEP-NEXT: vmerge.vim v8, v8, 1, v0291; VLDEP-NEXT: vsetvli zero, a0, e8, mf2, ta, ma292; VLDEP-NEXT: vmv.v.i v10, 0293; VLDEP-NEXT: vmv1r.v v0, v9294; VLDEP-NEXT: vmerge.vim v9, v10, 1, v0295; VLDEP-NEXT: addi a0, a0, -5296; VLDEP-NEXT: vsetvli zero, a0, e8, mf2, ta, ma297; VLDEP-NEXT: vslidedown.vi v9, v9, 5298; VLDEP-NEXT: vsetvli zero, a1, e8, mf2, ta, ma299; VLDEP-NEXT: vslideup.vx v9, v8, a0300; VLDEP-NEXT: vmsne.vi v0, v9, 0301; VLDEP-NEXT: ret302 303 %v = call <vscale x 4 x i1> @llvm.experimental.vp.splice.nxv4i1(<vscale x 4 x i1> %va, <vscale x 4 x i1> %vb, i32 5, <vscale x 4 x i1> splat (i1 1), i32 %evla, i32 %evlb)304 ret <vscale x 4 x i1> %v305}306 307define <vscale x 4 x i1> @test_vp_splice_nxv4i1_negative_offset(<vscale x 4 x i1> %va, <vscale x 4 x i1> %vb, i32 zeroext %evla, i32 zeroext %evlb) #0 {308; NOVLDEP-LABEL: test_vp_splice_nxv4i1_negative_offset:309; NOVLDEP: # %bb.0:310; NOVLDEP-NEXT: vsetvli zero, a1, e8, mf2, ta, ma311; NOVLDEP-NEXT: vmv1r.v v9, v0312; NOVLDEP-NEXT: vmv1r.v v0, v8313; NOVLDEP-NEXT: vmv.v.i v8, 0314; NOVLDEP-NEXT: vmerge.vim v8, v8, 1, v0315; NOVLDEP-NEXT: vsetvli zero, a0, e8, mf2, ta, ma316; NOVLDEP-NEXT: vmv.v.i v10, 0317; NOVLDEP-NEXT: vmv1r.v v0, v9318; NOVLDEP-NEXT: vmerge.vim v9, v10, 1, v0319; NOVLDEP-NEXT: addi a0, a0, -5320; NOVLDEP-NEXT: vsetvli zero, a1, e8, mf2, ta, ma321; NOVLDEP-NEXT: vslidedown.vx v9, v9, a0322; NOVLDEP-NEXT: vslideup.vi v9, v8, 5323; NOVLDEP-NEXT: vmsne.vi v0, v9, 0324; NOVLDEP-NEXT: ret325;326; VLDEP-LABEL: test_vp_splice_nxv4i1_negative_offset:327; VLDEP: # %bb.0:328; VLDEP-NEXT: vsetvli zero, a1, e8, mf2, ta, ma329; VLDEP-NEXT: vmv1r.v v9, v0330; VLDEP-NEXT: vmv1r.v v0, v8331; VLDEP-NEXT: vmv.v.i v8, 0332; VLDEP-NEXT: vmerge.vim v8, v8, 1, v0333; VLDEP-NEXT: vsetvli zero, a0, e8, mf2, ta, ma334; VLDEP-NEXT: vmv.v.i v10, 0335; VLDEP-NEXT: vmv1r.v v0, v9336; VLDEP-NEXT: vmerge.vim v9, v10, 1, v0337; VLDEP-NEXT: addi a0, a0, -5338; VLDEP-NEXT: vsetivli zero, 5, e8, mf2, ta, ma339; VLDEP-NEXT: vslidedown.vx v9, v9, a0340; VLDEP-NEXT: vsetvli zero, a1, e8, mf2, ta, ma341; VLDEP-NEXT: vslideup.vi v9, v8, 5342; VLDEP-NEXT: vmsne.vi v0, v9, 0343; VLDEP-NEXT: ret344 345 %v = call <vscale x 4 x i1> @llvm.experimental.vp.splice.nxv4i1(<vscale x 4 x i1> %va, <vscale x 4 x i1> %vb, i32 -5, <vscale x 4 x i1> splat (i1 1), i32 %evla, i32 %evlb)346 ret <vscale x 4 x i1> %v347}348 349define <vscale x 4 x i1> @test_vp_splice_nxv4i1_masked(<vscale x 4 x i1> %va, <vscale x 4 x i1> %vb, <vscale x 4 x i1> %mask, i32 zeroext %evla, i32 zeroext %evlb) #0 {350; NOVLDEP-LABEL: test_vp_splice_nxv4i1_masked:351; NOVLDEP: # %bb.0:352; NOVLDEP-NEXT: vsetvli zero, a1, e8, mf2, ta, ma353; NOVLDEP-NEXT: vmv1r.v v10, v0354; NOVLDEP-NEXT: vmv1r.v v0, v8355; NOVLDEP-NEXT: vmv.v.i v8, 0356; NOVLDEP-NEXT: vmerge.vim v8, v8, 1, v0357; NOVLDEP-NEXT: vsetvli zero, a0, e8, mf2, ta, ma358; NOVLDEP-NEXT: vmv.v.i v11, 0359; NOVLDEP-NEXT: vmv1r.v v0, v10360; NOVLDEP-NEXT: vmerge.vim v10, v11, 1, v0361; NOVLDEP-NEXT: addi a0, a0, -5362; NOVLDEP-NEXT: vmv1r.v v0, v9363; NOVLDEP-NEXT: vsetvli zero, a1, e8, mf2, ta, ma364; NOVLDEP-NEXT: vslidedown.vi v10, v10, 5, v0.t365; NOVLDEP-NEXT: vsetvli zero, zero, e8, mf2, ta, mu366; NOVLDEP-NEXT: vslideup.vx v10, v8, a0, v0.t367; NOVLDEP-NEXT: vsetvli zero, zero, e8, mf2, ta, ma368; NOVLDEP-NEXT: vmsne.vi v0, v10, 0, v0.t369; NOVLDEP-NEXT: ret370;371; VLDEP-LABEL: test_vp_splice_nxv4i1_masked:372; VLDEP: # %bb.0:373; VLDEP-NEXT: vsetvli zero, a1, e8, mf2, ta, ma374; VLDEP-NEXT: vmv1r.v v10, v0375; VLDEP-NEXT: vmv1r.v v0, v8376; VLDEP-NEXT: vmv.v.i v8, 0377; VLDEP-NEXT: vmerge.vim v8, v8, 1, v0378; VLDEP-NEXT: vsetvli zero, a0, e8, mf2, ta, ma379; VLDEP-NEXT: vmv.v.i v11, 0380; VLDEP-NEXT: vmv1r.v v0, v10381; VLDEP-NEXT: vmerge.vim v10, v11, 1, v0382; VLDEP-NEXT: addi a0, a0, -5383; VLDEP-NEXT: vmv1r.v v0, v9384; VLDEP-NEXT: vsetvli zero, a0, e8, mf2, ta, ma385; VLDEP-NEXT: vslidedown.vi v10, v10, 5, v0.t386; VLDEP-NEXT: vsetvli zero, a1, e8, mf2, ta, mu387; VLDEP-NEXT: vslideup.vx v10, v8, a0, v0.t388; VLDEP-NEXT: vsetvli zero, zero, e8, mf2, ta, ma389; VLDEP-NEXT: vmsne.vi v0, v10, 0, v0.t390; VLDEP-NEXT: ret391 %v = call <vscale x 4 x i1> @llvm.experimental.vp.splice.nxv4i1(<vscale x 4 x i1> %va, <vscale x 4 x i1> %vb, i32 5, <vscale x 4 x i1> %mask, i32 %evla, i32 %evlb)392 ret <vscale x 4 x i1> %v393}394 395define <vscale x 8 x i1> @test_vp_splice_nxv8i1(<vscale x 8 x i1> %va, <vscale x 8 x i1> %vb, i32 zeroext %evla, i32 zeroext %evlb) #0 {396; NOVLDEP-LABEL: test_vp_splice_nxv8i1:397; NOVLDEP: # %bb.0:398; NOVLDEP-NEXT: vsetvli zero, a1, e8, m1, ta, ma399; NOVLDEP-NEXT: vmv1r.v v9, v0400; NOVLDEP-NEXT: vmv1r.v v0, v8401; NOVLDEP-NEXT: vmv.v.i v8, 0402; NOVLDEP-NEXT: vmerge.vim v8, v8, 1, v0403; NOVLDEP-NEXT: vsetvli zero, a0, e8, m1, ta, ma404; NOVLDEP-NEXT: vmv.v.i v10, 0405; NOVLDEP-NEXT: vmv1r.v v0, v9406; NOVLDEP-NEXT: vmerge.vim v9, v10, 1, v0407; NOVLDEP-NEXT: vsetvli zero, a1, e8, m1, ta, ma408; NOVLDEP-NEXT: vslidedown.vi v9, v9, 5409; NOVLDEP-NEXT: addi a0, a0, -5410; NOVLDEP-NEXT: vslideup.vx v9, v8, a0411; NOVLDEP-NEXT: vmsne.vi v0, v9, 0412; NOVLDEP-NEXT: ret413;414; VLDEP-LABEL: test_vp_splice_nxv8i1:415; VLDEP: # %bb.0:416; VLDEP-NEXT: vsetvli zero, a1, e8, m1, ta, ma417; VLDEP-NEXT: vmv1r.v v9, v0418; VLDEP-NEXT: vmv1r.v v0, v8419; VLDEP-NEXT: vmv.v.i v8, 0420; VLDEP-NEXT: vmerge.vim v8, v8, 1, v0421; VLDEP-NEXT: vsetvli zero, a0, e8, m1, ta, ma422; VLDEP-NEXT: vmv.v.i v10, 0423; VLDEP-NEXT: vmv1r.v v0, v9424; VLDEP-NEXT: vmerge.vim v9, v10, 1, v0425; VLDEP-NEXT: addi a0, a0, -5426; VLDEP-NEXT: vsetvli zero, a0, e8, m1, ta, ma427; VLDEP-NEXT: vslidedown.vi v9, v9, 5428; VLDEP-NEXT: vsetvli zero, a1, e8, m1, ta, ma429; VLDEP-NEXT: vslideup.vx v9, v8, a0430; VLDEP-NEXT: vmsne.vi v0, v9, 0431; VLDEP-NEXT: ret432 433 %v = call <vscale x 8 x i1> @llvm.experimental.vp.splice.nxv8i1(<vscale x 8 x i1> %va, <vscale x 8 x i1> %vb, i32 5, <vscale x 8 x i1> splat (i1 1), i32 %evla, i32 %evlb)434 ret <vscale x 8 x i1> %v435}436 437define <vscale x 8 x i1> @test_vp_splice_nxv8i1_negative_offset(<vscale x 8 x i1> %va, <vscale x 8 x i1> %vb, i32 zeroext %evla, i32 zeroext %evlb) #0 {438; NOVLDEP-LABEL: test_vp_splice_nxv8i1_negative_offset:439; NOVLDEP: # %bb.0:440; NOVLDEP-NEXT: vsetvli zero, a1, e8, m1, ta, ma441; NOVLDEP-NEXT: vmv1r.v v9, v0442; NOVLDEP-NEXT: vmv1r.v v0, v8443; NOVLDEP-NEXT: vmv.v.i v8, 0444; NOVLDEP-NEXT: vmerge.vim v8, v8, 1, v0445; NOVLDEP-NEXT: vsetvli zero, a0, e8, m1, ta, ma446; NOVLDEP-NEXT: vmv.v.i v10, 0447; NOVLDEP-NEXT: vmv1r.v v0, v9448; NOVLDEP-NEXT: vmerge.vim v9, v10, 1, v0449; NOVLDEP-NEXT: addi a0, a0, -5450; NOVLDEP-NEXT: vsetvli zero, a1, e8, m1, ta, ma451; NOVLDEP-NEXT: vslidedown.vx v9, v9, a0452; NOVLDEP-NEXT: vslideup.vi v9, v8, 5453; NOVLDEP-NEXT: vmsne.vi v0, v9, 0454; NOVLDEP-NEXT: ret455;456; VLDEP-LABEL: test_vp_splice_nxv8i1_negative_offset:457; VLDEP: # %bb.0:458; VLDEP-NEXT: vsetvli zero, a1, e8, m1, ta, ma459; VLDEP-NEXT: vmv1r.v v9, v0460; VLDEP-NEXT: vmv1r.v v0, v8461; VLDEP-NEXT: vmv.v.i v8, 0462; VLDEP-NEXT: vmerge.vim v8, v8, 1, v0463; VLDEP-NEXT: vsetvli zero, a0, e8, m1, ta, ma464; VLDEP-NEXT: vmv.v.i v10, 0465; VLDEP-NEXT: vmv1r.v v0, v9466; VLDEP-NEXT: vmerge.vim v9, v10, 1, v0467; VLDEP-NEXT: addi a0, a0, -5468; VLDEP-NEXT: vsetivli zero, 5, e8, m1, ta, ma469; VLDEP-NEXT: vslidedown.vx v9, v9, a0470; VLDEP-NEXT: vsetvli zero, a1, e8, m1, ta, ma471; VLDEP-NEXT: vslideup.vi v9, v8, 5472; VLDEP-NEXT: vmsne.vi v0, v9, 0473; VLDEP-NEXT: ret474 475 %v = call <vscale x 8 x i1> @llvm.experimental.vp.splice.nxv8i1(<vscale x 8 x i1> %va, <vscale x 8 x i1> %vb, i32 -5, <vscale x 8 x i1> splat (i1 1), i32 %evla, i32 %evlb)476 ret <vscale x 8 x i1> %v477}478 479define <vscale x 8 x i1> @test_vp_splice_nxv8i1_masked(<vscale x 8 x i1> %va, <vscale x 8 x i1> %vb, <vscale x 8 x i1> %mask, i32 zeroext %evla, i32 zeroext %evlb) #0 {480; NOVLDEP-LABEL: test_vp_splice_nxv8i1_masked:481; NOVLDEP: # %bb.0:482; NOVLDEP-NEXT: vsetvli zero, a1, e8, m1, ta, ma483; NOVLDEP-NEXT: vmv1r.v v10, v0484; NOVLDEP-NEXT: vmv1r.v v0, v8485; NOVLDEP-NEXT: vmv.v.i v8, 0486; NOVLDEP-NEXT: vmerge.vim v8, v8, 1, v0487; NOVLDEP-NEXT: vsetvli zero, a0, e8, m1, ta, ma488; NOVLDEP-NEXT: vmv.v.i v11, 0489; NOVLDEP-NEXT: vmv1r.v v0, v10490; NOVLDEP-NEXT: vmerge.vim v10, v11, 1, v0491; NOVLDEP-NEXT: addi a0, a0, -5492; NOVLDEP-NEXT: vmv1r.v v0, v9493; NOVLDEP-NEXT: vsetvli zero, a1, e8, m1, ta, ma494; NOVLDEP-NEXT: vslidedown.vi v10, v10, 5, v0.t495; NOVLDEP-NEXT: vsetvli zero, zero, e8, m1, ta, mu496; NOVLDEP-NEXT: vslideup.vx v10, v8, a0, v0.t497; NOVLDEP-NEXT: vsetvli zero, zero, e8, m1, ta, ma498; NOVLDEP-NEXT: vmsne.vi v0, v10, 0, v0.t499; NOVLDEP-NEXT: ret500;501; VLDEP-LABEL: test_vp_splice_nxv8i1_masked:502; VLDEP: # %bb.0:503; VLDEP-NEXT: vsetvli zero, a1, e8, m1, ta, ma504; VLDEP-NEXT: vmv1r.v v10, v0505; VLDEP-NEXT: vmv1r.v v0, v8506; VLDEP-NEXT: vmv.v.i v8, 0507; VLDEP-NEXT: vmerge.vim v8, v8, 1, v0508; VLDEP-NEXT: vsetvli zero, a0, e8, m1, ta, ma509; VLDEP-NEXT: vmv.v.i v11, 0510; VLDEP-NEXT: vmv1r.v v0, v10511; VLDEP-NEXT: vmerge.vim v10, v11, 1, v0512; VLDEP-NEXT: addi a0, a0, -5513; VLDEP-NEXT: vmv1r.v v0, v9514; VLDEP-NEXT: vsetvli zero, a0, e8, m1, ta, ma515; VLDEP-NEXT: vslidedown.vi v10, v10, 5, v0.t516; VLDEP-NEXT: vsetvli zero, a1, e8, m1, ta, mu517; VLDEP-NEXT: vslideup.vx v10, v8, a0, v0.t518; VLDEP-NEXT: vsetvli zero, zero, e8, m1, ta, ma519; VLDEP-NEXT: vmsne.vi v0, v10, 0, v0.t520; VLDEP-NEXT: ret521 %v = call <vscale x 8 x i1> @llvm.experimental.vp.splice.nxv8i1(<vscale x 8 x i1> %va, <vscale x 8 x i1> %vb, i32 5, <vscale x 8 x i1> %mask, i32 %evla, i32 %evlb)522 ret <vscale x 8 x i1> %v523}524 525define <vscale x 16 x i1> @test_vp_splice_nxv16i1(<vscale x 16 x i1> %va, <vscale x 16 x i1> %vb, i32 zeroext %evla, i32 zeroext %evlb) #0 {526; NOVLDEP-LABEL: test_vp_splice_nxv16i1:527; NOVLDEP: # %bb.0:528; NOVLDEP-NEXT: vsetvli zero, a1, e8, m2, ta, ma529; NOVLDEP-NEXT: vmv1r.v v9, v0530; NOVLDEP-NEXT: vmv1r.v v0, v8531; NOVLDEP-NEXT: vmv.v.i v10, 0532; NOVLDEP-NEXT: vmerge.vim v10, v10, 1, v0533; NOVLDEP-NEXT: vsetvli zero, a0, e8, m2, ta, ma534; NOVLDEP-NEXT: vmv.v.i v12, 0535; NOVLDEP-NEXT: vmv1r.v v0, v9536; NOVLDEP-NEXT: vmerge.vim v8, v12, 1, v0537; NOVLDEP-NEXT: vsetvli zero, a1, e8, m2, ta, ma538; NOVLDEP-NEXT: vslidedown.vi v8, v8, 5539; NOVLDEP-NEXT: addi a0, a0, -5540; NOVLDEP-NEXT: vslideup.vx v8, v10, a0541; NOVLDEP-NEXT: vmsne.vi v0, v8, 0542; NOVLDEP-NEXT: ret543;544; VLDEP-LABEL: test_vp_splice_nxv16i1:545; VLDEP: # %bb.0:546; VLDEP-NEXT: vsetvli zero, a1, e8, m2, ta, ma547; VLDEP-NEXT: vmv1r.v v9, v0548; VLDEP-NEXT: vmv1r.v v0, v8549; VLDEP-NEXT: vmv.v.i v10, 0550; VLDEP-NEXT: vmerge.vim v10, v10, 1, v0551; VLDEP-NEXT: vsetvli zero, a0, e8, m2, ta, ma552; VLDEP-NEXT: vmv.v.i v12, 0553; VLDEP-NEXT: vmv1r.v v0, v9554; VLDEP-NEXT: vmerge.vim v8, v12, 1, v0555; VLDEP-NEXT: addi a0, a0, -5556; VLDEP-NEXT: vsetvli zero, a0, e8, m2, ta, ma557; VLDEP-NEXT: vslidedown.vi v8, v8, 5558; VLDEP-NEXT: vsetvli zero, a1, e8, m2, ta, ma559; VLDEP-NEXT: vslideup.vx v8, v10, a0560; VLDEP-NEXT: vmsne.vi v0, v8, 0561; VLDEP-NEXT: ret562 563 %v = call <vscale x 16 x i1> @llvm.experimental.vp.splice.nxv16i1(<vscale x 16 x i1> %va, <vscale x 16 x i1> %vb, i32 5, <vscale x 16 x i1> splat (i1 1), i32 %evla, i32 %evlb)564 ret <vscale x 16 x i1> %v565}566 567define <vscale x 16 x i1> @test_vp_splice_nxv16i1_negative_offset(<vscale x 16 x i1> %va, <vscale x 16 x i1> %vb, i32 zeroext %evla, i32 zeroext %evlb) #0 {568; NOVLDEP-LABEL: test_vp_splice_nxv16i1_negative_offset:569; NOVLDEP: # %bb.0:570; NOVLDEP-NEXT: vsetvli zero, a1, e8, m2, ta, ma571; NOVLDEP-NEXT: vmv1r.v v9, v0572; NOVLDEP-NEXT: vmv1r.v v0, v8573; NOVLDEP-NEXT: vmv.v.i v10, 0574; NOVLDEP-NEXT: vmerge.vim v10, v10, 1, v0575; NOVLDEP-NEXT: vsetvli zero, a0, e8, m2, ta, ma576; NOVLDEP-NEXT: vmv.v.i v12, 0577; NOVLDEP-NEXT: vmv1r.v v0, v9578; NOVLDEP-NEXT: vmerge.vim v8, v12, 1, v0579; NOVLDEP-NEXT: addi a0, a0, -5580; NOVLDEP-NEXT: vsetvli zero, a1, e8, m2, ta, ma581; NOVLDEP-NEXT: vslidedown.vx v8, v8, a0582; NOVLDEP-NEXT: vslideup.vi v8, v10, 5583; NOVLDEP-NEXT: vmsne.vi v0, v8, 0584; NOVLDEP-NEXT: ret585;586; VLDEP-LABEL: test_vp_splice_nxv16i1_negative_offset:587; VLDEP: # %bb.0:588; VLDEP-NEXT: vsetvli zero, a1, e8, m2, ta, ma589; VLDEP-NEXT: vmv1r.v v9, v0590; VLDEP-NEXT: vmv1r.v v0, v8591; VLDEP-NEXT: vmv.v.i v10, 0592; VLDEP-NEXT: vmerge.vim v10, v10, 1, v0593; VLDEP-NEXT: vsetvli zero, a0, e8, m2, ta, ma594; VLDEP-NEXT: vmv.v.i v12, 0595; VLDEP-NEXT: vmv1r.v v0, v9596; VLDEP-NEXT: vmerge.vim v8, v12, 1, v0597; VLDEP-NEXT: addi a0, a0, -5598; VLDEP-NEXT: vsetivli zero, 5, e8, m2, ta, ma599; VLDEP-NEXT: vslidedown.vx v8, v8, a0600; VLDEP-NEXT: vsetvli zero, a1, e8, m2, ta, ma601; VLDEP-NEXT: vslideup.vi v8, v10, 5602; VLDEP-NEXT: vmsne.vi v0, v8, 0603; VLDEP-NEXT: ret604 605 %v = call <vscale x 16 x i1> @llvm.experimental.vp.splice.nxv16i1(<vscale x 16 x i1> %va, <vscale x 16 x i1> %vb, i32 -5, <vscale x 16 x i1> splat (i1 1), i32 %evla, i32 %evlb)606 ret <vscale x 16 x i1> %v607}608 609define <vscale x 16 x i1> @test_vp_splice_nxv16i1_masked(<vscale x 16 x i1> %va, <vscale x 16 x i1> %vb, <vscale x 16 x i1> %mask, i32 zeroext %evla, i32 zeroext %evlb) #0 {610; NOVLDEP-LABEL: test_vp_splice_nxv16i1_masked:611; NOVLDEP: # %bb.0:612; NOVLDEP-NEXT: vsetvli zero, a1, e8, m2, ta, ma613; NOVLDEP-NEXT: vmv1r.v v10, v0614; NOVLDEP-NEXT: vmv1r.v v0, v8615; NOVLDEP-NEXT: vmv.v.i v12, 0616; NOVLDEP-NEXT: vmerge.vim v12, v12, 1, v0617; NOVLDEP-NEXT: vsetvli zero, a0, e8, m2, ta, ma618; NOVLDEP-NEXT: vmv.v.i v14, 0619; NOVLDEP-NEXT: vmv1r.v v0, v10620; NOVLDEP-NEXT: vmerge.vim v10, v14, 1, v0621; NOVLDEP-NEXT: addi a0, a0, -5622; NOVLDEP-NEXT: vmv1r.v v0, v9623; NOVLDEP-NEXT: vsetvli zero, a1, e8, m2, ta, ma624; NOVLDEP-NEXT: vslidedown.vi v10, v10, 5, v0.t625; NOVLDEP-NEXT: vsetvli zero, zero, e8, m2, ta, mu626; NOVLDEP-NEXT: vslideup.vx v10, v12, a0, v0.t627; NOVLDEP-NEXT: vsetvli zero, zero, e8, m2, ta, ma628; NOVLDEP-NEXT: vmsne.vi v8, v10, 0, v0.t629; NOVLDEP-NEXT: vmv1r.v v0, v8630; NOVLDEP-NEXT: ret631;632; VLDEP-LABEL: test_vp_splice_nxv16i1_masked:633; VLDEP: # %bb.0:634; VLDEP-NEXT: vsetvli zero, a1, e8, m2, ta, ma635; VLDEP-NEXT: vmv1r.v v10, v0636; VLDEP-NEXT: vmv1r.v v0, v8637; VLDEP-NEXT: vmv.v.i v12, 0638; VLDEP-NEXT: vmerge.vim v12, v12, 1, v0639; VLDEP-NEXT: vsetvli zero, a0, e8, m2, ta, ma640; VLDEP-NEXT: vmv.v.i v14, 0641; VLDEP-NEXT: vmv1r.v v0, v10642; VLDEP-NEXT: vmerge.vim v10, v14, 1, v0643; VLDEP-NEXT: addi a0, a0, -5644; VLDEP-NEXT: vmv1r.v v0, v9645; VLDEP-NEXT: vsetvli zero, a0, e8, m2, ta, ma646; VLDEP-NEXT: vslidedown.vi v10, v10, 5, v0.t647; VLDEP-NEXT: vsetvli zero, a1, e8, m2, ta, mu648; VLDEP-NEXT: vslideup.vx v10, v12, a0, v0.t649; VLDEP-NEXT: vsetvli zero, zero, e8, m2, ta, ma650; VLDEP-NEXT: vmsne.vi v8, v10, 0, v0.t651; VLDEP-NEXT: vmv1r.v v0, v8652; VLDEP-NEXT: ret653 %v = call <vscale x 16 x i1> @llvm.experimental.vp.splice.nxv16i1(<vscale x 16 x i1> %va, <vscale x 16 x i1> %vb, i32 5, <vscale x 16 x i1> %mask, i32 %evla, i32 %evlb)654 ret <vscale x 16 x i1> %v655}656 657define <vscale x 32 x i1> @test_vp_splice_nxv32i1(<vscale x 32 x i1> %va, <vscale x 32 x i1> %vb, i32 zeroext %evla, i32 zeroext %evlb) #0 {658; NOVLDEP-LABEL: test_vp_splice_nxv32i1:659; NOVLDEP: # %bb.0:660; NOVLDEP-NEXT: vsetvli zero, a1, e8, m4, ta, ma661; NOVLDEP-NEXT: vmv1r.v v9, v0662; NOVLDEP-NEXT: vmv1r.v v0, v8663; NOVLDEP-NEXT: vmv.v.i v12, 0664; NOVLDEP-NEXT: vmerge.vim v12, v12, 1, v0665; NOVLDEP-NEXT: vsetvli zero, a0, e8, m4, ta, ma666; NOVLDEP-NEXT: vmv.v.i v16, 0667; NOVLDEP-NEXT: vmv1r.v v0, v9668; NOVLDEP-NEXT: vmerge.vim v8, v16, 1, v0669; NOVLDEP-NEXT: vsetvli zero, a1, e8, m4, ta, ma670; NOVLDEP-NEXT: vslidedown.vi v8, v8, 5671; NOVLDEP-NEXT: addi a0, a0, -5672; NOVLDEP-NEXT: vslideup.vx v8, v12, a0673; NOVLDEP-NEXT: vmsne.vi v0, v8, 0674; NOVLDEP-NEXT: ret675;676; VLDEP-LABEL: test_vp_splice_nxv32i1:677; VLDEP: # %bb.0:678; VLDEP-NEXT: vsetvli zero, a1, e8, m4, ta, ma679; VLDEP-NEXT: vmv1r.v v9, v0680; VLDEP-NEXT: vmv1r.v v0, v8681; VLDEP-NEXT: vmv.v.i v12, 0682; VLDEP-NEXT: vmerge.vim v12, v12, 1, v0683; VLDEP-NEXT: vsetvli zero, a0, e8, m4, ta, ma684; VLDEP-NEXT: vmv.v.i v16, 0685; VLDEP-NEXT: vmv1r.v v0, v9686; VLDEP-NEXT: vmerge.vim v8, v16, 1, v0687; VLDEP-NEXT: addi a0, a0, -5688; VLDEP-NEXT: vsetvli zero, a0, e8, m4, ta, ma689; VLDEP-NEXT: vslidedown.vi v8, v8, 5690; VLDEP-NEXT: vsetvli zero, a1, e8, m4, ta, ma691; VLDEP-NEXT: vslideup.vx v8, v12, a0692; VLDEP-NEXT: vmsne.vi v0, v8, 0693; VLDEP-NEXT: ret694 695 %v = call <vscale x 32 x i1> @llvm.experimental.vp.splice.nxv32i1(<vscale x 32 x i1> %va, <vscale x 32 x i1> %vb, i32 5, <vscale x 32 x i1> splat (i1 1), i32 %evla, i32 %evlb)696 ret <vscale x 32 x i1> %v697}698 699define <vscale x 32 x i1> @test_vp_splice_nxv32i1_negative_offset(<vscale x 32 x i1> %va, <vscale x 32 x i1> %vb, i32 zeroext %evla, i32 zeroext %evlb) #0 {700; NOVLDEP-LABEL: test_vp_splice_nxv32i1_negative_offset:701; NOVLDEP: # %bb.0:702; NOVLDEP-NEXT: vsetvli zero, a1, e8, m4, ta, ma703; NOVLDEP-NEXT: vmv1r.v v9, v0704; NOVLDEP-NEXT: vmv1r.v v0, v8705; NOVLDEP-NEXT: vmv.v.i v12, 0706; NOVLDEP-NEXT: vmerge.vim v12, v12, 1, v0707; NOVLDEP-NEXT: vsetvli zero, a0, e8, m4, ta, ma708; NOVLDEP-NEXT: vmv.v.i v16, 0709; NOVLDEP-NEXT: vmv1r.v v0, v9710; NOVLDEP-NEXT: vmerge.vim v8, v16, 1, v0711; NOVLDEP-NEXT: addi a0, a0, -5712; NOVLDEP-NEXT: vsetvli zero, a1, e8, m4, ta, ma713; NOVLDEP-NEXT: vslidedown.vx v8, v8, a0714; NOVLDEP-NEXT: vslideup.vi v8, v12, 5715; NOVLDEP-NEXT: vmsne.vi v0, v8, 0716; NOVLDEP-NEXT: ret717;718; VLDEP-LABEL: test_vp_splice_nxv32i1_negative_offset:719; VLDEP: # %bb.0:720; VLDEP-NEXT: vsetvli zero, a1, e8, m4, ta, ma721; VLDEP-NEXT: vmv1r.v v9, v0722; VLDEP-NEXT: vmv1r.v v0, v8723; VLDEP-NEXT: vmv.v.i v12, 0724; VLDEP-NEXT: vmerge.vim v12, v12, 1, v0725; VLDEP-NEXT: vsetvli zero, a0, e8, m4, ta, ma726; VLDEP-NEXT: vmv.v.i v16, 0727; VLDEP-NEXT: vmv1r.v v0, v9728; VLDEP-NEXT: vmerge.vim v8, v16, 1, v0729; VLDEP-NEXT: addi a0, a0, -5730; VLDEP-NEXT: vsetivli zero, 5, e8, m4, ta, ma731; VLDEP-NEXT: vslidedown.vx v8, v8, a0732; VLDEP-NEXT: vsetvli zero, a1, e8, m4, ta, ma733; VLDEP-NEXT: vslideup.vi v8, v12, 5734; VLDEP-NEXT: vmsne.vi v0, v8, 0735; VLDEP-NEXT: ret736 737 %v = call <vscale x 32 x i1> @llvm.experimental.vp.splice.nxv32i1(<vscale x 32 x i1> %va, <vscale x 32 x i1> %vb, i32 -5, <vscale x 32 x i1> splat (i1 1), i32 %evla, i32 %evlb)738 ret <vscale x 32 x i1> %v739}740 741define <vscale x 32 x i1> @test_vp_splice_nxv32i1_masked(<vscale x 32 x i1> %va, <vscale x 32 x i1> %vb, <vscale x 32 x i1> %mask, i32 zeroext %evla, i32 zeroext %evlb) #0 {742; NOVLDEP-LABEL: test_vp_splice_nxv32i1_masked:743; NOVLDEP: # %bb.0:744; NOVLDEP-NEXT: vsetvli zero, a1, e8, m4, ta, ma745; NOVLDEP-NEXT: vmv1r.v v10, v0746; NOVLDEP-NEXT: vmv1r.v v0, v8747; NOVLDEP-NEXT: vmv.v.i v12, 0748; NOVLDEP-NEXT: vmerge.vim v12, v12, 1, v0749; NOVLDEP-NEXT: vsetvli zero, a0, e8, m4, ta, ma750; NOVLDEP-NEXT: vmv.v.i v16, 0751; NOVLDEP-NEXT: vmv1r.v v0, v10752; NOVLDEP-NEXT: vmerge.vim v16, v16, 1, v0753; NOVLDEP-NEXT: addi a0, a0, -5754; NOVLDEP-NEXT: vmv1r.v v0, v9755; NOVLDEP-NEXT: vsetvli zero, a1, e8, m4, ta, ma756; NOVLDEP-NEXT: vslidedown.vi v16, v16, 5, v0.t757; NOVLDEP-NEXT: vsetvli zero, zero, e8, m4, ta, mu758; NOVLDEP-NEXT: vslideup.vx v16, v12, a0, v0.t759; NOVLDEP-NEXT: vsetvli zero, zero, e8, m4, ta, ma760; NOVLDEP-NEXT: vmsne.vi v8, v16, 0, v0.t761; NOVLDEP-NEXT: vmv1r.v v0, v8762; NOVLDEP-NEXT: ret763;764; VLDEP-LABEL: test_vp_splice_nxv32i1_masked:765; VLDEP: # %bb.0:766; VLDEP-NEXT: vsetvli zero, a1, e8, m4, ta, ma767; VLDEP-NEXT: vmv1r.v v10, v0768; VLDEP-NEXT: vmv1r.v v0, v8769; VLDEP-NEXT: vmv.v.i v12, 0770; VLDEP-NEXT: vmerge.vim v12, v12, 1, v0771; VLDEP-NEXT: vsetvli zero, a0, e8, m4, ta, ma772; VLDEP-NEXT: vmv.v.i v16, 0773; VLDEP-NEXT: vmv1r.v v0, v10774; VLDEP-NEXT: vmerge.vim v16, v16, 1, v0775; VLDEP-NEXT: addi a0, a0, -5776; VLDEP-NEXT: vmv1r.v v0, v9777; VLDEP-NEXT: vsetvli zero, a0, e8, m4, ta, ma778; VLDEP-NEXT: vslidedown.vi v16, v16, 5, v0.t779; VLDEP-NEXT: vsetvli zero, a1, e8, m4, ta, mu780; VLDEP-NEXT: vslideup.vx v16, v12, a0, v0.t781; VLDEP-NEXT: vsetvli zero, zero, e8, m4, ta, ma782; VLDEP-NEXT: vmsne.vi v8, v16, 0, v0.t783; VLDEP-NEXT: vmv1r.v v0, v8784; VLDEP-NEXT: ret785 %v = call <vscale x 32 x i1> @llvm.experimental.vp.splice.nxv32i1(<vscale x 32 x i1> %va, <vscale x 32 x i1> %vb, i32 5, <vscale x 32 x i1> %mask, i32 %evla, i32 %evlb)786 ret <vscale x 32 x i1> %v787}788 789define <vscale x 64 x i1> @test_vp_splice_nxv64i1(<vscale x 64 x i1> %va, <vscale x 64 x i1> %vb, i32 zeroext %evla, i32 zeroext %evlb) #0 {790; NOVLDEP-LABEL: test_vp_splice_nxv64i1:791; NOVLDEP: # %bb.0:792; NOVLDEP-NEXT: vsetvli zero, a1, e8, m8, ta, ma793; NOVLDEP-NEXT: vmv1r.v v9, v0794; NOVLDEP-NEXT: vmv1r.v v0, v8795; NOVLDEP-NEXT: vmv.v.i v16, 0796; NOVLDEP-NEXT: vmerge.vim v16, v16, 1, v0797; NOVLDEP-NEXT: vsetvli zero, a0, e8, m8, ta, ma798; NOVLDEP-NEXT: vmv.v.i v24, 0799; NOVLDEP-NEXT: vmv1r.v v0, v9800; NOVLDEP-NEXT: vmerge.vim v8, v24, 1, v0801; NOVLDEP-NEXT: vsetvli zero, a1, e8, m8, ta, ma802; NOVLDEP-NEXT: vslidedown.vi v8, v8, 5803; NOVLDEP-NEXT: addi a0, a0, -5804; NOVLDEP-NEXT: vslideup.vx v8, v16, a0805; NOVLDEP-NEXT: vmsne.vi v0, v8, 0806; NOVLDEP-NEXT: ret807;808; VLDEP-LABEL: test_vp_splice_nxv64i1:809; VLDEP: # %bb.0:810; VLDEP-NEXT: vsetvli zero, a1, e8, m8, ta, ma811; VLDEP-NEXT: vmv1r.v v9, v0812; VLDEP-NEXT: vmv1r.v v0, v8813; VLDEP-NEXT: vmv.v.i v16, 0814; VLDEP-NEXT: vmerge.vim v16, v16, 1, v0815; VLDEP-NEXT: vsetvli zero, a0, e8, m8, ta, ma816; VLDEP-NEXT: vmv.v.i v24, 0817; VLDEP-NEXT: vmv1r.v v0, v9818; VLDEP-NEXT: vmerge.vim v8, v24, 1, v0819; VLDEP-NEXT: addi a0, a0, -5820; VLDEP-NEXT: vsetvli zero, a0, e8, m8, ta, ma821; VLDEP-NEXT: vslidedown.vi v8, v8, 5822; VLDEP-NEXT: vsetvli zero, a1, e8, m8, ta, ma823; VLDEP-NEXT: vslideup.vx v8, v16, a0824; VLDEP-NEXT: vmsne.vi v0, v8, 0825; VLDEP-NEXT: ret826 827 %v = call <vscale x 64 x i1> @llvm.experimental.vp.splice.nxv64i1(<vscale x 64 x i1> %va, <vscale x 64 x i1> %vb, i32 5, <vscale x 64 x i1> splat (i1 1), i32 %evla, i32 %evlb)828 ret <vscale x 64 x i1> %v829}830 831define <vscale x 64 x i1> @test_vp_splice_nxv64i1_negative_offset(<vscale x 64 x i1> %va, <vscale x 64 x i1> %vb, i32 zeroext %evla, i32 zeroext %evlb) #0 {832; NOVLDEP-LABEL: test_vp_splice_nxv64i1_negative_offset:833; NOVLDEP: # %bb.0:834; NOVLDEP-NEXT: vsetvli zero, a1, e8, m8, ta, ma835; NOVLDEP-NEXT: vmv1r.v v9, v0836; NOVLDEP-NEXT: vmv1r.v v0, v8837; NOVLDEP-NEXT: vmv.v.i v16, 0838; NOVLDEP-NEXT: vmerge.vim v16, v16, 1, v0839; NOVLDEP-NEXT: vsetvli zero, a0, e8, m8, ta, ma840; NOVLDEP-NEXT: vmv.v.i v24, 0841; NOVLDEP-NEXT: vmv1r.v v0, v9842; NOVLDEP-NEXT: vmerge.vim v8, v24, 1, v0843; NOVLDEP-NEXT: addi a0, a0, -5844; NOVLDEP-NEXT: vsetvli zero, a1, e8, m8, ta, ma845; NOVLDEP-NEXT: vslidedown.vx v8, v8, a0846; NOVLDEP-NEXT: vslideup.vi v8, v16, 5847; NOVLDEP-NEXT: vmsne.vi v0, v8, 0848; NOVLDEP-NEXT: ret849;850; VLDEP-LABEL: test_vp_splice_nxv64i1_negative_offset:851; VLDEP: # %bb.0:852; VLDEP-NEXT: vsetvli zero, a1, e8, m8, ta, ma853; VLDEP-NEXT: vmv1r.v v9, v0854; VLDEP-NEXT: vmv1r.v v0, v8855; VLDEP-NEXT: vmv.v.i v16, 0856; VLDEP-NEXT: vmerge.vim v16, v16, 1, v0857; VLDEP-NEXT: vsetvli zero, a0, e8, m8, ta, ma858; VLDEP-NEXT: vmv.v.i v24, 0859; VLDEP-NEXT: vmv1r.v v0, v9860; VLDEP-NEXT: vmerge.vim v8, v24, 1, v0861; VLDEP-NEXT: addi a0, a0, -5862; VLDEP-NEXT: vsetivli zero, 5, e8, m8, ta, ma863; VLDEP-NEXT: vslidedown.vx v8, v8, a0864; VLDEP-NEXT: vsetvli zero, a1, e8, m8, ta, ma865; VLDEP-NEXT: vslideup.vi v8, v16, 5866; VLDEP-NEXT: vmsne.vi v0, v8, 0867; VLDEP-NEXT: ret868 869 %v = call <vscale x 64 x i1> @llvm.experimental.vp.splice.nxv64i1(<vscale x 64 x i1> %va, <vscale x 64 x i1> %vb, i32 -5, <vscale x 64 x i1> splat (i1 1), i32 %evla, i32 %evlb)870 ret <vscale x 64 x i1> %v871}872 873define <vscale x 64 x i1> @test_vp_splice_nxv64i1_masked(<vscale x 64 x i1> %va, <vscale x 64 x i1> %vb, <vscale x 64 x i1> %mask, i32 zeroext %evla, i32 zeroext %evlb) #0 {874; NOVLDEP-LABEL: test_vp_splice_nxv64i1_masked:875; NOVLDEP: # %bb.0:876; NOVLDEP-NEXT: vsetvli zero, a1, e8, m8, ta, ma877; NOVLDEP-NEXT: vmv1r.v v10, v0878; NOVLDEP-NEXT: vmv1r.v v0, v8879; NOVLDEP-NEXT: vmv.v.i v16, 0880; NOVLDEP-NEXT: vmerge.vim v16, v16, 1, v0881; NOVLDEP-NEXT: vsetvli zero, a0, e8, m8, ta, ma882; NOVLDEP-NEXT: vmv.v.i v24, 0883; NOVLDEP-NEXT: vmv1r.v v0, v10884; NOVLDEP-NEXT: vmerge.vim v24, v24, 1, v0885; NOVLDEP-NEXT: addi a0, a0, -5886; NOVLDEP-NEXT: vmv1r.v v0, v9887; NOVLDEP-NEXT: vsetvli zero, a1, e8, m8, ta, ma888; NOVLDEP-NEXT: vslidedown.vi v24, v24, 5, v0.t889; NOVLDEP-NEXT: vsetvli zero, zero, e8, m8, ta, mu890; NOVLDEP-NEXT: vslideup.vx v24, v16, a0, v0.t891; NOVLDEP-NEXT: vsetvli zero, zero, e8, m8, ta, ma892; NOVLDEP-NEXT: vmsne.vi v8, v24, 0, v0.t893; NOVLDEP-NEXT: vmv1r.v v0, v8894; NOVLDEP-NEXT: ret895;896; VLDEP-LABEL: test_vp_splice_nxv64i1_masked:897; VLDEP: # %bb.0:898; VLDEP-NEXT: vsetvli zero, a1, e8, m8, ta, ma899; VLDEP-NEXT: vmv1r.v v10, v0900; VLDEP-NEXT: vmv1r.v v0, v8901; VLDEP-NEXT: vmv.v.i v16, 0902; VLDEP-NEXT: vmerge.vim v16, v16, 1, v0903; VLDEP-NEXT: vsetvli zero, a0, e8, m8, ta, ma904; VLDEP-NEXT: vmv.v.i v24, 0905; VLDEP-NEXT: vmv1r.v v0, v10906; VLDEP-NEXT: vmerge.vim v24, v24, 1, v0907; VLDEP-NEXT: addi a0, a0, -5908; VLDEP-NEXT: vmv1r.v v0, v9909; VLDEP-NEXT: vsetvli zero, a0, e8, m8, ta, ma910; VLDEP-NEXT: vslidedown.vi v24, v24, 5, v0.t911; VLDEP-NEXT: vsetvli zero, a1, e8, m8, ta, mu912; VLDEP-NEXT: vslideup.vx v24, v16, a0, v0.t913; VLDEP-NEXT: vsetvli zero, zero, e8, m8, ta, ma914; VLDEP-NEXT: vmsne.vi v8, v24, 0, v0.t915; VLDEP-NEXT: vmv1r.v v0, v8916; VLDEP-NEXT: ret917 %v = call <vscale x 64 x i1> @llvm.experimental.vp.splice.nxv64i1(<vscale x 64 x i1> %va, <vscale x 64 x i1> %vb, i32 5, <vscale x 64 x i1> %mask, i32 %evla, i32 %evlb)918 ret <vscale x 64 x i1> %v919}920 921attributes #0 = { vscale_range(2,0) }922