526 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=riscv64 -mattr=+v -verify-machineinstrs \3; RUN: < %s | FileCheck %s --check-prefix=NOVLDEP4; RUN: llc -mtriple=riscv64 -mattr=+v,+vl-dependent-latency -verify-machineinstrs \5; RUN: < %s | FileCheck %s --check-prefix=VLDEP6 7define <2 x i1> @test_vp_splice_v2i1(<2 x i1> %va, <2 x i1> %vb, i32 zeroext %evla, i32 zeroext %evlb) {8; NOVLDEP-LABEL: test_vp_splice_v2i1:9; NOVLDEP: # %bb.0:10; NOVLDEP-NEXT: vsetvli zero, a1, e8, mf8, ta, ma11; NOVLDEP-NEXT: vmv1r.v v9, v012; NOVLDEP-NEXT: vmv1r.v v0, v813; NOVLDEP-NEXT: vmv.v.i v8, 014; NOVLDEP-NEXT: vmerge.vim v8, v8, 1, v015; NOVLDEP-NEXT: vsetvli zero, a0, e8, mf8, ta, ma16; NOVLDEP-NEXT: vmv.v.i v10, 017; NOVLDEP-NEXT: vmv1r.v v0, v918; NOVLDEP-NEXT: vmerge.vim v9, v10, 1, v019; NOVLDEP-NEXT: vsetvli zero, a1, e8, mf8, ta, ma20; NOVLDEP-NEXT: vslidedown.vi v9, v9, 121; NOVLDEP-NEXT: addi a0, a0, -122; NOVLDEP-NEXT: vslideup.vx v9, v8, a023; NOVLDEP-NEXT: vmsne.vi v0, v9, 024; NOVLDEP-NEXT: ret25;26; VLDEP-LABEL: test_vp_splice_v2i1:27; VLDEP: # %bb.0:28; VLDEP-NEXT: vsetvli zero, a1, e8, mf8, ta, ma29; VLDEP-NEXT: vmv1r.v v9, v030; VLDEP-NEXT: vmv1r.v v0, v831; VLDEP-NEXT: vmv.v.i v8, 032; VLDEP-NEXT: vmerge.vim v8, v8, 1, v033; VLDEP-NEXT: vsetvli zero, a0, e8, mf8, ta, ma34; VLDEP-NEXT: vmv.v.i v10, 035; VLDEP-NEXT: vmv1r.v v0, v936; VLDEP-NEXT: vmerge.vim v9, v10, 1, v037; VLDEP-NEXT: addi a0, a0, -138; VLDEP-NEXT: vsetvli zero, a0, e8, mf8, ta, ma39; VLDEP-NEXT: vslidedown.vi v9, v9, 140; VLDEP-NEXT: vsetvli zero, a1, e8, mf8, ta, ma41; VLDEP-NEXT: vslideup.vx v9, v8, a042; VLDEP-NEXT: vmsne.vi v0, v9, 043; VLDEP-NEXT: ret44 45 %v = call <2 x i1> @llvm.experimental.vp.splice.v2i1(<2 x i1> %va, <2 x i1> %vb, i32 1, <2 x i1> splat (i1 1), i32 %evla, i32 %evlb)46 ret <2 x i1> %v47}48 49define <2 x i1> @test_vp_splice_v2i1_negative_offset(<2 x i1> %va, <2 x i1> %vb, i32 zeroext %evla, i32 zeroext %evlb) {50; NOVLDEP-LABEL: test_vp_splice_v2i1_negative_offset:51; NOVLDEP: # %bb.0:52; NOVLDEP-NEXT: vsetvli zero, a1, e8, mf8, ta, ma53; NOVLDEP-NEXT: vmv1r.v v9, v054; NOVLDEP-NEXT: vmv1r.v v0, v855; NOVLDEP-NEXT: vmv.v.i v8, 056; NOVLDEP-NEXT: vmerge.vim v8, v8, 1, v057; NOVLDEP-NEXT: vsetvli zero, a0, e8, mf8, ta, ma58; NOVLDEP-NEXT: vmv.v.i v10, 059; NOVLDEP-NEXT: vmv1r.v v0, v960; NOVLDEP-NEXT: vmerge.vim v9, v10, 1, v061; NOVLDEP-NEXT: addi a0, a0, -162; NOVLDEP-NEXT: vsetvli zero, a1, e8, mf8, ta, ma63; NOVLDEP-NEXT: vslidedown.vx v9, v9, a064; NOVLDEP-NEXT: vslideup.vi v9, v8, 165; NOVLDEP-NEXT: vmsne.vi v0, v9, 066; NOVLDEP-NEXT: ret67;68; VLDEP-LABEL: test_vp_splice_v2i1_negative_offset:69; VLDEP: # %bb.0:70; VLDEP-NEXT: vsetvli zero, a1, e8, mf8, ta, ma71; VLDEP-NEXT: vmv1r.v v9, v072; VLDEP-NEXT: vmv1r.v v0, v873; VLDEP-NEXT: vmv.v.i v8, 074; VLDEP-NEXT: vmerge.vim v8, v8, 1, v075; VLDEP-NEXT: vsetvli zero, a0, e8, mf8, ta, ma76; VLDEP-NEXT: vmv.v.i v10, 077; VLDEP-NEXT: vmv1r.v v0, v978; VLDEP-NEXT: vmerge.vim v9, v10, 1, v079; VLDEP-NEXT: addi a0, a0, -180; VLDEP-NEXT: vsetivli zero, 1, e8, mf8, ta, ma81; VLDEP-NEXT: vslidedown.vx v9, v9, a082; VLDEP-NEXT: vsetvli zero, a1, e8, mf8, ta, ma83; VLDEP-NEXT: vslideup.vi v9, v8, 184; VLDEP-NEXT: vmsne.vi v0, v9, 085; VLDEP-NEXT: ret86 87 %v = call <2 x i1> @llvm.experimental.vp.splice.v2i1(<2 x i1> %va, <2 x i1> %vb, i32 -1, <2 x i1> splat (i1 1), i32 %evla, i32 %evlb)88 ret <2 x i1> %v89}90 91define <2 x i1> @test_vp_splice_v2i1_masked(<2 x i1> %va, <2 x i1> %vb, <2 x i1> %mask, i32 zeroext %evla, i32 zeroext %evlb) {92; NOVLDEP-LABEL: test_vp_splice_v2i1_masked:93; NOVLDEP: # %bb.0:94; NOVLDEP-NEXT: vsetvli zero, a1, e8, mf8, ta, ma95; NOVLDEP-NEXT: vmv1r.v v10, v096; NOVLDEP-NEXT: vmv1r.v v0, v897; NOVLDEP-NEXT: vmv.v.i v8, 098; NOVLDEP-NEXT: vmerge.vim v8, v8, 1, v099; NOVLDEP-NEXT: vsetvli zero, a0, e8, mf8, ta, ma100; NOVLDEP-NEXT: vmv.v.i v11, 0101; NOVLDEP-NEXT: vmv1r.v v0, v10102; NOVLDEP-NEXT: vmerge.vim v10, v11, 1, v0103; NOVLDEP-NEXT: addi a0, a0, -1104; NOVLDEP-NEXT: vmv1r.v v0, v9105; NOVLDEP-NEXT: vsetvli zero, a1, e8, mf8, ta, ma106; NOVLDEP-NEXT: vslidedown.vi v10, v10, 1, v0.t107; NOVLDEP-NEXT: vsetvli zero, zero, e8, mf8, ta, mu108; NOVLDEP-NEXT: vslideup.vx v10, v8, a0, v0.t109; NOVLDEP-NEXT: vsetvli zero, zero, e8, mf8, ta, ma110; NOVLDEP-NEXT: vmsne.vi v0, v10, 0, v0.t111; NOVLDEP-NEXT: ret112;113; VLDEP-LABEL: test_vp_splice_v2i1_masked:114; VLDEP: # %bb.0:115; VLDEP-NEXT: vsetvli zero, a1, e8, mf8, ta, ma116; VLDEP-NEXT: vmv1r.v v10, v0117; VLDEP-NEXT: vmv1r.v v0, v8118; VLDEP-NEXT: vmv.v.i v8, 0119; VLDEP-NEXT: vmerge.vim v8, v8, 1, v0120; VLDEP-NEXT: vsetvli zero, a0, e8, mf8, ta, ma121; VLDEP-NEXT: vmv.v.i v11, 0122; VLDEP-NEXT: vmv1r.v v0, v10123; VLDEP-NEXT: vmerge.vim v10, v11, 1, v0124; VLDEP-NEXT: addi a0, a0, -1125; VLDEP-NEXT: vmv1r.v v0, v9126; VLDEP-NEXT: vsetvli zero, a0, e8, mf8, ta, ma127; VLDEP-NEXT: vslidedown.vi v10, v10, 1, v0.t128; VLDEP-NEXT: vsetvli zero, a1, e8, mf8, ta, mu129; VLDEP-NEXT: vslideup.vx v10, v8, a0, v0.t130; VLDEP-NEXT: vsetvli zero, zero, e8, mf8, ta, ma131; VLDEP-NEXT: vmsne.vi v0, v10, 0, v0.t132; VLDEP-NEXT: ret133 %v = call <2 x i1> @llvm.experimental.vp.splice.v2i1(<2 x i1> %va, <2 x i1> %vb, i32 1, <2 x i1> %mask, i32 %evla, i32 %evlb)134 ret <2 x i1> %v135}136 137define <4 x i1> @test_vp_splice_v4i1(<4 x i1> %va, <4 x i1> %vb, i32 zeroext %evla, i32 zeroext %evlb) {138; NOVLDEP-LABEL: test_vp_splice_v4i1:139; NOVLDEP: # %bb.0:140; NOVLDEP-NEXT: vsetvli zero, a1, e8, mf4, ta, ma141; NOVLDEP-NEXT: vmv1r.v v9, v0142; NOVLDEP-NEXT: vmv1r.v v0, v8143; NOVLDEP-NEXT: vmv.v.i v8, 0144; NOVLDEP-NEXT: vmerge.vim v8, v8, 1, v0145; NOVLDEP-NEXT: vsetvli zero, a0, e8, mf4, ta, ma146; NOVLDEP-NEXT: vmv.v.i v10, 0147; NOVLDEP-NEXT: vmv1r.v v0, v9148; NOVLDEP-NEXT: vmerge.vim v9, v10, 1, v0149; NOVLDEP-NEXT: vsetvli zero, a1, e8, mf4, ta, ma150; NOVLDEP-NEXT: vslidedown.vi v9, v9, 3151; NOVLDEP-NEXT: addi a0, a0, -3152; NOVLDEP-NEXT: vslideup.vx v9, v8, a0153; NOVLDEP-NEXT: vmsne.vi v0, v9, 0154; NOVLDEP-NEXT: ret155;156; VLDEP-LABEL: test_vp_splice_v4i1:157; VLDEP: # %bb.0:158; VLDEP-NEXT: vsetvli zero, a1, e8, mf4, ta, ma159; VLDEP-NEXT: vmv1r.v v9, v0160; VLDEP-NEXT: vmv1r.v v0, v8161; VLDEP-NEXT: vmv.v.i v8, 0162; VLDEP-NEXT: vmerge.vim v8, v8, 1, v0163; VLDEP-NEXT: vsetvli zero, a0, e8, mf4, ta, ma164; VLDEP-NEXT: vmv.v.i v10, 0165; VLDEP-NEXT: vmv1r.v v0, v9166; VLDEP-NEXT: vmerge.vim v9, v10, 1, v0167; VLDEP-NEXT: addi a0, a0, -3168; VLDEP-NEXT: vsetvli zero, a0, e8, mf4, ta, ma169; VLDEP-NEXT: vslidedown.vi v9, v9, 3170; VLDEP-NEXT: vsetvli zero, a1, e8, mf4, ta, ma171; VLDEP-NEXT: vslideup.vx v9, v8, a0172; VLDEP-NEXT: vmsne.vi v0, v9, 0173; VLDEP-NEXT: ret174 175 %v = call <4 x i1> @llvm.experimental.vp.splice.v4i1(<4 x i1> %va, <4 x i1> %vb, i32 3, <4 x i1> splat (i1 1), i32 %evla, i32 %evlb)176 ret <4 x i1> %v177}178 179define <4 x i1> @test_vp_splice_v4i1_negative_offset(<4 x i1> %va, <4 x i1> %vb, i32 zeroext %evla, i32 zeroext %evlb) {180; NOVLDEP-LABEL: test_vp_splice_v4i1_negative_offset:181; NOVLDEP: # %bb.0:182; NOVLDEP-NEXT: vsetvli zero, a1, e8, mf4, ta, ma183; NOVLDEP-NEXT: vmv1r.v v9, v0184; NOVLDEP-NEXT: vmv1r.v v0, v8185; NOVLDEP-NEXT: vmv.v.i v8, 0186; NOVLDEP-NEXT: vmerge.vim v8, v8, 1, v0187; NOVLDEP-NEXT: vsetvli zero, a0, e8, mf4, ta, ma188; NOVLDEP-NEXT: vmv.v.i v10, 0189; NOVLDEP-NEXT: vmv1r.v v0, v9190; NOVLDEP-NEXT: vmerge.vim v9, v10, 1, v0191; NOVLDEP-NEXT: addi a0, a0, -3192; NOVLDEP-NEXT: vsetvli zero, a1, e8, mf4, ta, ma193; NOVLDEP-NEXT: vslidedown.vx v9, v9, a0194; NOVLDEP-NEXT: vslideup.vi v9, v8, 3195; NOVLDEP-NEXT: vmsne.vi v0, v9, 0196; NOVLDEP-NEXT: ret197;198; VLDEP-LABEL: test_vp_splice_v4i1_negative_offset:199; VLDEP: # %bb.0:200; VLDEP-NEXT: vsetvli zero, a1, e8, mf4, ta, ma201; VLDEP-NEXT: vmv1r.v v9, v0202; VLDEP-NEXT: vmv1r.v v0, v8203; VLDEP-NEXT: vmv.v.i v8, 0204; VLDEP-NEXT: vmerge.vim v8, v8, 1, v0205; VLDEP-NEXT: vsetvli zero, a0, e8, mf4, ta, ma206; VLDEP-NEXT: vmv.v.i v10, 0207; VLDEP-NEXT: vmv1r.v v0, v9208; VLDEP-NEXT: vmerge.vim v9, v10, 1, v0209; VLDEP-NEXT: addi a0, a0, -3210; VLDEP-NEXT: vsetivli zero, 3, e8, mf4, ta, ma211; VLDEP-NEXT: vslidedown.vx v9, v9, a0212; VLDEP-NEXT: vsetvli zero, a1, e8, mf4, ta, ma213; VLDEP-NEXT: vslideup.vi v9, v8, 3214; VLDEP-NEXT: vmsne.vi v0, v9, 0215; VLDEP-NEXT: ret216 217 %v = call <4 x i1> @llvm.experimental.vp.splice.v4i1(<4 x i1> %va, <4 x i1> %vb, i32 -3, <4 x i1> splat (i1 1), i32 %evla, i32 %evlb)218 ret <4 x i1> %v219}220 221define <4 x i1> @test_vp_splice_v4i1_masked(<4 x i1> %va, <4 x i1> %vb, <4 x i1> %mask, i32 zeroext %evla, i32 zeroext %evlb) {222; NOVLDEP-LABEL: test_vp_splice_v4i1_masked:223; NOVLDEP: # %bb.0:224; NOVLDEP-NEXT: vsetvli zero, a1, e8, mf4, ta, ma225; NOVLDEP-NEXT: vmv1r.v v10, v0226; NOVLDEP-NEXT: vmv1r.v v0, v8227; NOVLDEP-NEXT: vmv.v.i v8, 0228; NOVLDEP-NEXT: vmerge.vim v8, v8, 1, v0229; NOVLDEP-NEXT: vsetvli zero, a0, e8, mf4, ta, ma230; NOVLDEP-NEXT: vmv.v.i v11, 0231; NOVLDEP-NEXT: vmv1r.v v0, v10232; NOVLDEP-NEXT: vmerge.vim v10, v11, 1, v0233; NOVLDEP-NEXT: addi a0, a0, -3234; NOVLDEP-NEXT: vmv1r.v v0, v9235; NOVLDEP-NEXT: vsetvli zero, a1, e8, mf4, ta, ma236; NOVLDEP-NEXT: vslidedown.vi v10, v10, 3, v0.t237; NOVLDEP-NEXT: vsetvli zero, zero, e8, mf4, ta, mu238; NOVLDEP-NEXT: vslideup.vx v10, v8, a0, v0.t239; NOVLDEP-NEXT: vsetvli zero, zero, e8, mf4, ta, ma240; NOVLDEP-NEXT: vmsne.vi v0, v10, 0, v0.t241; NOVLDEP-NEXT: ret242;243; VLDEP-LABEL: test_vp_splice_v4i1_masked:244; VLDEP: # %bb.0:245; VLDEP-NEXT: vsetvli zero, a1, e8, mf4, ta, ma246; VLDEP-NEXT: vmv1r.v v10, v0247; VLDEP-NEXT: vmv1r.v v0, v8248; VLDEP-NEXT: vmv.v.i v8, 0249; VLDEP-NEXT: vmerge.vim v8, v8, 1, v0250; VLDEP-NEXT: vsetvli zero, a0, e8, mf4, ta, ma251; VLDEP-NEXT: vmv.v.i v11, 0252; VLDEP-NEXT: vmv1r.v v0, v10253; VLDEP-NEXT: vmerge.vim v10, v11, 1, v0254; VLDEP-NEXT: addi a0, a0, -3255; VLDEP-NEXT: vmv1r.v v0, v9256; VLDEP-NEXT: vsetvli zero, a0, e8, mf4, ta, ma257; VLDEP-NEXT: vslidedown.vi v10, v10, 3, v0.t258; VLDEP-NEXT: vsetvli zero, a1, e8, mf4, ta, mu259; VLDEP-NEXT: vslideup.vx v10, v8, a0, v0.t260; VLDEP-NEXT: vsetvli zero, zero, e8, mf4, ta, ma261; VLDEP-NEXT: vmsne.vi v0, v10, 0, v0.t262; VLDEP-NEXT: ret263 %v = call <4 x i1> @llvm.experimental.vp.splice.v4i1(<4 x i1> %va, <4 x i1> %vb, i32 3, <4 x i1> %mask, i32 %evla, i32 %evlb)264 ret <4 x i1> %v265}266 267define <8 x i1> @test_vp_splice_v8i1(<8 x i1> %va, <8 x i1> %vb, i32 zeroext %evla, i32 zeroext %evlb) {268; NOVLDEP-LABEL: test_vp_splice_v8i1:269; NOVLDEP: # %bb.0:270; NOVLDEP-NEXT: vsetvli zero, a1, e8, mf2, ta, ma271; NOVLDEP-NEXT: vmv1r.v v9, v0272; NOVLDEP-NEXT: vmv1r.v v0, v8273; NOVLDEP-NEXT: vmv.v.i v8, 0274; NOVLDEP-NEXT: vmerge.vim v8, v8, 1, v0275; NOVLDEP-NEXT: vsetvli zero, a0, e8, mf2, ta, ma276; NOVLDEP-NEXT: vmv.v.i v10, 0277; NOVLDEP-NEXT: vmv1r.v v0, v9278; NOVLDEP-NEXT: vmerge.vim v9, v10, 1, v0279; NOVLDEP-NEXT: vsetvli zero, a1, e8, mf2, ta, ma280; NOVLDEP-NEXT: vslidedown.vi v9, v9, 5281; NOVLDEP-NEXT: addi a0, a0, -5282; NOVLDEP-NEXT: vslideup.vx v9, v8, a0283; NOVLDEP-NEXT: vmsne.vi v0, v9, 0284; NOVLDEP-NEXT: ret285;286; VLDEP-LABEL: test_vp_splice_v8i1:287; VLDEP: # %bb.0:288; VLDEP-NEXT: vsetvli zero, a1, e8, mf2, ta, ma289; VLDEP-NEXT: vmv1r.v v9, v0290; VLDEP-NEXT: vmv1r.v v0, v8291; VLDEP-NEXT: vmv.v.i v8, 0292; VLDEP-NEXT: vmerge.vim v8, v8, 1, v0293; VLDEP-NEXT: vsetvli zero, a0, e8, mf2, ta, ma294; VLDEP-NEXT: vmv.v.i v10, 0295; VLDEP-NEXT: vmv1r.v v0, v9296; VLDEP-NEXT: vmerge.vim v9, v10, 1, v0297; VLDEP-NEXT: addi a0, a0, -5298; VLDEP-NEXT: vsetvli zero, a0, e8, mf2, ta, ma299; VLDEP-NEXT: vslidedown.vi v9, v9, 5300; VLDEP-NEXT: vsetvli zero, a1, e8, mf2, ta, ma301; VLDEP-NEXT: vslideup.vx v9, v8, a0302; VLDEP-NEXT: vmsne.vi v0, v9, 0303; VLDEP-NEXT: ret304 305 %v = call <8 x i1> @llvm.experimental.vp.splice.v8i1(<8 x i1> %va, <8 x i1> %vb, i32 5, <8 x i1> splat (i1 1), i32 %evla, i32 %evlb)306 ret <8 x i1> %v307}308 309define <8 x i1> @test_vp_splice_v8i1_negative_offset(<8 x i1> %va, <8 x i1> %vb, i32 zeroext %evla, i32 zeroext %evlb) {310; NOVLDEP-LABEL: test_vp_splice_v8i1_negative_offset:311; NOVLDEP: # %bb.0:312; NOVLDEP-NEXT: vsetvli zero, a1, e8, mf2, ta, ma313; NOVLDEP-NEXT: vmv1r.v v9, v0314; NOVLDEP-NEXT: vmv1r.v v0, v8315; NOVLDEP-NEXT: vmv.v.i v8, 0316; NOVLDEP-NEXT: vmerge.vim v8, v8, 1, v0317; NOVLDEP-NEXT: vsetvli zero, a0, e8, mf2, ta, ma318; NOVLDEP-NEXT: vmv.v.i v10, 0319; NOVLDEP-NEXT: vmv1r.v v0, v9320; NOVLDEP-NEXT: vmerge.vim v9, v10, 1, v0321; NOVLDEP-NEXT: addi a0, a0, -5322; NOVLDEP-NEXT: vsetvli zero, a1, e8, mf2, ta, ma323; NOVLDEP-NEXT: vslidedown.vx v9, v9, a0324; NOVLDEP-NEXT: vslideup.vi v9, v8, 5325; NOVLDEP-NEXT: vmsne.vi v0, v9, 0326; NOVLDEP-NEXT: ret327;328; VLDEP-LABEL: test_vp_splice_v8i1_negative_offset:329; VLDEP: # %bb.0:330; VLDEP-NEXT: vsetvli zero, a1, e8, mf2, ta, ma331; VLDEP-NEXT: vmv1r.v v9, v0332; VLDEP-NEXT: vmv1r.v v0, v8333; VLDEP-NEXT: vmv.v.i v8, 0334; VLDEP-NEXT: vmerge.vim v8, v8, 1, v0335; VLDEP-NEXT: vsetvli zero, a0, e8, mf2, ta, ma336; VLDEP-NEXT: vmv.v.i v10, 0337; VLDEP-NEXT: vmv1r.v v0, v9338; VLDEP-NEXT: vmerge.vim v9, v10, 1, v0339; VLDEP-NEXT: addi a0, a0, -5340; VLDEP-NEXT: vsetivli zero, 5, e8, mf2, ta, ma341; VLDEP-NEXT: vslidedown.vx v9, v9, a0342; VLDEP-NEXT: vsetvli zero, a1, e8, mf2, ta, ma343; VLDEP-NEXT: vslideup.vi v9, v8, 5344; VLDEP-NEXT: vmsne.vi v0, v9, 0345; VLDEP-NEXT: ret346 347 %v = call <8 x i1> @llvm.experimental.vp.splice.v8i1(<8 x i1> %va, <8 x i1> %vb, i32 -5, <8 x i1> splat (i1 1), i32 %evla, i32 %evlb)348 ret <8 x i1> %v349}350 351define <8 x i1> @test_vp_splice_v8i1_masked(<8 x i1> %va, <8 x i1> %vb, <8 x i1> %mask, i32 zeroext %evla, i32 zeroext %evlb) {352; NOVLDEP-LABEL: test_vp_splice_v8i1_masked:353; NOVLDEP: # %bb.0:354; NOVLDEP-NEXT: vsetvli zero, a1, e8, mf2, ta, ma355; NOVLDEP-NEXT: vmv1r.v v10, v0356; NOVLDEP-NEXT: vmv1r.v v0, v8357; NOVLDEP-NEXT: vmv.v.i v8, 0358; NOVLDEP-NEXT: vmerge.vim v8, v8, 1, v0359; NOVLDEP-NEXT: vsetvli zero, a0, e8, mf2, ta, ma360; NOVLDEP-NEXT: vmv.v.i v11, 0361; NOVLDEP-NEXT: vmv1r.v v0, v10362; NOVLDEP-NEXT: vmerge.vim v10, v11, 1, v0363; NOVLDEP-NEXT: addi a0, a0, -5364; NOVLDEP-NEXT: vmv1r.v v0, v9365; NOVLDEP-NEXT: vsetvli zero, a1, e8, mf2, ta, ma366; NOVLDEP-NEXT: vslidedown.vi v10, v10, 5, v0.t367; NOVLDEP-NEXT: vsetvli zero, zero, e8, mf2, ta, mu368; NOVLDEP-NEXT: vslideup.vx v10, v8, a0, v0.t369; NOVLDEP-NEXT: vsetvli zero, zero, e8, mf2, ta, ma370; NOVLDEP-NEXT: vmsne.vi v0, v10, 0, v0.t371; NOVLDEP-NEXT: ret372;373; VLDEP-LABEL: test_vp_splice_v8i1_masked:374; VLDEP: # %bb.0:375; VLDEP-NEXT: vsetvli zero, a1, e8, mf2, ta, ma376; VLDEP-NEXT: vmv1r.v v10, v0377; VLDEP-NEXT: vmv1r.v v0, v8378; VLDEP-NEXT: vmv.v.i v8, 0379; VLDEP-NEXT: vmerge.vim v8, v8, 1, v0380; VLDEP-NEXT: vsetvli zero, a0, e8, mf2, ta, ma381; VLDEP-NEXT: vmv.v.i v11, 0382; VLDEP-NEXT: vmv1r.v v0, v10383; VLDEP-NEXT: vmerge.vim v10, v11, 1, v0384; VLDEP-NEXT: addi a0, a0, -5385; VLDEP-NEXT: vmv1r.v v0, v9386; VLDEP-NEXT: vsetvli zero, a0, e8, mf2, ta, ma387; VLDEP-NEXT: vslidedown.vi v10, v10, 5, v0.t388; VLDEP-NEXT: vsetvli zero, a1, e8, mf2, ta, mu389; VLDEP-NEXT: vslideup.vx v10, v8, a0, v0.t390; VLDEP-NEXT: vsetvli zero, zero, e8, mf2, ta, ma391; VLDEP-NEXT: vmsne.vi v0, v10, 0, v0.t392; VLDEP-NEXT: ret393 %v = call <8 x i1> @llvm.experimental.vp.splice.v8i1(<8 x i1> %va, <8 x i1> %vb, i32 5, <8 x i1> %mask, i32 %evla, i32 %evlb)394 ret <8 x i1> %v395}396 397define <16 x i1> @test_vp_splice_v16i1(<16 x i1> %va, <16 x i1> %vb, i32 zeroext %evla, i32 zeroext %evlb) {398; NOVLDEP-LABEL: test_vp_splice_v16i1:399; NOVLDEP: # %bb.0:400; NOVLDEP-NEXT: vsetvli zero, a1, e8, m1, ta, ma401; NOVLDEP-NEXT: vmv1r.v v9, v0402; NOVLDEP-NEXT: vmv1r.v v0, v8403; NOVLDEP-NEXT: vmv.v.i v8, 0404; NOVLDEP-NEXT: vmerge.vim v8, v8, 1, v0405; NOVLDEP-NEXT: vsetvli zero, a0, e8, m1, ta, ma406; NOVLDEP-NEXT: vmv.v.i v10, 0407; NOVLDEP-NEXT: vmv1r.v v0, v9408; NOVLDEP-NEXT: vmerge.vim v9, v10, 1, v0409; NOVLDEP-NEXT: vsetvli zero, a1, e8, m1, ta, ma410; NOVLDEP-NEXT: vslidedown.vi v9, v9, 5411; NOVLDEP-NEXT: addi a0, a0, -5412; NOVLDEP-NEXT: vslideup.vx v9, v8, a0413; NOVLDEP-NEXT: vmsne.vi v0, v9, 0414; NOVLDEP-NEXT: ret415;416; VLDEP-LABEL: test_vp_splice_v16i1:417; VLDEP: # %bb.0:418; VLDEP-NEXT: vsetvli zero, a1, e8, m1, ta, ma419; VLDEP-NEXT: vmv1r.v v9, v0420; VLDEP-NEXT: vmv1r.v v0, v8421; VLDEP-NEXT: vmv.v.i v8, 0422; VLDEP-NEXT: vmerge.vim v8, v8, 1, v0423; VLDEP-NEXT: vsetvli zero, a0, e8, m1, ta, ma424; VLDEP-NEXT: vmv.v.i v10, 0425; VLDEP-NEXT: vmv1r.v v0, v9426; VLDEP-NEXT: vmerge.vim v9, v10, 1, v0427; VLDEP-NEXT: addi a0, a0, -5428; VLDEP-NEXT: vsetvli zero, a0, e8, m1, ta, ma429; VLDEP-NEXT: vslidedown.vi v9, v9, 5430; VLDEP-NEXT: vsetvli zero, a1, e8, m1, ta, ma431; VLDEP-NEXT: vslideup.vx v9, v8, a0432; VLDEP-NEXT: vmsne.vi v0, v9, 0433; VLDEP-NEXT: ret434 435 %v = call <16 x i1> @llvm.experimental.vp.splice.v16i1(<16 x i1> %va, <16 x i1> %vb, i32 5, <16 x i1> splat (i1 1), i32 %evla, i32 %evlb)436 ret <16 x i1> %v437}438 439define <16 x i1> @test_vp_splice_v16i1_negative_offset(<16 x i1> %va, <16 x i1> %vb, i32 zeroext %evla, i32 zeroext %evlb) {440; NOVLDEP-LABEL: test_vp_splice_v16i1_negative_offset:441; NOVLDEP: # %bb.0:442; NOVLDEP-NEXT: vsetvli zero, a1, e8, m1, ta, ma443; NOVLDEP-NEXT: vmv1r.v v9, v0444; NOVLDEP-NEXT: vmv1r.v v0, v8445; NOVLDEP-NEXT: vmv.v.i v8, 0446; NOVLDEP-NEXT: vmerge.vim v8, v8, 1, v0447; NOVLDEP-NEXT: vsetvli zero, a0, e8, m1, ta, ma448; NOVLDEP-NEXT: vmv.v.i v10, 0449; NOVLDEP-NEXT: vmv1r.v v0, v9450; NOVLDEP-NEXT: vmerge.vim v9, v10, 1, v0451; NOVLDEP-NEXT: addi a0, a0, -5452; NOVLDEP-NEXT: vsetvli zero, a1, e8, m1, ta, ma453; NOVLDEP-NEXT: vslidedown.vx v9, v9, a0454; NOVLDEP-NEXT: vslideup.vi v9, v8, 5455; NOVLDEP-NEXT: vmsne.vi v0, v9, 0456; NOVLDEP-NEXT: ret457;458; VLDEP-LABEL: test_vp_splice_v16i1_negative_offset:459; VLDEP: # %bb.0:460; VLDEP-NEXT: vsetvli zero, a1, e8, m1, ta, ma461; VLDEP-NEXT: vmv1r.v v9, v0462; VLDEP-NEXT: vmv1r.v v0, v8463; VLDEP-NEXT: vmv.v.i v8, 0464; VLDEP-NEXT: vmerge.vim v8, v8, 1, v0465; VLDEP-NEXT: vsetvli zero, a0, e8, m1, ta, ma466; VLDEP-NEXT: vmv.v.i v10, 0467; VLDEP-NEXT: vmv1r.v v0, v9468; VLDEP-NEXT: vmerge.vim v9, v10, 1, v0469; VLDEP-NEXT: addi a0, a0, -5470; VLDEP-NEXT: vsetivli zero, 5, e8, m1, ta, ma471; VLDEP-NEXT: vslidedown.vx v9, v9, a0472; VLDEP-NEXT: vsetvli zero, a1, e8, m1, ta, ma473; VLDEP-NEXT: vslideup.vi v9, v8, 5474; VLDEP-NEXT: vmsne.vi v0, v9, 0475; VLDEP-NEXT: ret476 477 %v = call <16 x i1> @llvm.experimental.vp.splice.v16i1(<16 x i1> %va, <16 x i1> %vb, i32 -5, <16 x i1> splat (i1 1), i32 %evla, i32 %evlb)478 ret <16 x i1> %v479}480 481define <16 x i1> @test_vp_splice_v16i1_masked(<16 x i1> %va, <16 x i1> %vb, <16 x i1> %mask, i32 zeroext %evla, i32 zeroext %evlb) {482; NOVLDEP-LABEL: test_vp_splice_v16i1_masked:483; NOVLDEP: # %bb.0:484; NOVLDEP-NEXT: vsetvli zero, a1, e8, m1, ta, ma485; NOVLDEP-NEXT: vmv1r.v v10, v0486; NOVLDEP-NEXT: vmv1r.v v0, v8487; NOVLDEP-NEXT: vmv.v.i v8, 0488; NOVLDEP-NEXT: vmerge.vim v8, v8, 1, v0489; NOVLDEP-NEXT: vsetvli zero, a0, e8, m1, ta, ma490; NOVLDEP-NEXT: vmv.v.i v11, 0491; NOVLDEP-NEXT: vmv1r.v v0, v10492; NOVLDEP-NEXT: vmerge.vim v10, v11, 1, v0493; NOVLDEP-NEXT: addi a0, a0, -5494; NOVLDEP-NEXT: vmv1r.v v0, v9495; NOVLDEP-NEXT: vsetvli zero, a1, e8, m1, ta, ma496; NOVLDEP-NEXT: vslidedown.vi v10, v10, 5, v0.t497; NOVLDEP-NEXT: vsetvli zero, zero, e8, m1, ta, mu498; NOVLDEP-NEXT: vslideup.vx v10, v8, a0, v0.t499; NOVLDEP-NEXT: vsetvli zero, zero, e8, m1, ta, ma500; NOVLDEP-NEXT: vmsne.vi v0, v10, 0, v0.t501; NOVLDEP-NEXT: ret502;503; VLDEP-LABEL: test_vp_splice_v16i1_masked:504; VLDEP: # %bb.0:505; VLDEP-NEXT: vsetvli zero, a1, e8, m1, ta, ma506; VLDEP-NEXT: vmv1r.v v10, v0507; VLDEP-NEXT: vmv1r.v v0, v8508; VLDEP-NEXT: vmv.v.i v8, 0509; VLDEP-NEXT: vmerge.vim v8, v8, 1, v0510; VLDEP-NEXT: vsetvli zero, a0, e8, m1, ta, ma511; VLDEP-NEXT: vmv.v.i v11, 0512; VLDEP-NEXT: vmv1r.v v0, v10513; VLDEP-NEXT: vmerge.vim v10, v11, 1, v0514; VLDEP-NEXT: addi a0, a0, -5515; VLDEP-NEXT: vmv1r.v v0, v9516; VLDEP-NEXT: vsetvli zero, a0, e8, m1, ta, ma517; VLDEP-NEXT: vslidedown.vi v10, v10, 5, v0.t518; VLDEP-NEXT: vsetvli zero, a1, e8, m1, ta, mu519; VLDEP-NEXT: vslideup.vx v10, v8, a0, v0.t520; VLDEP-NEXT: vsetvli zero, zero, e8, m1, ta, ma521; VLDEP-NEXT: vmsne.vi v0, v10, 0, v0.t522; VLDEP-NEXT: ret523 %v = call <16 x i1> @llvm.experimental.vp.splice.v16i1(<16 x i1> %va, <16 x i1> %vb, i32 5, <16 x i1> %mask, i32 %evla, i32 %evlb)524 ret <16 x i1> %v525}526