1666 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=riscv32 -mattr=+d,+zfh,+zvfh,+v,+m -target-abi=ilp32d \3; RUN: -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,RV32,RV32ZVFH4; RUN: llc -mtriple=riscv64 -mattr=+d,+zfh,+zvfh,+v,+m -target-abi=lp64d \5; RUN: -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,RV64,RV64ZVFH6; RUN: llc -mtriple=riscv32 -mattr=+d,+zfh,+zvfhmin,+v,+m -target-abi=ilp32d \7; RUN: -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,RV32,RV32ZVFHMIN8; RUN: llc -mtriple=riscv64 -mattr=+d,+zfh,+zvfhmin,+v,+m -target-abi=lp64d \9; RUN: -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,RV64,RV64ZVFHMIN10 11define <vscale x 1 x i1> @vpmerge_nxv1i1(<vscale x 1 x i1> %va, <vscale x 1 x i1> %vb, <vscale x 1 x i1> %m, i32 zeroext %evl) {12; RV32-LABEL: vpmerge_nxv1i1:13; RV32: # %bb.0:14; RV32-NEXT: vsetvli a1, zero, e32, mf2, ta, ma15; RV32-NEXT: vid.v v1016; RV32-NEXT: vmsltu.vx v10, v10, a017; RV32-NEXT: vmand.mm v9, v9, v1018; RV32-NEXT: vmandn.mm v8, v8, v919; RV32-NEXT: vmand.mm v9, v0, v920; RV32-NEXT: vmor.mm v0, v9, v821; RV32-NEXT: ret22;23; RV64-LABEL: vpmerge_nxv1i1:24; RV64: # %bb.0:25; RV64-NEXT: vsetvli a1, zero, e64, m1, ta, ma26; RV64-NEXT: vid.v v1027; RV64-NEXT: vmsltu.vx v10, v10, a028; RV64-NEXT: vmand.mm v9, v9, v1029; RV64-NEXT: vmandn.mm v8, v8, v930; RV64-NEXT: vmand.mm v9, v0, v931; RV64-NEXT: vmor.mm v0, v9, v832; RV64-NEXT: ret33 %v = call <vscale x 1 x i1> @llvm.vp.merge.nxv1i1(<vscale x 1 x i1> %m, <vscale x 1 x i1> %va, <vscale x 1 x i1> %vb, i32 %evl)34 ret <vscale x 1 x i1> %v35}36 37define <vscale x 2 x i1> @vpmerge_nxv2i1(<vscale x 2 x i1> %va, <vscale x 2 x i1> %vb, <vscale x 2 x i1> %m, i32 zeroext %evl) {38; RV32-LABEL: vpmerge_nxv2i1:39; RV32: # %bb.0:40; RV32-NEXT: vsetvli a1, zero, e32, m1, ta, ma41; RV32-NEXT: vid.v v1042; RV32-NEXT: vmsltu.vx v10, v10, a043; RV32-NEXT: vmand.mm v9, v9, v1044; RV32-NEXT: vmandn.mm v8, v8, v945; RV32-NEXT: vmand.mm v9, v0, v946; RV32-NEXT: vmor.mm v0, v9, v847; RV32-NEXT: ret48;49; RV64-LABEL: vpmerge_nxv2i1:50; RV64: # %bb.0:51; RV64-NEXT: vsetvli a1, zero, e64, m2, ta, ma52; RV64-NEXT: vid.v v1053; RV64-NEXT: vmsltu.vx v12, v10, a054; RV64-NEXT: vmand.mm v9, v9, v1255; RV64-NEXT: vmandn.mm v8, v8, v956; RV64-NEXT: vmand.mm v9, v0, v957; RV64-NEXT: vmor.mm v0, v9, v858; RV64-NEXT: ret59 %v = call <vscale x 2 x i1> @llvm.vp.merge.nxv2i1(<vscale x 2 x i1> %m, <vscale x 2 x i1> %va, <vscale x 2 x i1> %vb, i32 %evl)60 ret <vscale x 2 x i1> %v61}62 63define <vscale x 4 x i1> @vpmerge_nxv4i1(<vscale x 4 x i1> %va, <vscale x 4 x i1> %vb, <vscale x 4 x i1> %m, i32 zeroext %evl) {64; RV32-LABEL: vpmerge_nxv4i1:65; RV32: # %bb.0:66; RV32-NEXT: vsetvli a1, zero, e32, m2, ta, ma67; RV32-NEXT: vid.v v1068; RV32-NEXT: vmsltu.vx v12, v10, a069; RV32-NEXT: vmand.mm v9, v9, v1270; RV32-NEXT: vmandn.mm v8, v8, v971; RV32-NEXT: vmand.mm v9, v0, v972; RV32-NEXT: vmor.mm v0, v9, v873; RV32-NEXT: ret74;75; RV64-LABEL: vpmerge_nxv4i1:76; RV64: # %bb.0:77; RV64-NEXT: vsetvli a1, zero, e64, m4, ta, ma78; RV64-NEXT: vid.v v1279; RV64-NEXT: vmsltu.vx v10, v12, a080; RV64-NEXT: vmand.mm v9, v9, v1081; RV64-NEXT: vmandn.mm v8, v8, v982; RV64-NEXT: vmand.mm v9, v0, v983; RV64-NEXT: vmor.mm v0, v9, v884; RV64-NEXT: ret85 %v = call <vscale x 4 x i1> @llvm.vp.merge.nxv4i1(<vscale x 4 x i1> %m, <vscale x 4 x i1> %va, <vscale x 4 x i1> %vb, i32 %evl)86 ret <vscale x 4 x i1> %v87}88 89define <vscale x 8 x i1> @vpmerge_nxv8i1(<vscale x 8 x i1> %va, <vscale x 8 x i1> %vb, <vscale x 8 x i1> %m, i32 zeroext %evl) {90; RV32-LABEL: vpmerge_nxv8i1:91; RV32: # %bb.0:92; RV32-NEXT: vsetvli a1, zero, e32, m4, ta, ma93; RV32-NEXT: vid.v v1294; RV32-NEXT: vmsltu.vx v10, v12, a095; RV32-NEXT: vmand.mm v9, v9, v1096; RV32-NEXT: vmandn.mm v8, v8, v997; RV32-NEXT: vmand.mm v9, v0, v998; RV32-NEXT: vmor.mm v0, v9, v899; RV32-NEXT: ret100;101; RV64-LABEL: vpmerge_nxv8i1:102; RV64: # %bb.0:103; RV64-NEXT: vsetvli a1, zero, e64, m8, ta, ma104; RV64-NEXT: vid.v v16105; RV64-NEXT: vmsltu.vx v10, v16, a0106; RV64-NEXT: vmand.mm v9, v9, v10107; RV64-NEXT: vmandn.mm v8, v8, v9108; RV64-NEXT: vmand.mm v9, v0, v9109; RV64-NEXT: vmor.mm v0, v9, v8110; RV64-NEXT: ret111 %v = call <vscale x 8 x i1> @llvm.vp.merge.nxv8i1(<vscale x 8 x i1> %m, <vscale x 8 x i1> %va, <vscale x 8 x i1> %vb, i32 %evl)112 ret <vscale x 8 x i1> %v113}114 115define <vscale x 16 x i1> @vpmerge_nxv16i1(<vscale x 16 x i1> %va, <vscale x 16 x i1> %vb, <vscale x 16 x i1> %m, i32 zeroext %evl) {116; RV32-LABEL: vpmerge_nxv16i1:117; RV32: # %bb.0:118; RV32-NEXT: vsetvli a1, zero, e32, m8, ta, ma119; RV32-NEXT: vid.v v16120; RV32-NEXT: vmsltu.vx v10, v16, a0121; RV32-NEXT: vmand.mm v9, v9, v10122; RV32-NEXT: vmandn.mm v8, v8, v9123; RV32-NEXT: vmand.mm v9, v0, v9124; RV32-NEXT: vmor.mm v0, v9, v8125; RV32-NEXT: ret126;127; RV64-LABEL: vpmerge_nxv16i1:128; RV64: # %bb.0:129; RV64-NEXT: vsetvli a1, zero, e8, m2, ta, ma130; RV64-NEXT: vmv.v.i v10, 0131; RV64-NEXT: vsetvli zero, a0, e8, m2, ta, ma132; RV64-NEXT: vmerge.vim v12, v10, 1, v0133; RV64-NEXT: vmv1r.v v0, v8134; RV64-NEXT: vsetvli a1, zero, e8, m2, ta, ma135; RV64-NEXT: vmerge.vim v10, v10, 1, v0136; RV64-NEXT: vmv1r.v v0, v9137; RV64-NEXT: vsetvli zero, a0, e8, m2, tu, ma138; RV64-NEXT: vmerge.vvm v10, v10, v12, v0139; RV64-NEXT: vsetvli a0, zero, e8, m2, ta, ma140; RV64-NEXT: vmsne.vi v0, v10, 0141; RV64-NEXT: ret142 %v = call <vscale x 16 x i1> @llvm.vp.merge.nxv16i1(<vscale x 16 x i1> %m, <vscale x 16 x i1> %va, <vscale x 16 x i1> %vb, i32 %evl)143 ret <vscale x 16 x i1> %v144}145 146define <vscale x 32 x i1> @vpmerge_nxv32i1(<vscale x 32 x i1> %va, <vscale x 32 x i1> %vb, <vscale x 32 x i1> %m, i32 zeroext %evl) {147; CHECK-LABEL: vpmerge_nxv32i1:148; CHECK: # %bb.0:149; CHECK-NEXT: vsetvli a1, zero, e8, m4, ta, ma150; CHECK-NEXT: vmv.v.i v12, 0151; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, ma152; CHECK-NEXT: vmerge.vim v16, v12, 1, v0153; CHECK-NEXT: vmv1r.v v0, v8154; CHECK-NEXT: vsetvli a1, zero, e8, m4, ta, ma155; CHECK-NEXT: vmerge.vim v12, v12, 1, v0156; CHECK-NEXT: vmv1r.v v0, v9157; CHECK-NEXT: vsetvli zero, a0, e8, m4, tu, ma158; CHECK-NEXT: vmerge.vvm v12, v12, v16, v0159; CHECK-NEXT: vsetvli a0, zero, e8, m4, ta, ma160; CHECK-NEXT: vmsne.vi v0, v12, 0161; CHECK-NEXT: ret162 %v = call <vscale x 32 x i1> @llvm.vp.merge.nxv32i1(<vscale x 32 x i1> %m, <vscale x 32 x i1> %va, <vscale x 32 x i1> %vb, i32 %evl)163 ret <vscale x 32 x i1> %v164}165 166define <vscale x 64 x i1> @vpmerge_nxv64i1(<vscale x 64 x i1> %va, <vscale x 64 x i1> %vb, <vscale x 64 x i1> %m, i32 zeroext %evl) {167; CHECK-LABEL: vpmerge_nxv64i1:168; CHECK: # %bb.0:169; CHECK-NEXT: vsetvli a1, zero, e8, m8, ta, ma170; CHECK-NEXT: vmv.v.i v16, 0171; CHECK-NEXT: vsetvli zero, a0, e8, m8, ta, ma172; CHECK-NEXT: vmerge.vim v24, v16, 1, v0173; CHECK-NEXT: vmv1r.v v0, v8174; CHECK-NEXT: vsetvli a1, zero, e8, m8, ta, ma175; CHECK-NEXT: vmerge.vim v16, v16, 1, v0176; CHECK-NEXT: vmv1r.v v0, v9177; CHECK-NEXT: vsetvli zero, a0, e8, m8, tu, ma178; CHECK-NEXT: vmerge.vvm v16, v16, v24, v0179; CHECK-NEXT: vsetvli a0, zero, e8, m8, ta, ma180; CHECK-NEXT: vmsne.vi v0, v16, 0181; CHECK-NEXT: ret182 %v = call <vscale x 64 x i1> @llvm.vp.merge.nxv64i1(<vscale x 64 x i1> %m, <vscale x 64 x i1> %va, <vscale x 64 x i1> %vb, i32 %evl)183 ret <vscale x 64 x i1> %v184}185 186define <vscale x 128 x i1> @vpmerge_nxv128i1(<vscale x 128 x i1> %va, <vscale x 128 x i1> %vb, <vscale x 128 x i1> %m, i32 zeroext %evl) {187; CHECK-LABEL: vpmerge_nxv128i1:188; CHECK: # %bb.0:189; CHECK-NEXT: vsetivli zero, 1, e8, m1, ta, ma190; CHECK-NEXT: vmv1r.v v7, v12191; CHECK-NEXT: vmv1r.v v4, v11192; CHECK-NEXT: vmv1r.v v6, v10193; CHECK-NEXT: vmv1r.v v5, v8194; CHECK-NEXT: csrr a2, vlenb195; CHECK-NEXT: slli a2, a2, 3196; CHECK-NEXT: mv a1, a0197; CHECK-NEXT: bltu a0, a2, .LBB7_2198; CHECK-NEXT: # %bb.1:199; CHECK-NEXT: mv a1, a2200; CHECK-NEXT: .LBB7_2:201; CHECK-NEXT: vsetvli a3, zero, e8, m8, ta, ma202; CHECK-NEXT: vmv.v.i v16, 0203; CHECK-NEXT: sub a2, a0, a2204; CHECK-NEXT: vsetvli zero, a1, e8, m8, ta, ma205; CHECK-NEXT: vmerge.vim v24, v16, 1, v0206; CHECK-NEXT: vmv1r.v v0, v9207; CHECK-NEXT: vsetvli a3, zero, e8, m8, ta, ma208; CHECK-NEXT: vmerge.vim v8, v16, 1, v0209; CHECK-NEXT: sltu a0, a0, a2210; CHECK-NEXT: vmv1r.v v0, v4211; CHECK-NEXT: vsetvli zero, a1, e8, m8, tu, ma212; CHECK-NEXT: vmerge.vvm v8, v8, v24, v0213; CHECK-NEXT: addi a0, a0, -1214; CHECK-NEXT: vsetvli a1, zero, e8, m8, ta, ma215; CHECK-NEXT: vmsne.vi v24, v8, 0216; CHECK-NEXT: and a0, a0, a2217; CHECK-NEXT: vmv1r.v v0, v5218; CHECK-NEXT: vsetvli zero, a0, e8, m8, ta, ma219; CHECK-NEXT: vmerge.vim v8, v16, 1, v0220; CHECK-NEXT: vmv1r.v v0, v6221; CHECK-NEXT: vsetvli a1, zero, e8, m8, ta, ma222; CHECK-NEXT: vmerge.vim v16, v16, 1, v0223; CHECK-NEXT: vmv1r.v v0, v7224; CHECK-NEXT: vsetvli zero, a0, e8, m8, tu, ma225; CHECK-NEXT: vmerge.vvm v16, v16, v8, v0226; CHECK-NEXT: vsetvli a0, zero, e8, m8, ta, ma227; CHECK-NEXT: vmsne.vi v8, v16, 0228; CHECK-NEXT: vmv1r.v v0, v24229; CHECK-NEXT: ret230 %v = call <vscale x 128 x i1> @llvm.vp.merge.nxv128i1(<vscale x 128 x i1> %m, <vscale x 128 x i1> %va, <vscale x 128 x i1> %vb, i32 %evl)231 ret <vscale x 128 x i1> %v232}233 234define <vscale x 1 x i8> @vpmerge_vv_nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> %vb, <vscale x 1 x i1> %m, i32 zeroext %evl) {235; CHECK-LABEL: vpmerge_vv_nxv1i8:236; CHECK: # %bb.0:237; CHECK-NEXT: vsetvli zero, a0, e8, mf8, tu, ma238; CHECK-NEXT: vmerge.vvm v9, v9, v8, v0239; CHECK-NEXT: vmv1r.v v8, v9240; CHECK-NEXT: ret241 %v = call <vscale x 1 x i8> @llvm.vp.merge.nxv1i8(<vscale x 1 x i1> %m, <vscale x 1 x i8> %va, <vscale x 1 x i8> %vb, i32 %evl)242 ret <vscale x 1 x i8> %v243}244 245define <vscale x 1 x i8> @vpmerge_vx_nxv1i8(i8 %a, <vscale x 1 x i8> %vb, <vscale x 1 x i1> %m, i32 zeroext %evl) {246; CHECK-LABEL: vpmerge_vx_nxv1i8:247; CHECK: # %bb.0:248; CHECK-NEXT: vsetvli zero, a1, e8, mf8, tu, ma249; CHECK-NEXT: vmerge.vxm v8, v8, a0, v0250; CHECK-NEXT: ret251 %elt.head = insertelement <vscale x 1 x i8> poison, i8 %a, i32 0252 %va = shufflevector <vscale x 1 x i8> %elt.head, <vscale x 1 x i8> poison, <vscale x 1 x i32> zeroinitializer253 %v = call <vscale x 1 x i8> @llvm.vp.merge.nxv1i8(<vscale x 1 x i1> %m, <vscale x 1 x i8> %va, <vscale x 1 x i8> %vb, i32 %evl)254 ret <vscale x 1 x i8> %v255}256 257define <vscale x 1 x i8> @vpmerge_vi_nxv1i8(<vscale x 1 x i8> %vb, <vscale x 1 x i1> %m, i32 zeroext %evl) {258; CHECK-LABEL: vpmerge_vi_nxv1i8:259; CHECK: # %bb.0:260; CHECK-NEXT: vsetvli zero, a0, e8, mf8, tu, ma261; CHECK-NEXT: vmerge.vim v8, v8, 2, v0262; CHECK-NEXT: ret263 %v = call <vscale x 1 x i8> @llvm.vp.merge.nxv1i8(<vscale x 1 x i1> %m, <vscale x 1 x i8> splat (i8 2), <vscale x 1 x i8> %vb, i32 %evl)264 ret <vscale x 1 x i8> %v265}266 267define <vscale x 2 x i8> @vpmerge_vv_nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> %vb, <vscale x 2 x i1> %m, i32 zeroext %evl) {268; CHECK-LABEL: vpmerge_vv_nxv2i8:269; CHECK: # %bb.0:270; CHECK-NEXT: vsetvli zero, a0, e8, mf4, tu, ma271; CHECK-NEXT: vmerge.vvm v9, v9, v8, v0272; CHECK-NEXT: vmv1r.v v8, v9273; CHECK-NEXT: ret274 %v = call <vscale x 2 x i8> @llvm.vp.merge.nxv2i8(<vscale x 2 x i1> %m, <vscale x 2 x i8> %va, <vscale x 2 x i8> %vb, i32 %evl)275 ret <vscale x 2 x i8> %v276}277 278define <vscale x 2 x i8> @vpmerge_vx_nxv2i8(i8 %a, <vscale x 2 x i8> %vb, <vscale x 2 x i1> %m, i32 zeroext %evl) {279; CHECK-LABEL: vpmerge_vx_nxv2i8:280; CHECK: # %bb.0:281; CHECK-NEXT: vsetvli zero, a1, e8, mf4, tu, ma282; CHECK-NEXT: vmerge.vxm v8, v8, a0, v0283; CHECK-NEXT: ret284 %elt.head = insertelement <vscale x 2 x i8> poison, i8 %a, i32 0285 %va = shufflevector <vscale x 2 x i8> %elt.head, <vscale x 2 x i8> poison, <vscale x 2 x i32> zeroinitializer286 %v = call <vscale x 2 x i8> @llvm.vp.merge.nxv2i8(<vscale x 2 x i1> %m, <vscale x 2 x i8> %va, <vscale x 2 x i8> %vb, i32 %evl)287 ret <vscale x 2 x i8> %v288}289 290define <vscale x 2 x i8> @vpmerge_vi_nxv2i8(<vscale x 2 x i8> %vb, <vscale x 2 x i1> %m, i32 zeroext %evl) {291; CHECK-LABEL: vpmerge_vi_nxv2i8:292; CHECK: # %bb.0:293; CHECK-NEXT: vsetvli zero, a0, e8, mf4, tu, ma294; CHECK-NEXT: vmerge.vim v8, v8, 2, v0295; CHECK-NEXT: ret296 %v = call <vscale x 2 x i8> @llvm.vp.merge.nxv2i8(<vscale x 2 x i1> %m, <vscale x 2 x i8> splat (i8 2), <vscale x 2 x i8> %vb, i32 %evl)297 ret <vscale x 2 x i8> %v298}299 300define <vscale x 3 x i8> @vpmerge_vv_nxv3i8(<vscale x 3 x i8> %va, <vscale x 3 x i8> %vb, <vscale x 3 x i1> %m, i32 zeroext %evl) {301; CHECK-LABEL: vpmerge_vv_nxv3i8:302; CHECK: # %bb.0:303; CHECK-NEXT: vsetvli zero, a0, e8, mf2, tu, ma304; CHECK-NEXT: vmerge.vvm v9, v9, v8, v0305; CHECK-NEXT: vmv1r.v v8, v9306; CHECK-NEXT: ret307 %v = call <vscale x 3 x i8> @llvm.vp.merge.nxv3i8(<vscale x 3 x i1> %m, <vscale x 3 x i8> %va, <vscale x 3 x i8> %vb, i32 %evl)308 ret <vscale x 3 x i8> %v309}310 311define <vscale x 3 x i8> @vpmerge_vx_nxv3i8(i8 %a, <vscale x 3 x i8> %vb, <vscale x 3 x i1> %m, i32 zeroext %evl) {312; CHECK-LABEL: vpmerge_vx_nxv3i8:313; CHECK: # %bb.0:314; CHECK-NEXT: vsetvli zero, a1, e8, mf2, tu, ma315; CHECK-NEXT: vmerge.vxm v8, v8, a0, v0316; CHECK-NEXT: ret317 %elt.head = insertelement <vscale x 3 x i8> poison, i8 %a, i32 0318 %va = shufflevector <vscale x 3 x i8> %elt.head, <vscale x 3 x i8> poison, <vscale x 3 x i32> zeroinitializer319 %v = call <vscale x 3 x i8> @llvm.vp.merge.nxv3i8(<vscale x 3 x i1> %m, <vscale x 3 x i8> %va, <vscale x 3 x i8> %vb, i32 %evl)320 ret <vscale x 3 x i8> %v321}322 323define <vscale x 3 x i8> @vpmerge_vi_nxv3i8(<vscale x 3 x i8> %vb, <vscale x 3 x i1> %m, i32 zeroext %evl) {324; CHECK-LABEL: vpmerge_vi_nxv3i8:325; CHECK: # %bb.0:326; CHECK-NEXT: vsetvli zero, a0, e8, mf2, tu, ma327; CHECK-NEXT: vmerge.vim v8, v8, 2, v0328; CHECK-NEXT: ret329 %v = call <vscale x 3 x i8> @llvm.vp.merge.nxv3i8(<vscale x 3 x i1> %m, <vscale x 3 x i8> splat (i8 2), <vscale x 3 x i8> %vb, i32 %evl)330 ret <vscale x 3 x i8> %v331}332 333define <vscale x 4 x i8> @vpmerge_vv_nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> %vb, <vscale x 4 x i1> %m, i32 zeroext %evl) {334; CHECK-LABEL: vpmerge_vv_nxv4i8:335; CHECK: # %bb.0:336; CHECK-NEXT: vsetvli zero, a0, e8, mf2, tu, ma337; CHECK-NEXT: vmerge.vvm v9, v9, v8, v0338; CHECK-NEXT: vmv1r.v v8, v9339; CHECK-NEXT: ret340 %v = call <vscale x 4 x i8> @llvm.vp.merge.nxv4i8(<vscale x 4 x i1> %m, <vscale x 4 x i8> %va, <vscale x 4 x i8> %vb, i32 %evl)341 ret <vscale x 4 x i8> %v342}343 344define <vscale x 4 x i8> @vpmerge_vx_nxv4i8(i8 %a, <vscale x 4 x i8> %vb, <vscale x 4 x i1> %m, i32 zeroext %evl) {345; CHECK-LABEL: vpmerge_vx_nxv4i8:346; CHECK: # %bb.0:347; CHECK-NEXT: vsetvli zero, a1, e8, mf2, tu, ma348; CHECK-NEXT: vmerge.vxm v8, v8, a0, v0349; CHECK-NEXT: ret350 %elt.head = insertelement <vscale x 4 x i8> poison, i8 %a, i32 0351 %va = shufflevector <vscale x 4 x i8> %elt.head, <vscale x 4 x i8> poison, <vscale x 4 x i32> zeroinitializer352 %v = call <vscale x 4 x i8> @llvm.vp.merge.nxv4i8(<vscale x 4 x i1> %m, <vscale x 4 x i8> %va, <vscale x 4 x i8> %vb, i32 %evl)353 ret <vscale x 4 x i8> %v354}355 356define <vscale x 4 x i8> @vpmerge_vi_nxv4i8(<vscale x 4 x i8> %vb, <vscale x 4 x i1> %m, i32 zeroext %evl) {357; CHECK-LABEL: vpmerge_vi_nxv4i8:358; CHECK: # %bb.0:359; CHECK-NEXT: vsetvli zero, a0, e8, mf2, tu, ma360; CHECK-NEXT: vmerge.vim v8, v8, 2, v0361; CHECK-NEXT: ret362 %v = call <vscale x 4 x i8> @llvm.vp.merge.nxv4i8(<vscale x 4 x i1> %m, <vscale x 4 x i8> splat (i8 2), <vscale x 4 x i8> %vb, i32 %evl)363 ret <vscale x 4 x i8> %v364}365 366define <vscale x 8 x i7> @vpmerge_vv_nxv8i7(<vscale x 8 x i7> %va, <vscale x 8 x i7> %vb, <vscale x 8 x i1> %m, i32 zeroext %evl) {367; CHECK-LABEL: vpmerge_vv_nxv8i7:368; CHECK: # %bb.0:369; CHECK-NEXT: vsetvli zero, a0, e8, m1, tu, ma370; CHECK-NEXT: vmerge.vvm v9, v9, v8, v0371; CHECK-NEXT: vmv1r.v v8, v9372; CHECK-NEXT: ret373 %v = call <vscale x 8 x i7> @llvm.vp.merge.nxv8i7(<vscale x 8 x i1> %m, <vscale x 8 x i7> %va, <vscale x 8 x i7> %vb, i32 %evl)374 ret <vscale x 8 x i7> %v375}376 377define <vscale x 8 x i7> @vpmerge_vx_nxv8i7(i7 %a, <vscale x 8 x i7> %vb, <vscale x 8 x i1> %m, i32 zeroext %evl) {378; CHECK-LABEL: vpmerge_vx_nxv8i7:379; CHECK: # %bb.0:380; CHECK-NEXT: vsetvli zero, a1, e8, m1, tu, ma381; CHECK-NEXT: vmerge.vxm v8, v8, a0, v0382; CHECK-NEXT: ret383 %elt.head = insertelement <vscale x 8 x i7> poison, i7 %a, i32 0384 %va = shufflevector <vscale x 8 x i7> %elt.head, <vscale x 8 x i7> poison, <vscale x 8 x i32> zeroinitializer385 %v = call <vscale x 8 x i7> @llvm.vp.merge.nxv8i7(<vscale x 8 x i1> %m, <vscale x 8 x i7> %va, <vscale x 8 x i7> %vb, i32 %evl)386 ret <vscale x 8 x i7> %v387}388 389define <vscale x 8 x i7> @vpmerge_vi_nxv8i7(<vscale x 8 x i7> %vb, <vscale x 8 x i1> %m, i32 zeroext %evl) {390; CHECK-LABEL: vpmerge_vi_nxv8i7:391; CHECK: # %bb.0:392; CHECK-NEXT: vsetvli zero, a0, e8, m1, tu, ma393; CHECK-NEXT: vmerge.vim v8, v8, 2, v0394; CHECK-NEXT: ret395 %v = call <vscale x 8 x i7> @llvm.vp.merge.nxv8i7(<vscale x 8 x i1> %m, <vscale x 8 x i7> splat (i7 2), <vscale x 8 x i7> %vb, i32 %evl)396 ret <vscale x 8 x i7> %v397}398 399define <vscale x 8 x i8> @vpmerge_vv_nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %vb, <vscale x 8 x i1> %m, i32 zeroext %evl) {400; CHECK-LABEL: vpmerge_vv_nxv8i8:401; CHECK: # %bb.0:402; CHECK-NEXT: vsetvli zero, a0, e8, m1, tu, ma403; CHECK-NEXT: vmerge.vvm v9, v9, v8, v0404; CHECK-NEXT: vmv1r.v v8, v9405; CHECK-NEXT: ret406 %v = call <vscale x 8 x i8> @llvm.vp.merge.nxv8i8(<vscale x 8 x i1> %m, <vscale x 8 x i8> %va, <vscale x 8 x i8> %vb, i32 %evl)407 ret <vscale x 8 x i8> %v408}409 410define <vscale x 8 x i8> @vpmerge_vx_nxv8i8(i8 %a, <vscale x 8 x i8> %vb, <vscale x 8 x i1> %m, i32 zeroext %evl) {411; CHECK-LABEL: vpmerge_vx_nxv8i8:412; CHECK: # %bb.0:413; CHECK-NEXT: vsetvli zero, a1, e8, m1, tu, ma414; CHECK-NEXT: vmerge.vxm v8, v8, a0, v0415; CHECK-NEXT: ret416 %elt.head = insertelement <vscale x 8 x i8> poison, i8 %a, i32 0417 %va = shufflevector <vscale x 8 x i8> %elt.head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer418 %v = call <vscale x 8 x i8> @llvm.vp.merge.nxv8i8(<vscale x 8 x i1> %m, <vscale x 8 x i8> %va, <vscale x 8 x i8> %vb, i32 %evl)419 ret <vscale x 8 x i8> %v420}421 422define <vscale x 8 x i8> @vpmerge_vi_nxv8i8(<vscale x 8 x i8> %vb, <vscale x 8 x i1> %m, i32 zeroext %evl) {423; CHECK-LABEL: vpmerge_vi_nxv8i8:424; CHECK: # %bb.0:425; CHECK-NEXT: vsetvli zero, a0, e8, m1, tu, ma426; CHECK-NEXT: vmerge.vim v8, v8, 2, v0427; CHECK-NEXT: ret428 %v = call <vscale x 8 x i8> @llvm.vp.merge.nxv8i8(<vscale x 8 x i1> %m, <vscale x 8 x i8> splat (i8 2), <vscale x 8 x i8> %vb, i32 %evl)429 ret <vscale x 8 x i8> %v430}431 432define <vscale x 16 x i8> @vpmerge_vv_nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> %vb, <vscale x 16 x i1> %m, i32 zeroext %evl) {433; CHECK-LABEL: vpmerge_vv_nxv16i8:434; CHECK: # %bb.0:435; CHECK-NEXT: vsetvli zero, a0, e8, m2, tu, ma436; CHECK-NEXT: vmerge.vvm v10, v10, v8, v0437; CHECK-NEXT: vmv2r.v v8, v10438; CHECK-NEXT: ret439 %v = call <vscale x 16 x i8> @llvm.vp.merge.nxv16i8(<vscale x 16 x i1> %m, <vscale x 16 x i8> %va, <vscale x 16 x i8> %vb, i32 %evl)440 ret <vscale x 16 x i8> %v441}442 443define <vscale x 16 x i8> @vpmerge_vx_nxv16i8(i8 %a, <vscale x 16 x i8> %vb, <vscale x 16 x i1> %m, i32 zeroext %evl) {444; CHECK-LABEL: vpmerge_vx_nxv16i8:445; CHECK: # %bb.0:446; CHECK-NEXT: vsetvli zero, a1, e8, m2, tu, ma447; CHECK-NEXT: vmerge.vxm v8, v8, a0, v0448; CHECK-NEXT: ret449 %elt.head = insertelement <vscale x 16 x i8> poison, i8 %a, i32 0450 %va = shufflevector <vscale x 16 x i8> %elt.head, <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer451 %v = call <vscale x 16 x i8> @llvm.vp.merge.nxv16i8(<vscale x 16 x i1> %m, <vscale x 16 x i8> %va, <vscale x 16 x i8> %vb, i32 %evl)452 ret <vscale x 16 x i8> %v453}454 455define <vscale x 16 x i8> @vpmerge_vi_nxv16i8(<vscale x 16 x i8> %vb, <vscale x 16 x i1> %m, i32 zeroext %evl) {456; CHECK-LABEL: vpmerge_vi_nxv16i8:457; CHECK: # %bb.0:458; CHECK-NEXT: vsetvli zero, a0, e8, m2, tu, ma459; CHECK-NEXT: vmerge.vim v8, v8, 2, v0460; CHECK-NEXT: ret461 %v = call <vscale x 16 x i8> @llvm.vp.merge.nxv16i8(<vscale x 16 x i1> %m, <vscale x 16 x i8> splat (i8 2), <vscale x 16 x i8> %vb, i32 %evl)462 ret <vscale x 16 x i8> %v463}464 465define <vscale x 32 x i8> @vpmerge_vv_nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> %vb, <vscale x 32 x i1> %m, i32 zeroext %evl) {466; CHECK-LABEL: vpmerge_vv_nxv32i8:467; CHECK: # %bb.0:468; CHECK-NEXT: vsetvli zero, a0, e8, m4, tu, ma469; CHECK-NEXT: vmerge.vvm v12, v12, v8, v0470; CHECK-NEXT: vmv4r.v v8, v12471; CHECK-NEXT: ret472 %v = call <vscale x 32 x i8> @llvm.vp.merge.nxv32i8(<vscale x 32 x i1> %m, <vscale x 32 x i8> %va, <vscale x 32 x i8> %vb, i32 %evl)473 ret <vscale x 32 x i8> %v474}475 476define <vscale x 32 x i8> @vpmerge_vx_nxv32i8(i8 %a, <vscale x 32 x i8> %vb, <vscale x 32 x i1> %m, i32 zeroext %evl) {477; CHECK-LABEL: vpmerge_vx_nxv32i8:478; CHECK: # %bb.0:479; CHECK-NEXT: vsetvli zero, a1, e8, m4, tu, ma480; CHECK-NEXT: vmerge.vxm v8, v8, a0, v0481; CHECK-NEXT: ret482 %elt.head = insertelement <vscale x 32 x i8> poison, i8 %a, i32 0483 %va = shufflevector <vscale x 32 x i8> %elt.head, <vscale x 32 x i8> poison, <vscale x 32 x i32> zeroinitializer484 %v = call <vscale x 32 x i8> @llvm.vp.merge.nxv32i8(<vscale x 32 x i1> %m, <vscale x 32 x i8> %va, <vscale x 32 x i8> %vb, i32 %evl)485 ret <vscale x 32 x i8> %v486}487 488define <vscale x 32 x i8> @vpmerge_vi_nxv32i8(<vscale x 32 x i8> %vb, <vscale x 32 x i1> %m, i32 zeroext %evl) {489; CHECK-LABEL: vpmerge_vi_nxv32i8:490; CHECK: # %bb.0:491; CHECK-NEXT: vsetvli zero, a0, e8, m4, tu, ma492; CHECK-NEXT: vmerge.vim v8, v8, 2, v0493; CHECK-NEXT: ret494 %v = call <vscale x 32 x i8> @llvm.vp.merge.nxv32i8(<vscale x 32 x i1> %m, <vscale x 32 x i8> splat (i8 2), <vscale x 32 x i8> %vb, i32 %evl)495 ret <vscale x 32 x i8> %v496}497 498define <vscale x 64 x i8> @vpmerge_vv_nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> %vb, <vscale x 64 x i1> %m, i32 zeroext %evl) {499; CHECK-LABEL: vpmerge_vv_nxv64i8:500; CHECK: # %bb.0:501; CHECK-NEXT: vsetvli zero, a0, e8, m8, tu, ma502; CHECK-NEXT: vmerge.vvm v16, v16, v8, v0503; CHECK-NEXT: vmv8r.v v8, v16504; CHECK-NEXT: ret505 %v = call <vscale x 64 x i8> @llvm.vp.merge.nxv64i8(<vscale x 64 x i1> %m, <vscale x 64 x i8> %va, <vscale x 64 x i8> %vb, i32 %evl)506 ret <vscale x 64 x i8> %v507}508 509define <vscale x 64 x i8> @vpmerge_vx_nxv64i8(i8 %a, <vscale x 64 x i8> %vb, <vscale x 64 x i1> %m, i32 zeroext %evl) {510; CHECK-LABEL: vpmerge_vx_nxv64i8:511; CHECK: # %bb.0:512; CHECK-NEXT: vsetvli zero, a1, e8, m8, tu, ma513; CHECK-NEXT: vmerge.vxm v8, v8, a0, v0514; CHECK-NEXT: ret515 %elt.head = insertelement <vscale x 64 x i8> poison, i8 %a, i32 0516 %va = shufflevector <vscale x 64 x i8> %elt.head, <vscale x 64 x i8> poison, <vscale x 64 x i32> zeroinitializer517 %v = call <vscale x 64 x i8> @llvm.vp.merge.nxv64i8(<vscale x 64 x i1> %m, <vscale x 64 x i8> %va, <vscale x 64 x i8> %vb, i32 %evl)518 ret <vscale x 64 x i8> %v519}520 521define <vscale x 64 x i8> @vpmerge_vi_nxv64i8(<vscale x 64 x i8> %vb, <vscale x 64 x i1> %m, i32 zeroext %evl) {522; CHECK-LABEL: vpmerge_vi_nxv64i8:523; CHECK: # %bb.0:524; CHECK-NEXT: vsetvli zero, a0, e8, m8, tu, ma525; CHECK-NEXT: vmerge.vim v8, v8, 2, v0526; CHECK-NEXT: ret527 %v = call <vscale x 64 x i8> @llvm.vp.merge.nxv64i8(<vscale x 64 x i1> %m, <vscale x 64 x i8> splat (i8 2), <vscale x 64 x i8> %vb, i32 %evl)528 ret <vscale x 64 x i8> %v529}530 531define <vscale x 128 x i8> @vpmerge_vv_nxv128i8(<vscale x 128 x i8> %va, <vscale x 128 x i8> %vb, <vscale x 128 x i1> %m, i32 zeroext %evl) {532; CHECK-LABEL: vpmerge_vv_nxv128i8:533; CHECK: # %bb.0:534; CHECK-NEXT: addi sp, sp, -16535; CHECK-NEXT: .cfi_def_cfa_offset 16536; CHECK-NEXT: csrr a1, vlenb537; CHECK-NEXT: slli a1, a1, 3538; CHECK-NEXT: sub sp, sp, a1539; CHECK-NEXT: .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x08, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 8 * vlenb540; CHECK-NEXT: vsetvli a1, zero, e8, m8, ta, ma541; CHECK-NEXT: vmv1r.v v7, v0542; CHECK-NEXT: addi a1, sp, 16543; CHECK-NEXT: vs8r.v v8, (a1) # vscale x 64-byte Folded Spill544; CHECK-NEXT: csrr a1, vlenb545; CHECK-NEXT: vlm.v v0, (a2)546; CHECK-NEXT: slli a1, a1, 3547; CHECK-NEXT: add a2, a0, a1548; CHECK-NEXT: sub a4, a3, a1549; CHECK-NEXT: vl8r.v v24, (a2)550; CHECK-NEXT: sltu a2, a3, a4551; CHECK-NEXT: vl8r.v v8, (a0)552; CHECK-NEXT: addi a2, a2, -1553; CHECK-NEXT: and a2, a2, a4554; CHECK-NEXT: vsetvli zero, a2, e8, m8, tu, ma555; CHECK-NEXT: vmerge.vvm v24, v24, v16, v0556; CHECK-NEXT: bltu a3, a1, .LBB35_2557; CHECK-NEXT: # %bb.1:558; CHECK-NEXT: mv a3, a1559; CHECK-NEXT: .LBB35_2:560; CHECK-NEXT: vmv1r.v v0, v7561; CHECK-NEXT: addi a0, sp, 16562; CHECK-NEXT: vl8r.v v16, (a0) # vscale x 64-byte Folded Reload563; CHECK-NEXT: vsetvli zero, a3, e8, m8, tu, ma564; CHECK-NEXT: vmerge.vvm v8, v8, v16, v0565; CHECK-NEXT: vmv8r.v v16, v24566; CHECK-NEXT: csrr a0, vlenb567; CHECK-NEXT: slli a0, a0, 3568; CHECK-NEXT: add sp, sp, a0569; CHECK-NEXT: .cfi_def_cfa sp, 16570; CHECK-NEXT: addi sp, sp, 16571; CHECK-NEXT: .cfi_def_cfa_offset 0572; CHECK-NEXT: ret573 %v = call <vscale x 128 x i8> @llvm.vp.merge.nxv128i8(<vscale x 128 x i1> %m, <vscale x 128 x i8> %va, <vscale x 128 x i8> %vb, i32 %evl)574 ret <vscale x 128 x i8> %v575}576 577define <vscale x 128 x i8> @vpmerge_vx_nxv128i8(i8 %a, <vscale x 128 x i8> %vb, <vscale x 128 x i1> %m, i32 zeroext %evl) {578; CHECK-LABEL: vpmerge_vx_nxv128i8:579; CHECK: # %bb.0:580; CHECK-NEXT: vsetvli a3, zero, e8, m8, ta, ma581; CHECK-NEXT: vmv1r.v v24, v0582; CHECK-NEXT: vlm.v v0, (a1)583; CHECK-NEXT: csrr a1, vlenb584; CHECK-NEXT: slli a1, a1, 3585; CHECK-NEXT: sub a3, a2, a1586; CHECK-NEXT: sltu a4, a2, a3587; CHECK-NEXT: addi a4, a4, -1588; CHECK-NEXT: and a3, a4, a3589; CHECK-NEXT: vsetvli zero, a3, e8, m8, tu, ma590; CHECK-NEXT: vmerge.vxm v16, v16, a0, v0591; CHECK-NEXT: bltu a2, a1, .LBB36_2592; CHECK-NEXT: # %bb.1:593; CHECK-NEXT: mv a2, a1594; CHECK-NEXT: .LBB36_2:595; CHECK-NEXT: vmv1r.v v0, v24596; CHECK-NEXT: vsetvli zero, a2, e8, m8, tu, ma597; CHECK-NEXT: vmerge.vxm v8, v8, a0, v0598; CHECK-NEXT: ret599 %elt.head = insertelement <vscale x 128 x i8> poison, i8 %a, i32 0600 %va = shufflevector <vscale x 128 x i8> %elt.head, <vscale x 128 x i8> poison, <vscale x 128 x i32> zeroinitializer601 %v = call <vscale x 128 x i8> @llvm.vp.merge.nxv128i8(<vscale x 128 x i1> %m, <vscale x 128 x i8> %va, <vscale x 128 x i8> %vb, i32 %evl)602 ret <vscale x 128 x i8> %v603}604 605define <vscale x 128 x i8> @vpmerge_vi_nxv128i8(<vscale x 128 x i8> %vb, <vscale x 128 x i1> %m, i32 zeroext %evl) {606; CHECK-LABEL: vpmerge_vi_nxv128i8:607; CHECK: # %bb.0:608; CHECK-NEXT: vsetvli a2, zero, e8, m8, ta, ma609; CHECK-NEXT: vmv1r.v v24, v0610; CHECK-NEXT: vlm.v v0, (a0)611; CHECK-NEXT: csrr a0, vlenb612; CHECK-NEXT: slli a0, a0, 3613; CHECK-NEXT: sub a2, a1, a0614; CHECK-NEXT: sltu a3, a1, a2615; CHECK-NEXT: addi a3, a3, -1616; CHECK-NEXT: and a2, a3, a2617; CHECK-NEXT: vsetvli zero, a2, e8, m8, tu, ma618; CHECK-NEXT: vmerge.vim v16, v16, 2, v0619; CHECK-NEXT: bltu a1, a0, .LBB37_2620; CHECK-NEXT: # %bb.1:621; CHECK-NEXT: mv a1, a0622; CHECK-NEXT: .LBB37_2:623; CHECK-NEXT: vmv1r.v v0, v24624; CHECK-NEXT: vsetvli zero, a1, e8, m8, tu, ma625; CHECK-NEXT: vmerge.vim v8, v8, 2, v0626; CHECK-NEXT: ret627 %v = call <vscale x 128 x i8> @llvm.vp.merge.nxv128i8(<vscale x 128 x i1> %m, <vscale x 128 x i8> splat (i8 2), <vscale x 128 x i8> %vb, i32 %evl)628 ret <vscale x 128 x i8> %v629}630 631define <vscale x 1 x i16> @vpmerge_vv_nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> %vb, <vscale x 1 x i1> %m, i32 zeroext %evl) {632; CHECK-LABEL: vpmerge_vv_nxv1i16:633; CHECK: # %bb.0:634; CHECK-NEXT: vsetvli zero, a0, e16, mf4, tu, ma635; CHECK-NEXT: vmerge.vvm v9, v9, v8, v0636; CHECK-NEXT: vmv1r.v v8, v9637; CHECK-NEXT: ret638 %v = call <vscale x 1 x i16> @llvm.vp.merge.nxv1i16(<vscale x 1 x i1> %m, <vscale x 1 x i16> %va, <vscale x 1 x i16> %vb, i32 %evl)639 ret <vscale x 1 x i16> %v640}641 642define <vscale x 1 x i16> @vpmerge_vx_nxv1i16(i16 %a, <vscale x 1 x i16> %vb, <vscale x 1 x i1> %m, i32 zeroext %evl) {643; CHECK-LABEL: vpmerge_vx_nxv1i16:644; CHECK: # %bb.0:645; CHECK-NEXT: vsetvli zero, a1, e16, mf4, tu, ma646; CHECK-NEXT: vmerge.vxm v8, v8, a0, v0647; CHECK-NEXT: ret648 %elt.head = insertelement <vscale x 1 x i16> poison, i16 %a, i32 0649 %va = shufflevector <vscale x 1 x i16> %elt.head, <vscale x 1 x i16> poison, <vscale x 1 x i32> zeroinitializer650 %v = call <vscale x 1 x i16> @llvm.vp.merge.nxv1i16(<vscale x 1 x i1> %m, <vscale x 1 x i16> %va, <vscale x 1 x i16> %vb, i32 %evl)651 ret <vscale x 1 x i16> %v652}653 654define <vscale x 1 x i16> @vpmerge_vi_nxv1i16(<vscale x 1 x i16> %vb, <vscale x 1 x i1> %m, i32 zeroext %evl) {655; CHECK-LABEL: vpmerge_vi_nxv1i16:656; CHECK: # %bb.0:657; CHECK-NEXT: vsetvli zero, a0, e16, mf4, tu, ma658; CHECK-NEXT: vmerge.vim v8, v8, 2, v0659; CHECK-NEXT: ret660 %v = call <vscale x 1 x i16> @llvm.vp.merge.nxv1i16(<vscale x 1 x i1> %m, <vscale x 1 x i16> splat (i16 2), <vscale x 1 x i16> %vb, i32 %evl)661 ret <vscale x 1 x i16> %v662}663 664define <vscale x 2 x i16> @vpmerge_vv_nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> %vb, <vscale x 2 x i1> %m, i32 zeroext %evl) {665; CHECK-LABEL: vpmerge_vv_nxv2i16:666; CHECK: # %bb.0:667; CHECK-NEXT: vsetvli zero, a0, e16, mf2, tu, ma668; CHECK-NEXT: vmerge.vvm v9, v9, v8, v0669; CHECK-NEXT: vmv1r.v v8, v9670; CHECK-NEXT: ret671 %v = call <vscale x 2 x i16> @llvm.vp.merge.nxv2i16(<vscale x 2 x i1> %m, <vscale x 2 x i16> %va, <vscale x 2 x i16> %vb, i32 %evl)672 ret <vscale x 2 x i16> %v673}674 675define <vscale x 2 x i16> @vpmerge_vx_nxv2i16(i16 %a, <vscale x 2 x i16> %vb, <vscale x 2 x i1> %m, i32 zeroext %evl) {676; CHECK-LABEL: vpmerge_vx_nxv2i16:677; CHECK: # %bb.0:678; CHECK-NEXT: vsetvli zero, a1, e16, mf2, tu, ma679; CHECK-NEXT: vmerge.vxm v8, v8, a0, v0680; CHECK-NEXT: ret681 %elt.head = insertelement <vscale x 2 x i16> poison, i16 %a, i32 0682 %va = shufflevector <vscale x 2 x i16> %elt.head, <vscale x 2 x i16> poison, <vscale x 2 x i32> zeroinitializer683 %v = call <vscale x 2 x i16> @llvm.vp.merge.nxv2i16(<vscale x 2 x i1> %m, <vscale x 2 x i16> %va, <vscale x 2 x i16> %vb, i32 %evl)684 ret <vscale x 2 x i16> %v685}686 687define <vscale x 2 x i16> @vpmerge_vi_nxv2i16(<vscale x 2 x i16> %vb, <vscale x 2 x i1> %m, i32 zeroext %evl) {688; CHECK-LABEL: vpmerge_vi_nxv2i16:689; CHECK: # %bb.0:690; CHECK-NEXT: vsetvli zero, a0, e16, mf2, tu, ma691; CHECK-NEXT: vmerge.vim v8, v8, 2, v0692; CHECK-NEXT: ret693 %v = call <vscale x 2 x i16> @llvm.vp.merge.nxv2i16(<vscale x 2 x i1> %m, <vscale x 2 x i16> splat (i16 2), <vscale x 2 x i16> %vb, i32 %evl)694 ret <vscale x 2 x i16> %v695}696 697define <vscale x 4 x i16> @vpmerge_vv_nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> %vb, <vscale x 4 x i1> %m, i32 zeroext %evl) {698; CHECK-LABEL: vpmerge_vv_nxv4i16:699; CHECK: # %bb.0:700; CHECK-NEXT: vsetvli zero, a0, e16, m1, tu, ma701; CHECK-NEXT: vmerge.vvm v9, v9, v8, v0702; CHECK-NEXT: vmv1r.v v8, v9703; CHECK-NEXT: ret704 %v = call <vscale x 4 x i16> @llvm.vp.merge.nxv4i16(<vscale x 4 x i1> %m, <vscale x 4 x i16> %va, <vscale x 4 x i16> %vb, i32 %evl)705 ret <vscale x 4 x i16> %v706}707 708define <vscale x 4 x i16> @vpmerge_vx_nxv4i16(i16 %a, <vscale x 4 x i16> %vb, <vscale x 4 x i1> %m, i32 zeroext %evl) {709; CHECK-LABEL: vpmerge_vx_nxv4i16:710; CHECK: # %bb.0:711; CHECK-NEXT: vsetvli zero, a1, e16, m1, tu, ma712; CHECK-NEXT: vmerge.vxm v8, v8, a0, v0713; CHECK-NEXT: ret714 %elt.head = insertelement <vscale x 4 x i16> poison, i16 %a, i32 0715 %va = shufflevector <vscale x 4 x i16> %elt.head, <vscale x 4 x i16> poison, <vscale x 4 x i32> zeroinitializer716 %v = call <vscale x 4 x i16> @llvm.vp.merge.nxv4i16(<vscale x 4 x i1> %m, <vscale x 4 x i16> %va, <vscale x 4 x i16> %vb, i32 %evl)717 ret <vscale x 4 x i16> %v718}719 720define <vscale x 4 x i16> @vpmerge_vi_nxv4i16(<vscale x 4 x i16> %vb, <vscale x 4 x i1> %m, i32 zeroext %evl) {721; CHECK-LABEL: vpmerge_vi_nxv4i16:722; CHECK: # %bb.0:723; CHECK-NEXT: vsetvli zero, a0, e16, m1, tu, ma724; CHECK-NEXT: vmerge.vim v8, v8, 2, v0725; CHECK-NEXT: ret726 %v = call <vscale x 4 x i16> @llvm.vp.merge.nxv4i16(<vscale x 4 x i1> %m, <vscale x 4 x i16> splat (i16 2), <vscale x 4 x i16> %vb, i32 %evl)727 ret <vscale x 4 x i16> %v728}729 730define <vscale x 8 x i16> @vpmerge_vv_nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %vb, <vscale x 8 x i1> %m, i32 zeroext %evl) {731; CHECK-LABEL: vpmerge_vv_nxv8i16:732; CHECK: # %bb.0:733; CHECK-NEXT: vsetvli zero, a0, e16, m2, tu, ma734; CHECK-NEXT: vmerge.vvm v10, v10, v8, v0735; CHECK-NEXT: vmv2r.v v8, v10736; CHECK-NEXT: ret737 %v = call <vscale x 8 x i16> @llvm.vp.merge.nxv8i16(<vscale x 8 x i1> %m, <vscale x 8 x i16> %va, <vscale x 8 x i16> %vb, i32 %evl)738 ret <vscale x 8 x i16> %v739}740 741define <vscale x 8 x i16> @vpmerge_vx_nxv8i16(i16 %a, <vscale x 8 x i16> %vb, <vscale x 8 x i1> %m, i32 zeroext %evl) {742; CHECK-LABEL: vpmerge_vx_nxv8i16:743; CHECK: # %bb.0:744; CHECK-NEXT: vsetvli zero, a1, e16, m2, tu, ma745; CHECK-NEXT: vmerge.vxm v8, v8, a0, v0746; CHECK-NEXT: ret747 %elt.head = insertelement <vscale x 8 x i16> poison, i16 %a, i32 0748 %va = shufflevector <vscale x 8 x i16> %elt.head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer749 %v = call <vscale x 8 x i16> @llvm.vp.merge.nxv8i16(<vscale x 8 x i1> %m, <vscale x 8 x i16> %va, <vscale x 8 x i16> %vb, i32 %evl)750 ret <vscale x 8 x i16> %v751}752 753define <vscale x 8 x i16> @vpmerge_vi_nxv8i16(<vscale x 8 x i16> %vb, <vscale x 8 x i1> %m, i32 zeroext %evl) {754; CHECK-LABEL: vpmerge_vi_nxv8i16:755; CHECK: # %bb.0:756; CHECK-NEXT: vsetvli zero, a0, e16, m2, tu, ma757; CHECK-NEXT: vmerge.vim v8, v8, 2, v0758; CHECK-NEXT: ret759 %v = call <vscale x 8 x i16> @llvm.vp.merge.nxv8i16(<vscale x 8 x i1> %m, <vscale x 8 x i16> splat (i16 2), <vscale x 8 x i16> %vb, i32 %evl)760 ret <vscale x 8 x i16> %v761}762 763define <vscale x 16 x i16> @vpmerge_vv_nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> %vb, <vscale x 16 x i1> %m, i32 zeroext %evl) {764; CHECK-LABEL: vpmerge_vv_nxv16i16:765; CHECK: # %bb.0:766; CHECK-NEXT: vsetvli zero, a0, e16, m4, tu, ma767; CHECK-NEXT: vmerge.vvm v12, v12, v8, v0768; CHECK-NEXT: vmv4r.v v8, v12769; CHECK-NEXT: ret770 %v = call <vscale x 16 x i16> @llvm.vp.merge.nxv16i16(<vscale x 16 x i1> %m, <vscale x 16 x i16> %va, <vscale x 16 x i16> %vb, i32 %evl)771 ret <vscale x 16 x i16> %v772}773 774define <vscale x 16 x i16> @vpmerge_vx_nxv16i16(i16 %a, <vscale x 16 x i16> %vb, <vscale x 16 x i1> %m, i32 zeroext %evl) {775; CHECK-LABEL: vpmerge_vx_nxv16i16:776; CHECK: # %bb.0:777; CHECK-NEXT: vsetvli zero, a1, e16, m4, tu, ma778; CHECK-NEXT: vmerge.vxm v8, v8, a0, v0779; CHECK-NEXT: ret780 %elt.head = insertelement <vscale x 16 x i16> poison, i16 %a, i32 0781 %va = shufflevector <vscale x 16 x i16> %elt.head, <vscale x 16 x i16> poison, <vscale x 16 x i32> zeroinitializer782 %v = call <vscale x 16 x i16> @llvm.vp.merge.nxv16i16(<vscale x 16 x i1> %m, <vscale x 16 x i16> %va, <vscale x 16 x i16> %vb, i32 %evl)783 ret <vscale x 16 x i16> %v784}785 786define <vscale x 16 x i16> @vpmerge_vi_nxv16i16(<vscale x 16 x i16> %vb, <vscale x 16 x i1> %m, i32 zeroext %evl) {787; CHECK-LABEL: vpmerge_vi_nxv16i16:788; CHECK: # %bb.0:789; CHECK-NEXT: vsetvli zero, a0, e16, m4, tu, ma790; CHECK-NEXT: vmerge.vim v8, v8, 2, v0791; CHECK-NEXT: ret792 %v = call <vscale x 16 x i16> @llvm.vp.merge.nxv16i16(<vscale x 16 x i1> %m, <vscale x 16 x i16> splat (i16 2), <vscale x 16 x i16> %vb, i32 %evl)793 ret <vscale x 16 x i16> %v794}795 796define <vscale x 32 x i16> @vpmerge_vv_nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> %vb, <vscale x 32 x i1> %m, i32 zeroext %evl) {797; CHECK-LABEL: vpmerge_vv_nxv32i16:798; CHECK: # %bb.0:799; CHECK-NEXT: vsetvli zero, a0, e16, m8, tu, ma800; CHECK-NEXT: vmerge.vvm v16, v16, v8, v0801; CHECK-NEXT: vmv8r.v v8, v16802; CHECK-NEXT: ret803 %v = call <vscale x 32 x i16> @llvm.vp.merge.nxv32i16(<vscale x 32 x i1> %m, <vscale x 32 x i16> %va, <vscale x 32 x i16> %vb, i32 %evl)804 ret <vscale x 32 x i16> %v805}806 807define <vscale x 32 x i16> @vpmerge_vx_nxv32i16(i16 %a, <vscale x 32 x i16> %vb, <vscale x 32 x i1> %m, i32 zeroext %evl) {808; CHECK-LABEL: vpmerge_vx_nxv32i16:809; CHECK: # %bb.0:810; CHECK-NEXT: vsetvli zero, a1, e16, m8, tu, ma811; CHECK-NEXT: vmerge.vxm v8, v8, a0, v0812; CHECK-NEXT: ret813 %elt.head = insertelement <vscale x 32 x i16> poison, i16 %a, i32 0814 %va = shufflevector <vscale x 32 x i16> %elt.head, <vscale x 32 x i16> poison, <vscale x 32 x i32> zeroinitializer815 %v = call <vscale x 32 x i16> @llvm.vp.merge.nxv32i16(<vscale x 32 x i1> %m, <vscale x 32 x i16> %va, <vscale x 32 x i16> %vb, i32 %evl)816 ret <vscale x 32 x i16> %v817}818 819define <vscale x 32 x i16> @vpmerge_vi_nxv32i16(<vscale x 32 x i16> %vb, <vscale x 32 x i1> %m, i32 zeroext %evl) {820; CHECK-LABEL: vpmerge_vi_nxv32i16:821; CHECK: # %bb.0:822; CHECK-NEXT: vsetvli zero, a0, e16, m8, tu, ma823; CHECK-NEXT: vmerge.vim v8, v8, 2, v0824; CHECK-NEXT: ret825 %v = call <vscale x 32 x i16> @llvm.vp.merge.nxv32i16(<vscale x 32 x i1> %m, <vscale x 32 x i16> splat (i16 2), <vscale x 32 x i16> %vb, i32 %evl)826 ret <vscale x 32 x i16> %v827}828 829define <vscale x 1 x i32> @vpmerge_vv_nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> %vb, <vscale x 1 x i1> %m, i32 zeroext %evl) {830; CHECK-LABEL: vpmerge_vv_nxv1i32:831; CHECK: # %bb.0:832; CHECK-NEXT: vsetvli zero, a0, e32, mf2, tu, ma833; CHECK-NEXT: vmerge.vvm v9, v9, v8, v0834; CHECK-NEXT: vmv1r.v v8, v9835; CHECK-NEXT: ret836 %v = call <vscale x 1 x i32> @llvm.vp.merge.nxv1i32(<vscale x 1 x i1> %m, <vscale x 1 x i32> %va, <vscale x 1 x i32> %vb, i32 %evl)837 ret <vscale x 1 x i32> %v838}839 840define <vscale x 1 x i32> @vpmerge_vx_nxv1i32(i32 %a, <vscale x 1 x i32> %vb, <vscale x 1 x i1> %m, i32 zeroext %evl) {841; CHECK-LABEL: vpmerge_vx_nxv1i32:842; CHECK: # %bb.0:843; CHECK-NEXT: vsetvli zero, a1, e32, mf2, tu, ma844; CHECK-NEXT: vmerge.vxm v8, v8, a0, v0845; CHECK-NEXT: ret846 %elt.head = insertelement <vscale x 1 x i32> poison, i32 %a, i32 0847 %va = shufflevector <vscale x 1 x i32> %elt.head, <vscale x 1 x i32> poison, <vscale x 1 x i32> zeroinitializer848 %v = call <vscale x 1 x i32> @llvm.vp.merge.nxv1i32(<vscale x 1 x i1> %m, <vscale x 1 x i32> %va, <vscale x 1 x i32> %vb, i32 %evl)849 ret <vscale x 1 x i32> %v850}851 852define <vscale x 1 x i32> @vpmerge_vi_nxv1i32(<vscale x 1 x i32> %vb, <vscale x 1 x i1> %m, i32 zeroext %evl) {853; CHECK-LABEL: vpmerge_vi_nxv1i32:854; CHECK: # %bb.0:855; CHECK-NEXT: vsetvli zero, a0, e32, mf2, tu, ma856; CHECK-NEXT: vmerge.vim v8, v8, 2, v0857; CHECK-NEXT: ret858 %v = call <vscale x 1 x i32> @llvm.vp.merge.nxv1i32(<vscale x 1 x i1> %m, <vscale x 1 x i32> splat (i32 2), <vscale x 1 x i32> %vb, i32 %evl)859 ret <vscale x 1 x i32> %v860}861 862define <vscale x 2 x i32> @vpmerge_vv_nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> %vb, <vscale x 2 x i1> %m, i32 zeroext %evl) {863; CHECK-LABEL: vpmerge_vv_nxv2i32:864; CHECK: # %bb.0:865; CHECK-NEXT: vsetvli zero, a0, e32, m1, tu, ma866; CHECK-NEXT: vmerge.vvm v9, v9, v8, v0867; CHECK-NEXT: vmv1r.v v8, v9868; CHECK-NEXT: ret869 %v = call <vscale x 2 x i32> @llvm.vp.merge.nxv2i32(<vscale x 2 x i1> %m, <vscale x 2 x i32> %va, <vscale x 2 x i32> %vb, i32 %evl)870 ret <vscale x 2 x i32> %v871}872 873define <vscale x 2 x i32> @vpmerge_vx_nxv2i32(i32 %a, <vscale x 2 x i32> %vb, <vscale x 2 x i1> %m, i32 zeroext %evl) {874; CHECK-LABEL: vpmerge_vx_nxv2i32:875; CHECK: # %bb.0:876; CHECK-NEXT: vsetvli zero, a1, e32, m1, tu, ma877; CHECK-NEXT: vmerge.vxm v8, v8, a0, v0878; CHECK-NEXT: ret879 %elt.head = insertelement <vscale x 2 x i32> poison, i32 %a, i32 0880 %va = shufflevector <vscale x 2 x i32> %elt.head, <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer881 %v = call <vscale x 2 x i32> @llvm.vp.merge.nxv2i32(<vscale x 2 x i1> %m, <vscale x 2 x i32> %va, <vscale x 2 x i32> %vb, i32 %evl)882 ret <vscale x 2 x i32> %v883}884 885define <vscale x 2 x i32> @vpmerge_vi_nxv2i32(<vscale x 2 x i32> %vb, <vscale x 2 x i1> %m, i32 zeroext %evl) {886; CHECK-LABEL: vpmerge_vi_nxv2i32:887; CHECK: # %bb.0:888; CHECK-NEXT: vsetvli zero, a0, e32, m1, tu, ma889; CHECK-NEXT: vmerge.vim v8, v8, 2, v0890; CHECK-NEXT: ret891 %v = call <vscale x 2 x i32> @llvm.vp.merge.nxv2i32(<vscale x 2 x i1> %m, <vscale x 2 x i32> splat (i32 2), <vscale x 2 x i32> %vb, i32 %evl)892 ret <vscale x 2 x i32> %v893}894 895define <vscale x 4 x i32> @vpmerge_vv_nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> %vb, <vscale x 4 x i1> %m, i32 zeroext %evl) {896; CHECK-LABEL: vpmerge_vv_nxv4i32:897; CHECK: # %bb.0:898; CHECK-NEXT: vsetvli zero, a0, e32, m2, tu, ma899; CHECK-NEXT: vmerge.vvm v10, v10, v8, v0900; CHECK-NEXT: vmv2r.v v8, v10901; CHECK-NEXT: ret902 %v = call <vscale x 4 x i32> @llvm.vp.merge.nxv4i32(<vscale x 4 x i1> %m, <vscale x 4 x i32> %va, <vscale x 4 x i32> %vb, i32 %evl)903 ret <vscale x 4 x i32> %v904}905 906define <vscale x 4 x i32> @vpmerge_vx_nxv4i32(i32 %a, <vscale x 4 x i32> %vb, <vscale x 4 x i1> %m, i32 zeroext %evl) {907; CHECK-LABEL: vpmerge_vx_nxv4i32:908; CHECK: # %bb.0:909; CHECK-NEXT: vsetvli zero, a1, e32, m2, tu, ma910; CHECK-NEXT: vmerge.vxm v8, v8, a0, v0911; CHECK-NEXT: ret912 %elt.head = insertelement <vscale x 4 x i32> poison, i32 %a, i32 0913 %va = shufflevector <vscale x 4 x i32> %elt.head, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer914 %v = call <vscale x 4 x i32> @llvm.vp.merge.nxv4i32(<vscale x 4 x i1> %m, <vscale x 4 x i32> %va, <vscale x 4 x i32> %vb, i32 %evl)915 ret <vscale x 4 x i32> %v916}917 918define <vscale x 4 x i32> @vpmerge_vi_nxv4i32(<vscale x 4 x i32> %vb, <vscale x 4 x i1> %m, i32 zeroext %evl) {919; CHECK-LABEL: vpmerge_vi_nxv4i32:920; CHECK: # %bb.0:921; CHECK-NEXT: vsetvli zero, a0, e32, m2, tu, ma922; CHECK-NEXT: vmerge.vim v8, v8, 2, v0923; CHECK-NEXT: ret924 %v = call <vscale x 4 x i32> @llvm.vp.merge.nxv4i32(<vscale x 4 x i1> %m, <vscale x 4 x i32> splat (i32 2), <vscale x 4 x i32> %vb, i32 %evl)925 ret <vscale x 4 x i32> %v926}927 928define <vscale x 8 x i32> @vpmerge_vv_nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %vb, <vscale x 8 x i1> %m, i32 zeroext %evl) {929; CHECK-LABEL: vpmerge_vv_nxv8i32:930; CHECK: # %bb.0:931; CHECK-NEXT: vsetvli zero, a0, e32, m4, tu, ma932; CHECK-NEXT: vmerge.vvm v12, v12, v8, v0933; CHECK-NEXT: vmv4r.v v8, v12934; CHECK-NEXT: ret935 %v = call <vscale x 8 x i32> @llvm.vp.merge.nxv8i32(<vscale x 8 x i1> %m, <vscale x 8 x i32> %va, <vscale x 8 x i32> %vb, i32 %evl)936 ret <vscale x 8 x i32> %v937}938 939define <vscale x 8 x i32> @vpmerge_vx_nxv8i32(i32 %a, <vscale x 8 x i32> %vb, <vscale x 8 x i1> %m, i32 zeroext %evl) {940; CHECK-LABEL: vpmerge_vx_nxv8i32:941; CHECK: # %bb.0:942; CHECK-NEXT: vsetvli zero, a1, e32, m4, tu, ma943; CHECK-NEXT: vmerge.vxm v8, v8, a0, v0944; CHECK-NEXT: ret945 %elt.head = insertelement <vscale x 8 x i32> poison, i32 %a, i32 0946 %va = shufflevector <vscale x 8 x i32> %elt.head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer947 %v = call <vscale x 8 x i32> @llvm.vp.merge.nxv8i32(<vscale x 8 x i1> %m, <vscale x 8 x i32> %va, <vscale x 8 x i32> %vb, i32 %evl)948 ret <vscale x 8 x i32> %v949}950 951define <vscale x 8 x i32> @vpmerge_vi_nxv8i32(<vscale x 8 x i32> %vb, <vscale x 8 x i1> %m, i32 zeroext %evl) {952; CHECK-LABEL: vpmerge_vi_nxv8i32:953; CHECK: # %bb.0:954; CHECK-NEXT: vsetvli zero, a0, e32, m4, tu, ma955; CHECK-NEXT: vmerge.vim v8, v8, 2, v0956; CHECK-NEXT: ret957 %v = call <vscale x 8 x i32> @llvm.vp.merge.nxv8i32(<vscale x 8 x i1> %m, <vscale x 8 x i32> splat (i32 2), <vscale x 8 x i32> %vb, i32 %evl)958 ret <vscale x 8 x i32> %v959}960 961define <vscale x 16 x i32> @vpmerge_vv_nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> %vb, <vscale x 16 x i1> %m, i32 zeroext %evl) {962; CHECK-LABEL: vpmerge_vv_nxv16i32:963; CHECK: # %bb.0:964; CHECK-NEXT: vsetvli zero, a0, e32, m8, tu, ma965; CHECK-NEXT: vmerge.vvm v16, v16, v8, v0966; CHECK-NEXT: vmv8r.v v8, v16967; CHECK-NEXT: ret968 %v = call <vscale x 16 x i32> @llvm.vp.merge.nxv16i32(<vscale x 16 x i1> %m, <vscale x 16 x i32> %va, <vscale x 16 x i32> %vb, i32 %evl)969 ret <vscale x 16 x i32> %v970}971 972define <vscale x 16 x i32> @vpmerge_vx_nxv16i32(i32 %a, <vscale x 16 x i32> %vb, <vscale x 16 x i1> %m, i32 zeroext %evl) {973; CHECK-LABEL: vpmerge_vx_nxv16i32:974; CHECK: # %bb.0:975; CHECK-NEXT: vsetvli zero, a1, e32, m8, tu, ma976; CHECK-NEXT: vmerge.vxm v8, v8, a0, v0977; CHECK-NEXT: ret978 %elt.head = insertelement <vscale x 16 x i32> poison, i32 %a, i32 0979 %va = shufflevector <vscale x 16 x i32> %elt.head, <vscale x 16 x i32> poison, <vscale x 16 x i32> zeroinitializer980 %v = call <vscale x 16 x i32> @llvm.vp.merge.nxv16i32(<vscale x 16 x i1> %m, <vscale x 16 x i32> %va, <vscale x 16 x i32> %vb, i32 %evl)981 ret <vscale x 16 x i32> %v982}983 984define <vscale x 16 x i32> @vpmerge_vi_nxv16i32(<vscale x 16 x i32> %vb, <vscale x 16 x i1> %m, i32 zeroext %evl) {985; CHECK-LABEL: vpmerge_vi_nxv16i32:986; CHECK: # %bb.0:987; CHECK-NEXT: vsetvli zero, a0, e32, m8, tu, ma988; CHECK-NEXT: vmerge.vim v8, v8, 2, v0989; CHECK-NEXT: ret990 %v = call <vscale x 16 x i32> @llvm.vp.merge.nxv16i32(<vscale x 16 x i1> %m, <vscale x 16 x i32> splat (i32 2), <vscale x 16 x i32> %vb, i32 %evl)991 ret <vscale x 16 x i32> %v992}993 994define <vscale x 1 x i64> @vpmerge_vv_nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> %vb, <vscale x 1 x i1> %m, i32 zeroext %evl) {995; CHECK-LABEL: vpmerge_vv_nxv1i64:996; CHECK: # %bb.0:997; CHECK-NEXT: vsetvli zero, a0, e64, m1, tu, ma998; CHECK-NEXT: vmerge.vvm v9, v9, v8, v0999; CHECK-NEXT: vmv1r.v v8, v91000; CHECK-NEXT: ret1001 %v = call <vscale x 1 x i64> @llvm.vp.merge.nxv1i64(<vscale x 1 x i1> %m, <vscale x 1 x i64> %va, <vscale x 1 x i64> %vb, i32 %evl)1002 ret <vscale x 1 x i64> %v1003}1004 1005define <vscale x 1 x i64> @vpmerge_vx_nxv1i64(i64 %a, <vscale x 1 x i64> %vb, <vscale x 1 x i1> %m, i32 zeroext %evl) {1006; RV32-LABEL: vpmerge_vx_nxv1i64:1007; RV32: # %bb.0:1008; RV32-NEXT: addi sp, sp, -161009; RV32-NEXT: .cfi_def_cfa_offset 161010; RV32-NEXT: sw a0, 8(sp)1011; RV32-NEXT: sw a1, 12(sp)1012; RV32-NEXT: addi a0, sp, 81013; RV32-NEXT: vsetvli zero, a2, e64, m1, tu, mu1014; RV32-NEXT: vlse64.v v8, (a0), zero, v0.t1015; RV32-NEXT: addi sp, sp, 161016; RV32-NEXT: .cfi_def_cfa_offset 01017; RV32-NEXT: ret1018;1019; RV64-LABEL: vpmerge_vx_nxv1i64:1020; RV64: # %bb.0:1021; RV64-NEXT: vsetvli zero, a1, e64, m1, tu, ma1022; RV64-NEXT: vmerge.vxm v8, v8, a0, v01023; RV64-NEXT: ret1024 %elt.head = insertelement <vscale x 1 x i64> poison, i64 %a, i32 01025 %va = shufflevector <vscale x 1 x i64> %elt.head, <vscale x 1 x i64> poison, <vscale x 1 x i32> zeroinitializer1026 %v = call <vscale x 1 x i64> @llvm.vp.merge.nxv1i64(<vscale x 1 x i1> %m, <vscale x 1 x i64> %va, <vscale x 1 x i64> %vb, i32 %evl)1027 ret <vscale x 1 x i64> %v1028}1029 1030define <vscale x 1 x i64> @vpmerge_vi_nxv1i64(<vscale x 1 x i64> %vb, <vscale x 1 x i1> %m, i32 zeroext %evl) {1031; CHECK-LABEL: vpmerge_vi_nxv1i64:1032; CHECK: # %bb.0:1033; CHECK-NEXT: vsetvli zero, a0, e64, m1, tu, ma1034; CHECK-NEXT: vmerge.vim v8, v8, 2, v01035; CHECK-NEXT: ret1036 %v = call <vscale x 1 x i64> @llvm.vp.merge.nxv1i64(<vscale x 1 x i1> %m, <vscale x 1 x i64> splat (i64 2), <vscale x 1 x i64> %vb, i32 %evl)1037 ret <vscale x 1 x i64> %v1038}1039 1040define <vscale x 2 x i64> @vpmerge_vv_nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> %vb, <vscale x 2 x i1> %m, i32 zeroext %evl) {1041; CHECK-LABEL: vpmerge_vv_nxv2i64:1042; CHECK: # %bb.0:1043; CHECK-NEXT: vsetvli zero, a0, e64, m2, tu, ma1044; CHECK-NEXT: vmerge.vvm v10, v10, v8, v01045; CHECK-NEXT: vmv2r.v v8, v101046; CHECK-NEXT: ret1047 %v = call <vscale x 2 x i64> @llvm.vp.merge.nxv2i64(<vscale x 2 x i1> %m, <vscale x 2 x i64> %va, <vscale x 2 x i64> %vb, i32 %evl)1048 ret <vscale x 2 x i64> %v1049}1050 1051define <vscale x 2 x i64> @vpmerge_vx_nxv2i64(i64 %a, <vscale x 2 x i64> %vb, <vscale x 2 x i1> %m, i32 zeroext %evl) {1052; RV32-LABEL: vpmerge_vx_nxv2i64:1053; RV32: # %bb.0:1054; RV32-NEXT: addi sp, sp, -161055; RV32-NEXT: .cfi_def_cfa_offset 161056; RV32-NEXT: sw a0, 8(sp)1057; RV32-NEXT: sw a1, 12(sp)1058; RV32-NEXT: addi a0, sp, 81059; RV32-NEXT: vsetvli zero, a2, e64, m2, tu, mu1060; RV32-NEXT: vlse64.v v8, (a0), zero, v0.t1061; RV32-NEXT: addi sp, sp, 161062; RV32-NEXT: .cfi_def_cfa_offset 01063; RV32-NEXT: ret1064;1065; RV64-LABEL: vpmerge_vx_nxv2i64:1066; RV64: # %bb.0:1067; RV64-NEXT: vsetvli zero, a1, e64, m2, tu, ma1068; RV64-NEXT: vmerge.vxm v8, v8, a0, v01069; RV64-NEXT: ret1070 %elt.head = insertelement <vscale x 2 x i64> poison, i64 %a, i32 01071 %va = shufflevector <vscale x 2 x i64> %elt.head, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer1072 %v = call <vscale x 2 x i64> @llvm.vp.merge.nxv2i64(<vscale x 2 x i1> %m, <vscale x 2 x i64> %va, <vscale x 2 x i64> %vb, i32 %evl)1073 ret <vscale x 2 x i64> %v1074}1075 1076define <vscale x 2 x i64> @vpmerge_vi_nxv2i64(<vscale x 2 x i64> %vb, <vscale x 2 x i1> %m, i32 zeroext %evl) {1077; CHECK-LABEL: vpmerge_vi_nxv2i64:1078; CHECK: # %bb.0:1079; CHECK-NEXT: vsetvli zero, a0, e64, m2, tu, ma1080; CHECK-NEXT: vmerge.vim v8, v8, 2, v01081; CHECK-NEXT: ret1082 %v = call <vscale x 2 x i64> @llvm.vp.merge.nxv2i64(<vscale x 2 x i1> %m, <vscale x 2 x i64> splat (i64 2), <vscale x 2 x i64> %vb, i32 %evl)1083 ret <vscale x 2 x i64> %v1084}1085 1086define <vscale x 4 x i64> @vpmerge_vv_nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> %vb, <vscale x 4 x i1> %m, i32 zeroext %evl) {1087; CHECK-LABEL: vpmerge_vv_nxv4i64:1088; CHECK: # %bb.0:1089; CHECK-NEXT: vsetvli zero, a0, e64, m4, tu, ma1090; CHECK-NEXT: vmerge.vvm v12, v12, v8, v01091; CHECK-NEXT: vmv4r.v v8, v121092; CHECK-NEXT: ret1093 %v = call <vscale x 4 x i64> @llvm.vp.merge.nxv4i64(<vscale x 4 x i1> %m, <vscale x 4 x i64> %va, <vscale x 4 x i64> %vb, i32 %evl)1094 ret <vscale x 4 x i64> %v1095}1096 1097define <vscale x 4 x i64> @vpmerge_vx_nxv4i64(i64 %a, <vscale x 4 x i64> %vb, <vscale x 4 x i1> %m, i32 zeroext %evl) {1098; RV32-LABEL: vpmerge_vx_nxv4i64:1099; RV32: # %bb.0:1100; RV32-NEXT: addi sp, sp, -161101; RV32-NEXT: .cfi_def_cfa_offset 161102; RV32-NEXT: sw a0, 8(sp)1103; RV32-NEXT: sw a1, 12(sp)1104; RV32-NEXT: addi a0, sp, 81105; RV32-NEXT: vsetvli zero, a2, e64, m4, tu, mu1106; RV32-NEXT: vlse64.v v8, (a0), zero, v0.t1107; RV32-NEXT: addi sp, sp, 161108; RV32-NEXT: .cfi_def_cfa_offset 01109; RV32-NEXT: ret1110;1111; RV64-LABEL: vpmerge_vx_nxv4i64:1112; RV64: # %bb.0:1113; RV64-NEXT: vsetvli zero, a1, e64, m4, tu, ma1114; RV64-NEXT: vmerge.vxm v8, v8, a0, v01115; RV64-NEXT: ret1116 %elt.head = insertelement <vscale x 4 x i64> poison, i64 %a, i32 01117 %va = shufflevector <vscale x 4 x i64> %elt.head, <vscale x 4 x i64> poison, <vscale x 4 x i32> zeroinitializer1118 %v = call <vscale x 4 x i64> @llvm.vp.merge.nxv4i64(<vscale x 4 x i1> %m, <vscale x 4 x i64> %va, <vscale x 4 x i64> %vb, i32 %evl)1119 ret <vscale x 4 x i64> %v1120}1121 1122define <vscale x 4 x i64> @vpmerge_vi_nxv4i64(<vscale x 4 x i64> %vb, <vscale x 4 x i1> %m, i32 zeroext %evl) {1123; CHECK-LABEL: vpmerge_vi_nxv4i64:1124; CHECK: # %bb.0:1125; CHECK-NEXT: vsetvli zero, a0, e64, m4, tu, ma1126; CHECK-NEXT: vmerge.vim v8, v8, 2, v01127; CHECK-NEXT: ret1128 %v = call <vscale x 4 x i64> @llvm.vp.merge.nxv4i64(<vscale x 4 x i1> %m, <vscale x 4 x i64> splat (i64 2), <vscale x 4 x i64> %vb, i32 %evl)1129 ret <vscale x 4 x i64> %v1130}1131 1132define <vscale x 8 x i64> @vpmerge_vv_nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %vb, <vscale x 8 x i1> %m, i32 zeroext %evl) {1133; CHECK-LABEL: vpmerge_vv_nxv8i64:1134; CHECK: # %bb.0:1135; CHECK-NEXT: vsetvli zero, a0, e64, m8, tu, ma1136; CHECK-NEXT: vmerge.vvm v16, v16, v8, v01137; CHECK-NEXT: vmv8r.v v8, v161138; CHECK-NEXT: ret1139 %v = call <vscale x 8 x i64> @llvm.vp.merge.nxv8i64(<vscale x 8 x i1> %m, <vscale x 8 x i64> %va, <vscale x 8 x i64> %vb, i32 %evl)1140 ret <vscale x 8 x i64> %v1141}1142 1143define <vscale x 8 x i64> @vpmerge_vx_nxv8i64(i64 %a, <vscale x 8 x i64> %vb, <vscale x 8 x i1> %m, i32 zeroext %evl) {1144; RV32-LABEL: vpmerge_vx_nxv8i64:1145; RV32: # %bb.0:1146; RV32-NEXT: addi sp, sp, -161147; RV32-NEXT: .cfi_def_cfa_offset 161148; RV32-NEXT: sw a0, 8(sp)1149; RV32-NEXT: sw a1, 12(sp)1150; RV32-NEXT: addi a0, sp, 81151; RV32-NEXT: vsetvli zero, a2, e64, m8, tu, mu1152; RV32-NEXT: vlse64.v v8, (a0), zero, v0.t1153; RV32-NEXT: addi sp, sp, 161154; RV32-NEXT: .cfi_def_cfa_offset 01155; RV32-NEXT: ret1156;1157; RV64-LABEL: vpmerge_vx_nxv8i64:1158; RV64: # %bb.0:1159; RV64-NEXT: vsetvli zero, a1, e64, m8, tu, ma1160; RV64-NEXT: vmerge.vxm v8, v8, a0, v01161; RV64-NEXT: ret1162 %elt.head = insertelement <vscale x 8 x i64> poison, i64 %a, i32 01163 %va = shufflevector <vscale x 8 x i64> %elt.head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer1164 %v = call <vscale x 8 x i64> @llvm.vp.merge.nxv8i64(<vscale x 8 x i1> %m, <vscale x 8 x i64> %va, <vscale x 8 x i64> %vb, i32 %evl)1165 ret <vscale x 8 x i64> %v1166}1167 1168define <vscale x 8 x i64> @vpmerge_vi_nxv8i64(<vscale x 8 x i64> %vb, <vscale x 8 x i1> %m, i32 zeroext %evl) {1169; CHECK-LABEL: vpmerge_vi_nxv8i64:1170; CHECK: # %bb.0:1171; CHECK-NEXT: vsetvli zero, a0, e64, m8, tu, ma1172; CHECK-NEXT: vmerge.vim v8, v8, 2, v01173; CHECK-NEXT: ret1174 %v = call <vscale x 8 x i64> @llvm.vp.merge.nxv8i64(<vscale x 8 x i1> %m, <vscale x 8 x i64> splat (i64 2), <vscale x 8 x i64> %vb, i32 %evl)1175 ret <vscale x 8 x i64> %v1176}1177 1178define <vscale x 1 x half> @vpmerge_vv_nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, <vscale x 1 x i1> %m, i32 zeroext %evl) {1179; CHECK-LABEL: vpmerge_vv_nxv1f16:1180; CHECK: # %bb.0:1181; CHECK-NEXT: vsetvli zero, a0, e16, mf4, tu, ma1182; CHECK-NEXT: vmerge.vvm v9, v9, v8, v01183; CHECK-NEXT: vmv1r.v v8, v91184; CHECK-NEXT: ret1185 %v = call <vscale x 1 x half> @llvm.vp.merge.nxv1f16(<vscale x 1 x i1> %m, <vscale x 1 x half> %va, <vscale x 1 x half> %vb, i32 %evl)1186 ret <vscale x 1 x half> %v1187}1188 1189define <vscale x 1 x half> @vpmerge_vf_nxv1f16(half %a, <vscale x 1 x half> %vb, <vscale x 1 x i1> %m, i32 zeroext %evl) {1190; RV32ZVFH-LABEL: vpmerge_vf_nxv1f16:1191; RV32ZVFH: # %bb.0:1192; RV32ZVFH-NEXT: vsetvli zero, a0, e16, mf4, tu, ma1193; RV32ZVFH-NEXT: vfmerge.vfm v8, v8, fa0, v01194; RV32ZVFH-NEXT: ret1195;1196; RV64ZVFH-LABEL: vpmerge_vf_nxv1f16:1197; RV64ZVFH: # %bb.0:1198; RV64ZVFH-NEXT: vsetvli zero, a0, e16, mf4, tu, ma1199; RV64ZVFH-NEXT: vfmerge.vfm v8, v8, fa0, v01200; RV64ZVFH-NEXT: ret1201;1202; RV32ZVFHMIN-LABEL: vpmerge_vf_nxv1f16:1203; RV32ZVFHMIN: # %bb.0:1204; RV32ZVFHMIN-NEXT: fmv.x.h a1, fa01205; RV32ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf4, ta, ma1206; RV32ZVFHMIN-NEXT: vmv.v.x v9, a11207; RV32ZVFHMIN-NEXT: vsetvli zero, zero, e16, mf4, tu, ma1208; RV32ZVFHMIN-NEXT: vmerge.vvm v8, v8, v9, v01209; RV32ZVFHMIN-NEXT: ret1210;1211; RV64ZVFHMIN-LABEL: vpmerge_vf_nxv1f16:1212; RV64ZVFHMIN: # %bb.0:1213; RV64ZVFHMIN-NEXT: fmv.x.h a1, fa01214; RV64ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf4, ta, ma1215; RV64ZVFHMIN-NEXT: vmv.v.x v9, a11216; RV64ZVFHMIN-NEXT: vsetvli zero, zero, e16, mf4, tu, ma1217; RV64ZVFHMIN-NEXT: vmerge.vvm v8, v8, v9, v01218; RV64ZVFHMIN-NEXT: ret1219 %elt.head = insertelement <vscale x 1 x half> poison, half %a, i32 01220 %va = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer1221 %v = call <vscale x 1 x half> @llvm.vp.merge.nxv1f16(<vscale x 1 x i1> %m, <vscale x 1 x half> %va, <vscale x 1 x half> %vb, i32 %evl)1222 ret <vscale x 1 x half> %v1223}1224 1225define <vscale x 2 x half> @vpmerge_vv_nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %vb, <vscale x 2 x i1> %m, i32 zeroext %evl) {1226; CHECK-LABEL: vpmerge_vv_nxv2f16:1227; CHECK: # %bb.0:1228; CHECK-NEXT: vsetvli zero, a0, e16, mf2, tu, ma1229; CHECK-NEXT: vmerge.vvm v9, v9, v8, v01230; CHECK-NEXT: vmv1r.v v8, v91231; CHECK-NEXT: ret1232 %v = call <vscale x 2 x half> @llvm.vp.merge.nxv2f16(<vscale x 2 x i1> %m, <vscale x 2 x half> %va, <vscale x 2 x half> %vb, i32 %evl)1233 ret <vscale x 2 x half> %v1234}1235 1236define <vscale x 2 x half> @vpmerge_vf_nxv2f16(half %a, <vscale x 2 x half> %vb, <vscale x 2 x i1> %m, i32 zeroext %evl) {1237; RV32ZVFH-LABEL: vpmerge_vf_nxv2f16:1238; RV32ZVFH: # %bb.0:1239; RV32ZVFH-NEXT: vsetvli zero, a0, e16, mf2, tu, ma1240; RV32ZVFH-NEXT: vfmerge.vfm v8, v8, fa0, v01241; RV32ZVFH-NEXT: ret1242;1243; RV64ZVFH-LABEL: vpmerge_vf_nxv2f16:1244; RV64ZVFH: # %bb.0:1245; RV64ZVFH-NEXT: vsetvli zero, a0, e16, mf2, tu, ma1246; RV64ZVFH-NEXT: vfmerge.vfm v8, v8, fa0, v01247; RV64ZVFH-NEXT: ret1248;1249; RV32ZVFHMIN-LABEL: vpmerge_vf_nxv2f16:1250; RV32ZVFHMIN: # %bb.0:1251; RV32ZVFHMIN-NEXT: fmv.x.h a1, fa01252; RV32ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf2, ta, ma1253; RV32ZVFHMIN-NEXT: vmv.v.x v9, a11254; RV32ZVFHMIN-NEXT: vsetvli zero, zero, e16, mf2, tu, ma1255; RV32ZVFHMIN-NEXT: vmerge.vvm v8, v8, v9, v01256; RV32ZVFHMIN-NEXT: ret1257;1258; RV64ZVFHMIN-LABEL: vpmerge_vf_nxv2f16:1259; RV64ZVFHMIN: # %bb.0:1260; RV64ZVFHMIN-NEXT: fmv.x.h a1, fa01261; RV64ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf2, ta, ma1262; RV64ZVFHMIN-NEXT: vmv.v.x v9, a11263; RV64ZVFHMIN-NEXT: vsetvli zero, zero, e16, mf2, tu, ma1264; RV64ZVFHMIN-NEXT: vmerge.vvm v8, v8, v9, v01265; RV64ZVFHMIN-NEXT: ret1266 %elt.head = insertelement <vscale x 2 x half> poison, half %a, i32 01267 %va = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer1268 %v = call <vscale x 2 x half> @llvm.vp.merge.nxv2f16(<vscale x 2 x i1> %m, <vscale x 2 x half> %va, <vscale x 2 x half> %vb, i32 %evl)1269 ret <vscale x 2 x half> %v1270}1271 1272define <vscale x 4 x half> @vpmerge_vv_nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %vb, <vscale x 4 x i1> %m, i32 zeroext %evl) {1273; CHECK-LABEL: vpmerge_vv_nxv4f16:1274; CHECK: # %bb.0:1275; CHECK-NEXT: vsetvli zero, a0, e16, m1, tu, ma1276; CHECK-NEXT: vmerge.vvm v9, v9, v8, v01277; CHECK-NEXT: vmv1r.v v8, v91278; CHECK-NEXT: ret1279 %v = call <vscale x 4 x half> @llvm.vp.merge.nxv4f16(<vscale x 4 x i1> %m, <vscale x 4 x half> %va, <vscale x 4 x half> %vb, i32 %evl)1280 ret <vscale x 4 x half> %v1281}1282 1283define <vscale x 4 x half> @vpmerge_vf_nxv4f16(half %a, <vscale x 4 x half> %vb, <vscale x 4 x i1> %m, i32 zeroext %evl) {1284; RV32ZVFH-LABEL: vpmerge_vf_nxv4f16:1285; RV32ZVFH: # %bb.0:1286; RV32ZVFH-NEXT: vsetvli zero, a0, e16, m1, tu, ma1287; RV32ZVFH-NEXT: vfmerge.vfm v8, v8, fa0, v01288; RV32ZVFH-NEXT: ret1289;1290; RV64ZVFH-LABEL: vpmerge_vf_nxv4f16:1291; RV64ZVFH: # %bb.0:1292; RV64ZVFH-NEXT: vsetvli zero, a0, e16, m1, tu, ma1293; RV64ZVFH-NEXT: vfmerge.vfm v8, v8, fa0, v01294; RV64ZVFH-NEXT: ret1295;1296; RV32ZVFHMIN-LABEL: vpmerge_vf_nxv4f16:1297; RV32ZVFHMIN: # %bb.0:1298; RV32ZVFHMIN-NEXT: fmv.x.h a1, fa01299; RV32ZVFHMIN-NEXT: vsetvli zero, a0, e16, m1, ta, ma1300; RV32ZVFHMIN-NEXT: vmv.v.x v9, a11301; RV32ZVFHMIN-NEXT: vsetvli zero, zero, e16, m1, tu, ma1302; RV32ZVFHMIN-NEXT: vmerge.vvm v8, v8, v9, v01303; RV32ZVFHMIN-NEXT: ret1304;1305; RV64ZVFHMIN-LABEL: vpmerge_vf_nxv4f16:1306; RV64ZVFHMIN: # %bb.0:1307; RV64ZVFHMIN-NEXT: fmv.x.h a1, fa01308; RV64ZVFHMIN-NEXT: vsetvli zero, a0, e16, m1, ta, ma1309; RV64ZVFHMIN-NEXT: vmv.v.x v9, a11310; RV64ZVFHMIN-NEXT: vsetvli zero, zero, e16, m1, tu, ma1311; RV64ZVFHMIN-NEXT: vmerge.vvm v8, v8, v9, v01312; RV64ZVFHMIN-NEXT: ret1313 %elt.head = insertelement <vscale x 4 x half> poison, half %a, i32 01314 %va = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer1315 %v = call <vscale x 4 x half> @llvm.vp.merge.nxv4f16(<vscale x 4 x i1> %m, <vscale x 4 x half> %va, <vscale x 4 x half> %vb, i32 %evl)1316 ret <vscale x 4 x half> %v1317}1318 1319define <vscale x 8 x half> @vpmerge_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb, <vscale x 8 x i1> %m, i32 zeroext %evl) {1320; CHECK-LABEL: vpmerge_vv_nxv8f16:1321; CHECK: # %bb.0:1322; CHECK-NEXT: vsetvli zero, a0, e16, m2, tu, ma1323; CHECK-NEXT: vmerge.vvm v10, v10, v8, v01324; CHECK-NEXT: vmv2r.v v8, v101325; CHECK-NEXT: ret1326 %v = call <vscale x 8 x half> @llvm.vp.merge.nxv8f16(<vscale x 8 x i1> %m, <vscale x 8 x half> %va, <vscale x 8 x half> %vb, i32 %evl)1327 ret <vscale x 8 x half> %v1328}1329 1330define <vscale x 8 x half> @vpmerge_vf_nxv8f16(half %a, <vscale x 8 x half> %vb, <vscale x 8 x i1> %m, i32 zeroext %evl) {1331; RV32ZVFH-LABEL: vpmerge_vf_nxv8f16:1332; RV32ZVFH: # %bb.0:1333; RV32ZVFH-NEXT: vsetvli zero, a0, e16, m2, tu, ma1334; RV32ZVFH-NEXT: vfmerge.vfm v8, v8, fa0, v01335; RV32ZVFH-NEXT: ret1336;1337; RV64ZVFH-LABEL: vpmerge_vf_nxv8f16:1338; RV64ZVFH: # %bb.0:1339; RV64ZVFH-NEXT: vsetvli zero, a0, e16, m2, tu, ma1340; RV64ZVFH-NEXT: vfmerge.vfm v8, v8, fa0, v01341; RV64ZVFH-NEXT: ret1342;1343; RV32ZVFHMIN-LABEL: vpmerge_vf_nxv8f16:1344; RV32ZVFHMIN: # %bb.0:1345; RV32ZVFHMIN-NEXT: fmv.x.h a1, fa01346; RV32ZVFHMIN-NEXT: vsetvli zero, a0, e16, m2, ta, ma1347; RV32ZVFHMIN-NEXT: vmv.v.x v10, a11348; RV32ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, tu, ma1349; RV32ZVFHMIN-NEXT: vmerge.vvm v8, v8, v10, v01350; RV32ZVFHMIN-NEXT: ret1351;1352; RV64ZVFHMIN-LABEL: vpmerge_vf_nxv8f16:1353; RV64ZVFHMIN: # %bb.0:1354; RV64ZVFHMIN-NEXT: fmv.x.h a1, fa01355; RV64ZVFHMIN-NEXT: vsetvli zero, a0, e16, m2, ta, ma1356; RV64ZVFHMIN-NEXT: vmv.v.x v10, a11357; RV64ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, tu, ma1358; RV64ZVFHMIN-NEXT: vmerge.vvm v8, v8, v10, v01359; RV64ZVFHMIN-NEXT: ret1360 %elt.head = insertelement <vscale x 8 x half> poison, half %a, i32 01361 %va = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer1362 %v = call <vscale x 8 x half> @llvm.vp.merge.nxv8f16(<vscale x 8 x i1> %m, <vscale x 8 x half> %va, <vscale x 8 x half> %vb, i32 %evl)1363 ret <vscale x 8 x half> %v1364}1365 1366define <vscale x 16 x half> @vpmerge_vv_nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %vb, <vscale x 16 x i1> %m, i32 zeroext %evl) {1367; CHECK-LABEL: vpmerge_vv_nxv16f16:1368; CHECK: # %bb.0:1369; CHECK-NEXT: vsetvli zero, a0, e16, m4, tu, ma1370; CHECK-NEXT: vmerge.vvm v12, v12, v8, v01371; CHECK-NEXT: vmv4r.v v8, v121372; CHECK-NEXT: ret1373 %v = call <vscale x 16 x half> @llvm.vp.merge.nxv16f16(<vscale x 16 x i1> %m, <vscale x 16 x half> %va, <vscale x 16 x half> %vb, i32 %evl)1374 ret <vscale x 16 x half> %v1375}1376 1377define <vscale x 16 x half> @vpmerge_vf_nxv16f16(half %a, <vscale x 16 x half> %vb, <vscale x 16 x i1> %m, i32 zeroext %evl) {1378; RV32ZVFH-LABEL: vpmerge_vf_nxv16f16:1379; RV32ZVFH: # %bb.0:1380; RV32ZVFH-NEXT: vsetvli zero, a0, e16, m4, tu, ma1381; RV32ZVFH-NEXT: vfmerge.vfm v8, v8, fa0, v01382; RV32ZVFH-NEXT: ret1383;1384; RV64ZVFH-LABEL: vpmerge_vf_nxv16f16:1385; RV64ZVFH: # %bb.0:1386; RV64ZVFH-NEXT: vsetvli zero, a0, e16, m4, tu, ma1387; RV64ZVFH-NEXT: vfmerge.vfm v8, v8, fa0, v01388; RV64ZVFH-NEXT: ret1389;1390; RV32ZVFHMIN-LABEL: vpmerge_vf_nxv16f16:1391; RV32ZVFHMIN: # %bb.0:1392; RV32ZVFHMIN-NEXT: fmv.x.h a1, fa01393; RV32ZVFHMIN-NEXT: vsetvli zero, a0, e16, m4, ta, ma1394; RV32ZVFHMIN-NEXT: vmv.v.x v12, a11395; RV32ZVFHMIN-NEXT: vsetvli zero, zero, e16, m4, tu, ma1396; RV32ZVFHMIN-NEXT: vmerge.vvm v8, v8, v12, v01397; RV32ZVFHMIN-NEXT: ret1398;1399; RV64ZVFHMIN-LABEL: vpmerge_vf_nxv16f16:1400; RV64ZVFHMIN: # %bb.0:1401; RV64ZVFHMIN-NEXT: fmv.x.h a1, fa01402; RV64ZVFHMIN-NEXT: vsetvli zero, a0, e16, m4, ta, ma1403; RV64ZVFHMIN-NEXT: vmv.v.x v12, a11404; RV64ZVFHMIN-NEXT: vsetvli zero, zero, e16, m4, tu, ma1405; RV64ZVFHMIN-NEXT: vmerge.vvm v8, v8, v12, v01406; RV64ZVFHMIN-NEXT: ret1407 %elt.head = insertelement <vscale x 16 x half> poison, half %a, i32 01408 %va = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer1409 %v = call <vscale x 16 x half> @llvm.vp.merge.nxv16f16(<vscale x 16 x i1> %m, <vscale x 16 x half> %va, <vscale x 16 x half> %vb, i32 %evl)1410 ret <vscale x 16 x half> %v1411}1412 1413define <vscale x 32 x half> @vpmerge_vv_nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %vb, <vscale x 32 x i1> %m, i32 zeroext %evl) {1414; CHECK-LABEL: vpmerge_vv_nxv32f16:1415; CHECK: # %bb.0:1416; CHECK-NEXT: vsetvli zero, a0, e16, m8, tu, ma1417; CHECK-NEXT: vmerge.vvm v16, v16, v8, v01418; CHECK-NEXT: vmv8r.v v8, v161419; CHECK-NEXT: ret1420 %v = call <vscale x 32 x half> @llvm.vp.merge.nxv32f16(<vscale x 32 x i1> %m, <vscale x 32 x half> %va, <vscale x 32 x half> %vb, i32 %evl)1421 ret <vscale x 32 x half> %v1422}1423 1424define <vscale x 32 x half> @vpmerge_vf_nxv32f16(half %a, <vscale x 32 x half> %vb, <vscale x 32 x i1> %m, i32 zeroext %evl) {1425; RV32ZVFH-LABEL: vpmerge_vf_nxv32f16:1426; RV32ZVFH: # %bb.0:1427; RV32ZVFH-NEXT: vsetvli zero, a0, e16, m8, tu, ma1428; RV32ZVFH-NEXT: vfmerge.vfm v8, v8, fa0, v01429; RV32ZVFH-NEXT: ret1430;1431; RV64ZVFH-LABEL: vpmerge_vf_nxv32f16:1432; RV64ZVFH: # %bb.0:1433; RV64ZVFH-NEXT: vsetvli zero, a0, e16, m8, tu, ma1434; RV64ZVFH-NEXT: vfmerge.vfm v8, v8, fa0, v01435; RV64ZVFH-NEXT: ret1436;1437; RV32ZVFHMIN-LABEL: vpmerge_vf_nxv32f16:1438; RV32ZVFHMIN: # %bb.0:1439; RV32ZVFHMIN-NEXT: fmv.x.h a1, fa01440; RV32ZVFHMIN-NEXT: vsetvli zero, a0, e16, m8, ta, ma1441; RV32ZVFHMIN-NEXT: vmv.v.x v16, a11442; RV32ZVFHMIN-NEXT: vsetvli zero, zero, e16, m8, tu, ma1443; RV32ZVFHMIN-NEXT: vmerge.vvm v8, v8, v16, v01444; RV32ZVFHMIN-NEXT: ret1445;1446; RV64ZVFHMIN-LABEL: vpmerge_vf_nxv32f16:1447; RV64ZVFHMIN: # %bb.0:1448; RV64ZVFHMIN-NEXT: fmv.x.h a1, fa01449; RV64ZVFHMIN-NEXT: vsetvli zero, a0, e16, m8, ta, ma1450; RV64ZVFHMIN-NEXT: vmv.v.x v16, a11451; RV64ZVFHMIN-NEXT: vsetvli zero, zero, e16, m8, tu, ma1452; RV64ZVFHMIN-NEXT: vmerge.vvm v8, v8, v16, v01453; RV64ZVFHMIN-NEXT: ret1454 %elt.head = insertelement <vscale x 32 x half> poison, half %a, i32 01455 %va = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer1456 %v = call <vscale x 32 x half> @llvm.vp.merge.nxv32f16(<vscale x 32 x i1> %m, <vscale x 32 x half> %va, <vscale x 32 x half> %vb, i32 %evl)1457 ret <vscale x 32 x half> %v1458}1459 1460define <vscale x 1 x float> @vpmerge_vv_nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %vb, <vscale x 1 x i1> %m, i32 zeroext %evl) {1461; CHECK-LABEL: vpmerge_vv_nxv1f32:1462; CHECK: # %bb.0:1463; CHECK-NEXT: vsetvli zero, a0, e32, mf2, tu, ma1464; CHECK-NEXT: vmerge.vvm v9, v9, v8, v01465; CHECK-NEXT: vmv1r.v v8, v91466; CHECK-NEXT: ret1467 %v = call <vscale x 1 x float> @llvm.vp.merge.nxv1f32(<vscale x 1 x i1> %m, <vscale x 1 x float> %va, <vscale x 1 x float> %vb, i32 %evl)1468 ret <vscale x 1 x float> %v1469}1470 1471define <vscale x 1 x float> @vpmerge_vf_nxv1f32(float %a, <vscale x 1 x float> %vb, <vscale x 1 x i1> %m, i32 zeroext %evl) {1472; CHECK-LABEL: vpmerge_vf_nxv1f32:1473; CHECK: # %bb.0:1474; CHECK-NEXT: vsetvli zero, a0, e32, mf2, tu, ma1475; CHECK-NEXT: vfmerge.vfm v8, v8, fa0, v01476; CHECK-NEXT: ret1477 %elt.head = insertelement <vscale x 1 x float> poison, float %a, i32 01478 %va = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer1479 %v = call <vscale x 1 x float> @llvm.vp.merge.nxv1f32(<vscale x 1 x i1> %m, <vscale x 1 x float> %va, <vscale x 1 x float> %vb, i32 %evl)1480 ret <vscale x 1 x float> %v1481}1482 1483define <vscale x 2 x float> @vpmerge_vv_nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %vb, <vscale x 2 x i1> %m, i32 zeroext %evl) {1484; CHECK-LABEL: vpmerge_vv_nxv2f32:1485; CHECK: # %bb.0:1486; CHECK-NEXT: vsetvli zero, a0, e32, m1, tu, ma1487; CHECK-NEXT: vmerge.vvm v9, v9, v8, v01488; CHECK-NEXT: vmv1r.v v8, v91489; CHECK-NEXT: ret1490 %v = call <vscale x 2 x float> @llvm.vp.merge.nxv2f32(<vscale x 2 x i1> %m, <vscale x 2 x float> %va, <vscale x 2 x float> %vb, i32 %evl)1491 ret <vscale x 2 x float> %v1492}1493 1494define <vscale x 2 x float> @vpmerge_vf_nxv2f32(float %a, <vscale x 2 x float> %vb, <vscale x 2 x i1> %m, i32 zeroext %evl) {1495; CHECK-LABEL: vpmerge_vf_nxv2f32:1496; CHECK: # %bb.0:1497; CHECK-NEXT: vsetvli zero, a0, e32, m1, tu, ma1498; CHECK-NEXT: vfmerge.vfm v8, v8, fa0, v01499; CHECK-NEXT: ret1500 %elt.head = insertelement <vscale x 2 x float> poison, float %a, i32 01501 %va = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer1502 %v = call <vscale x 2 x float> @llvm.vp.merge.nxv2f32(<vscale x 2 x i1> %m, <vscale x 2 x float> %va, <vscale x 2 x float> %vb, i32 %evl)1503 ret <vscale x 2 x float> %v1504}1505 1506define <vscale x 4 x float> @vpmerge_vv_nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %vb, <vscale x 4 x i1> %m, i32 zeroext %evl) {1507; CHECK-LABEL: vpmerge_vv_nxv4f32:1508; CHECK: # %bb.0:1509; CHECK-NEXT: vsetvli zero, a0, e32, m2, tu, ma1510; CHECK-NEXT: vmerge.vvm v10, v10, v8, v01511; CHECK-NEXT: vmv2r.v v8, v101512; CHECK-NEXT: ret1513 %v = call <vscale x 4 x float> @llvm.vp.merge.nxv4f32(<vscale x 4 x i1> %m, <vscale x 4 x float> %va, <vscale x 4 x float> %vb, i32 %evl)1514 ret <vscale x 4 x float> %v1515}1516 1517define <vscale x 4 x float> @vpmerge_vf_nxv4f32(float %a, <vscale x 4 x float> %vb, <vscale x 4 x i1> %m, i32 zeroext %evl) {1518; CHECK-LABEL: vpmerge_vf_nxv4f32:1519; CHECK: # %bb.0:1520; CHECK-NEXT: vsetvli zero, a0, e32, m2, tu, ma1521; CHECK-NEXT: vfmerge.vfm v8, v8, fa0, v01522; CHECK-NEXT: ret1523 %elt.head = insertelement <vscale x 4 x float> poison, float %a, i32 01524 %va = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer1525 %v = call <vscale x 4 x float> @llvm.vp.merge.nxv4f32(<vscale x 4 x i1> %m, <vscale x 4 x float> %va, <vscale x 4 x float> %vb, i32 %evl)1526 ret <vscale x 4 x float> %v1527}1528 1529define <vscale x 8 x float> @vpmerge_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb, <vscale x 8 x i1> %m, i32 zeroext %evl) {1530; CHECK-LABEL: vpmerge_vv_nxv8f32:1531; CHECK: # %bb.0:1532; CHECK-NEXT: vsetvli zero, a0, e32, m4, tu, ma1533; CHECK-NEXT: vmerge.vvm v12, v12, v8, v01534; CHECK-NEXT: vmv4r.v v8, v121535; CHECK-NEXT: ret1536 %v = call <vscale x 8 x float> @llvm.vp.merge.nxv8f32(<vscale x 8 x i1> %m, <vscale x 8 x float> %va, <vscale x 8 x float> %vb, i32 %evl)1537 ret <vscale x 8 x float> %v1538}1539 1540define <vscale x 8 x float> @vpmerge_vf_nxv8f32(float %a, <vscale x 8 x float> %vb, <vscale x 8 x i1> %m, i32 zeroext %evl) {1541; CHECK-LABEL: vpmerge_vf_nxv8f32:1542; CHECK: # %bb.0:1543; CHECK-NEXT: vsetvli zero, a0, e32, m4, tu, ma1544; CHECK-NEXT: vfmerge.vfm v8, v8, fa0, v01545; CHECK-NEXT: ret1546 %elt.head = insertelement <vscale x 8 x float> poison, float %a, i32 01547 %va = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer1548 %v = call <vscale x 8 x float> @llvm.vp.merge.nxv8f32(<vscale x 8 x i1> %m, <vscale x 8 x float> %va, <vscale x 8 x float> %vb, i32 %evl)1549 ret <vscale x 8 x float> %v1550}1551 1552define <vscale x 16 x float> @vpmerge_vv_nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %vb, <vscale x 16 x i1> %m, i32 zeroext %evl) {1553; CHECK-LABEL: vpmerge_vv_nxv16f32:1554; CHECK: # %bb.0:1555; CHECK-NEXT: vsetvli zero, a0, e32, m8, tu, ma1556; CHECK-NEXT: vmerge.vvm v16, v16, v8, v01557; CHECK-NEXT: vmv8r.v v8, v161558; CHECK-NEXT: ret1559 %v = call <vscale x 16 x float> @llvm.vp.merge.nxv16f32(<vscale x 16 x i1> %m, <vscale x 16 x float> %va, <vscale x 16 x float> %vb, i32 %evl)1560 ret <vscale x 16 x float> %v1561}1562 1563define <vscale x 16 x float> @vpmerge_vf_nxv16f32(float %a, <vscale x 16 x float> %vb, <vscale x 16 x i1> %m, i32 zeroext %evl) {1564; CHECK-LABEL: vpmerge_vf_nxv16f32:1565; CHECK: # %bb.0:1566; CHECK-NEXT: vsetvli zero, a0, e32, m8, tu, ma1567; CHECK-NEXT: vfmerge.vfm v8, v8, fa0, v01568; CHECK-NEXT: ret1569 %elt.head = insertelement <vscale x 16 x float> poison, float %a, i32 01570 %va = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer1571 %v = call <vscale x 16 x float> @llvm.vp.merge.nxv16f32(<vscale x 16 x i1> %m, <vscale x 16 x float> %va, <vscale x 16 x float> %vb, i32 %evl)1572 ret <vscale x 16 x float> %v1573}1574 1575define <vscale x 1 x double> @vpmerge_vv_nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, <vscale x 1 x i1> %m, i32 zeroext %evl) {1576; CHECK-LABEL: vpmerge_vv_nxv1f64:1577; CHECK: # %bb.0:1578; CHECK-NEXT: vsetvli zero, a0, e64, m1, tu, ma1579; CHECK-NEXT: vmerge.vvm v9, v9, v8, v01580; CHECK-NEXT: vmv1r.v v8, v91581; CHECK-NEXT: ret1582 %v = call <vscale x 1 x double> @llvm.vp.merge.nxv1f64(<vscale x 1 x i1> %m, <vscale x 1 x double> %va, <vscale x 1 x double> %vb, i32 %evl)1583 ret <vscale x 1 x double> %v1584}1585 1586define <vscale x 1 x double> @vpmerge_vf_nxv1f64(double %a, <vscale x 1 x double> %vb, <vscale x 1 x i1> %m, i32 zeroext %evl) {1587; CHECK-LABEL: vpmerge_vf_nxv1f64:1588; CHECK: # %bb.0:1589; CHECK-NEXT: vsetvli zero, a0, e64, m1, tu, ma1590; CHECK-NEXT: vfmerge.vfm v8, v8, fa0, v01591; CHECK-NEXT: ret1592 %elt.head = insertelement <vscale x 1 x double> poison, double %a, i32 01593 %va = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer1594 %v = call <vscale x 1 x double> @llvm.vp.merge.nxv1f64(<vscale x 1 x i1> %m, <vscale x 1 x double> %va, <vscale x 1 x double> %vb, i32 %evl)1595 ret <vscale x 1 x double> %v1596}1597 1598define <vscale x 2 x double> @vpmerge_vv_nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %vb, <vscale x 2 x i1> %m, i32 zeroext %evl) {1599; CHECK-LABEL: vpmerge_vv_nxv2f64:1600; CHECK: # %bb.0:1601; CHECK-NEXT: vsetvli zero, a0, e64, m2, tu, ma1602; CHECK-NEXT: vmerge.vvm v10, v10, v8, v01603; CHECK-NEXT: vmv2r.v v8, v101604; CHECK-NEXT: ret1605 %v = call <vscale x 2 x double> @llvm.vp.merge.nxv2f64(<vscale x 2 x i1> %m, <vscale x 2 x double> %va, <vscale x 2 x double> %vb, i32 %evl)1606 ret <vscale x 2 x double> %v1607}1608 1609define <vscale x 2 x double> @vpmerge_vf_nxv2f64(double %a, <vscale x 2 x double> %vb, <vscale x 2 x i1> %m, i32 zeroext %evl) {1610; CHECK-LABEL: vpmerge_vf_nxv2f64:1611; CHECK: # %bb.0:1612; CHECK-NEXT: vsetvli zero, a0, e64, m2, tu, ma1613; CHECK-NEXT: vfmerge.vfm v8, v8, fa0, v01614; CHECK-NEXT: ret1615 %elt.head = insertelement <vscale x 2 x double> poison, double %a, i32 01616 %va = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer1617 %v = call <vscale x 2 x double> @llvm.vp.merge.nxv2f64(<vscale x 2 x i1> %m, <vscale x 2 x double> %va, <vscale x 2 x double> %vb, i32 %evl)1618 ret <vscale x 2 x double> %v1619}1620 1621define <vscale x 4 x double> @vpmerge_vv_nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %vb, <vscale x 4 x i1> %m, i32 zeroext %evl) {1622; CHECK-LABEL: vpmerge_vv_nxv4f64:1623; CHECK: # %bb.0:1624; CHECK-NEXT: vsetvli zero, a0, e64, m4, tu, ma1625; CHECK-NEXT: vmerge.vvm v12, v12, v8, v01626; CHECK-NEXT: vmv4r.v v8, v121627; CHECK-NEXT: ret1628 %v = call <vscale x 4 x double> @llvm.vp.merge.nxv4f64(<vscale x 4 x i1> %m, <vscale x 4 x double> %va, <vscale x 4 x double> %vb, i32 %evl)1629 ret <vscale x 4 x double> %v1630}1631 1632define <vscale x 4 x double> @vpmerge_vf_nxv4f64(double %a, <vscale x 4 x double> %vb, <vscale x 4 x i1> %m, i32 zeroext %evl) {1633; CHECK-LABEL: vpmerge_vf_nxv4f64:1634; CHECK: # %bb.0:1635; CHECK-NEXT: vsetvli zero, a0, e64, m4, tu, ma1636; CHECK-NEXT: vfmerge.vfm v8, v8, fa0, v01637; CHECK-NEXT: ret1638 %elt.head = insertelement <vscale x 4 x double> poison, double %a, i32 01639 %va = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer1640 %v = call <vscale x 4 x double> @llvm.vp.merge.nxv4f64(<vscale x 4 x i1> %m, <vscale x 4 x double> %va, <vscale x 4 x double> %vb, i32 %evl)1641 ret <vscale x 4 x double> %v1642}1643 1644define <vscale x 8 x double> @vpmerge_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb, <vscale x 8 x i1> %m, i32 zeroext %evl) {1645; CHECK-LABEL: vpmerge_vv_nxv8f64:1646; CHECK: # %bb.0:1647; CHECK-NEXT: vsetvli zero, a0, e64, m8, tu, ma1648; CHECK-NEXT: vmerge.vvm v16, v16, v8, v01649; CHECK-NEXT: vmv8r.v v8, v161650; CHECK-NEXT: ret1651 %v = call <vscale x 8 x double> @llvm.vp.merge.nxv8f64(<vscale x 8 x i1> %m, <vscale x 8 x double> %va, <vscale x 8 x double> %vb, i32 %evl)1652 ret <vscale x 8 x double> %v1653}1654 1655define <vscale x 8 x double> @vpmerge_vf_nxv8f64(double %a, <vscale x 8 x double> %vb, <vscale x 8 x i1> %m, i32 zeroext %evl) {1656; CHECK-LABEL: vpmerge_vf_nxv8f64:1657; CHECK: # %bb.0:1658; CHECK-NEXT: vsetvli zero, a0, e64, m8, tu, ma1659; CHECK-NEXT: vfmerge.vfm v8, v8, fa0, v01660; CHECK-NEXT: ret1661 %elt.head = insertelement <vscale x 8 x double> poison, double %a, i32 01662 %va = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer1663 %v = call <vscale x 8 x double> @llvm.vp.merge.nxv8f64(<vscale x 8 x i1> %m, <vscale x 8 x double> %va, <vscale x 8 x double> %vb, i32 %evl)1664 ret <vscale x 8 x double> %v1665}1666