brintos

brintos / llvm-project-archived public Read only

0
0
Text · 75.3 KiB · 03697aa Raw
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