brintos

brintos / llvm-project-archived public Read only

0
0
Text · 52.8 KiB · 7968c51 Raw
1356 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,ZVFH,RV324; RUN: llc -mtriple=riscv64 -mattr=+d,+zfh,+zvfh,+v,+m -target-abi=lp64d \5; RUN:   -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,ZVFH,RV646; RUN: llc -mtriple=riscv32 -mattr=+d,+zfh,+zvfhmin,+v,+m -target-abi=ilp32d \7; RUN:   -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,ZVFHMIN,RV32ZVFHMIN8; RUN: llc -mtriple=riscv64 -mattr=+d,+zfh,+zvfhmin,+v,+m -target-abi=lp64d \9; RUN:   -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,ZVFHMIN,RV64ZVFHMIN10 11define <4 x i1> @vpmerge_vv_v4i1(<4 x i1> %va, <4 x i1> %vb, <4 x i1> %m, i32 zeroext %evl) {12; RV32-LABEL: vpmerge_vv_v4i1:13; RV32:       # %bb.0:14; RV32-NEXT:    vsetivli zero, 4, e32, m1, 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_vv_v4i1:24; RV64:       # %bb.0:25; RV64-NEXT:    vsetivli zero, 4, e64, m2, ta, ma26; RV64-NEXT:    vid.v v1027; RV64-NEXT:    vmsltu.vx v12, v10, a028; RV64-NEXT:    vmand.mm v9, v9, v1229; RV64-NEXT:    vmandn.mm v8, v8, v930; RV64-NEXT:    vmand.mm v9, v0, v931; RV64-NEXT:    vmor.mm v0, v9, v832; RV64-NEXT:    ret33;34; RV32ZVFHMIN-LABEL: vpmerge_vv_v4i1:35; RV32ZVFHMIN:       # %bb.0:36; RV32ZVFHMIN-NEXT:    vsetivli zero, 4, e32, m1, ta, ma37; RV32ZVFHMIN-NEXT:    vid.v v1038; RV32ZVFHMIN-NEXT:    vmsltu.vx v10, v10, a039; RV32ZVFHMIN-NEXT:    vmand.mm v9, v9, v1040; RV32ZVFHMIN-NEXT:    vmandn.mm v8, v8, v941; RV32ZVFHMIN-NEXT:    vmand.mm v9, v0, v942; RV32ZVFHMIN-NEXT:    vmor.mm v0, v9, v843; RV32ZVFHMIN-NEXT:    ret44;45; RV64ZVFHMIN-LABEL: vpmerge_vv_v4i1:46; RV64ZVFHMIN:       # %bb.0:47; RV64ZVFHMIN-NEXT:    vsetivli zero, 4, e64, m2, ta, ma48; RV64ZVFHMIN-NEXT:    vid.v v1049; RV64ZVFHMIN-NEXT:    vmsltu.vx v12, v10, a050; RV64ZVFHMIN-NEXT:    vmand.mm v9, v9, v1251; RV64ZVFHMIN-NEXT:    vmandn.mm v8, v8, v952; RV64ZVFHMIN-NEXT:    vmand.mm v9, v0, v953; RV64ZVFHMIN-NEXT:    vmor.mm v0, v9, v854; RV64ZVFHMIN-NEXT:    ret55  %v = call <4 x i1> @llvm.vp.merge.v4i1(<4 x i1> %m, <4 x i1> %va, <4 x i1> %vb, i32 %evl)56  ret <4 x i1> %v57}58 59define <8 x i1> @vpmerge_vv_v8i1(<8 x i1> %va, <8 x i1> %vb, <8 x i1> %m, i32 zeroext %evl) {60; RV32-LABEL: vpmerge_vv_v8i1:61; RV32:       # %bb.0:62; RV32-NEXT:    vsetivli zero, 8, e32, m2, ta, ma63; RV32-NEXT:    vid.v v1064; RV32-NEXT:    vmsltu.vx v12, v10, a065; RV32-NEXT:    vmand.mm v9, v9, v1266; RV32-NEXT:    vmandn.mm v8, v8, v967; RV32-NEXT:    vmand.mm v9, v0, v968; RV32-NEXT:    vmor.mm v0, v9, v869; RV32-NEXT:    ret70;71; RV64-LABEL: vpmerge_vv_v8i1:72; RV64:       # %bb.0:73; RV64-NEXT:    vsetivli zero, 8, e64, m4, ta, ma74; RV64-NEXT:    vid.v v1275; RV64-NEXT:    vmsltu.vx v10, v12, a076; RV64-NEXT:    vmand.mm v9, v9, v1077; RV64-NEXT:    vmandn.mm v8, v8, v978; RV64-NEXT:    vmand.mm v9, v0, v979; RV64-NEXT:    vmor.mm v0, v9, v880; RV64-NEXT:    ret81;82; RV32ZVFHMIN-LABEL: vpmerge_vv_v8i1:83; RV32ZVFHMIN:       # %bb.0:84; RV32ZVFHMIN-NEXT:    vsetivli zero, 8, e32, m2, ta, ma85; RV32ZVFHMIN-NEXT:    vid.v v1086; RV32ZVFHMIN-NEXT:    vmsltu.vx v12, v10, a087; RV32ZVFHMIN-NEXT:    vmand.mm v9, v9, v1288; RV32ZVFHMIN-NEXT:    vmandn.mm v8, v8, v989; RV32ZVFHMIN-NEXT:    vmand.mm v9, v0, v990; RV32ZVFHMIN-NEXT:    vmor.mm v0, v9, v891; RV32ZVFHMIN-NEXT:    ret92;93; RV64ZVFHMIN-LABEL: vpmerge_vv_v8i1:94; RV64ZVFHMIN:       # %bb.0:95; RV64ZVFHMIN-NEXT:    vsetivli zero, 8, e64, m4, ta, ma96; RV64ZVFHMIN-NEXT:    vid.v v1297; RV64ZVFHMIN-NEXT:    vmsltu.vx v10, v12, a098; RV64ZVFHMIN-NEXT:    vmand.mm v9, v9, v1099; RV64ZVFHMIN-NEXT:    vmandn.mm v8, v8, v9100; RV64ZVFHMIN-NEXT:    vmand.mm v9, v0, v9101; RV64ZVFHMIN-NEXT:    vmor.mm v0, v9, v8102; RV64ZVFHMIN-NEXT:    ret103  %v = call <8 x i1> @llvm.vp.merge.v8i1(<8 x i1> %m, <8 x i1> %va, <8 x i1> %vb, i32 %evl)104  ret <8 x i1> %v105}106 107define <16 x i1> @vpmerge_vv_v16i1(<16 x i1> %va, <16 x i1> %vb, <16 x i1> %m, i32 zeroext %evl) {108; RV32-LABEL: vpmerge_vv_v16i1:109; RV32:       # %bb.0:110; RV32-NEXT:    vsetivli zero, 16, e32, m4, ta, ma111; RV32-NEXT:    vid.v v12112; RV32-NEXT:    vmsltu.vx v10, v12, a0113; RV32-NEXT:    vmand.mm v9, v9, v10114; RV32-NEXT:    vmandn.mm v8, v8, v9115; RV32-NEXT:    vmand.mm v9, v0, v9116; RV32-NEXT:    vmor.mm v0, v9, v8117; RV32-NEXT:    ret118;119; RV64-LABEL: vpmerge_vv_v16i1:120; RV64:       # %bb.0:121; RV64-NEXT:    vsetivli zero, 16, e64, m8, ta, ma122; RV64-NEXT:    vid.v v16123; RV64-NEXT:    vmsltu.vx v10, v16, a0124; RV64-NEXT:    vmand.mm v9, v9, v10125; RV64-NEXT:    vmandn.mm v8, v8, v9126; RV64-NEXT:    vmand.mm v9, v0, v9127; RV64-NEXT:    vmor.mm v0, v9, v8128; RV64-NEXT:    ret129;130; RV32ZVFHMIN-LABEL: vpmerge_vv_v16i1:131; RV32ZVFHMIN:       # %bb.0:132; RV32ZVFHMIN-NEXT:    vsetivli zero, 16, e32, m4, ta, ma133; RV32ZVFHMIN-NEXT:    vid.v v12134; RV32ZVFHMIN-NEXT:    vmsltu.vx v10, v12, a0135; RV32ZVFHMIN-NEXT:    vmand.mm v9, v9, v10136; RV32ZVFHMIN-NEXT:    vmandn.mm v8, v8, v9137; RV32ZVFHMIN-NEXT:    vmand.mm v9, v0, v9138; RV32ZVFHMIN-NEXT:    vmor.mm v0, v9, v8139; RV32ZVFHMIN-NEXT:    ret140;141; RV64ZVFHMIN-LABEL: vpmerge_vv_v16i1:142; RV64ZVFHMIN:       # %bb.0:143; RV64ZVFHMIN-NEXT:    vsetivli zero, 16, e64, m8, ta, ma144; RV64ZVFHMIN-NEXT:    vid.v v16145; RV64ZVFHMIN-NEXT:    vmsltu.vx v10, v16, a0146; RV64ZVFHMIN-NEXT:    vmand.mm v9, v9, v10147; RV64ZVFHMIN-NEXT:    vmandn.mm v8, v8, v9148; RV64ZVFHMIN-NEXT:    vmand.mm v9, v0, v9149; RV64ZVFHMIN-NEXT:    vmor.mm v0, v9, v8150; RV64ZVFHMIN-NEXT:    ret151  %v = call <16 x i1> @llvm.vp.merge.v16i1(<16 x i1> %m, <16 x i1> %va, <16 x i1> %vb, i32 %evl)152  ret <16 x i1> %v153}154 155define <32 x i1> @vpmerge_vv_v32i1(<32 x i1> %va, <32 x i1> %vb, <32 x i1> %m, i32 zeroext %evl) {156; RV32-LABEL: vpmerge_vv_v32i1:157; RV32:       # %bb.0:158; RV32-NEXT:    li a1, 32159; RV32-NEXT:    vsetvli zero, a1, e32, m8, ta, ma160; RV32-NEXT:    vid.v v16161; RV32-NEXT:    vmsltu.vx v10, v16, a0162; RV32-NEXT:    vmand.mm v9, v9, v10163; RV32-NEXT:    vmandn.mm v8, v8, v9164; RV32-NEXT:    vmand.mm v9, v0, v9165; RV32-NEXT:    vmor.mm v0, v9, v8166; RV32-NEXT:    ret167;168; RV64-LABEL: vpmerge_vv_v32i1:169; RV64:       # %bb.0:170; RV64-NEXT:    vsetvli a1, zero, e8, m2, ta, ma171; RV64-NEXT:    vmv.v.i v10, 0172; RV64-NEXT:    vsetvli zero, a0, e8, m2, ta, ma173; RV64-NEXT:    vmerge.vim v12, v10, 1, v0174; RV64-NEXT:    vmv1r.v v0, v8175; RV64-NEXT:    vsetvli a1, zero, e8, m2, ta, ma176; RV64-NEXT:    vmerge.vim v10, v10, 1, v0177; RV64-NEXT:    vmv1r.v v0, v9178; RV64-NEXT:    vsetvli zero, a0, e8, m2, tu, ma179; RV64-NEXT:    vmerge.vvm v10, v10, v12, v0180; RV64-NEXT:    vsetvli a0, zero, e8, m2, ta, ma181; RV64-NEXT:    vmsne.vi v0, v10, 0182; RV64-NEXT:    ret183;184; RV32ZVFHMIN-LABEL: vpmerge_vv_v32i1:185; RV32ZVFHMIN:       # %bb.0:186; RV32ZVFHMIN-NEXT:    li a1, 32187; RV32ZVFHMIN-NEXT:    vsetvli zero, a1, e32, m8, ta, ma188; RV32ZVFHMIN-NEXT:    vid.v v16189; RV32ZVFHMIN-NEXT:    vmsltu.vx v10, v16, a0190; RV32ZVFHMIN-NEXT:    vmand.mm v9, v9, v10191; RV32ZVFHMIN-NEXT:    vmandn.mm v8, v8, v9192; RV32ZVFHMIN-NEXT:    vmand.mm v9, v0, v9193; RV32ZVFHMIN-NEXT:    vmor.mm v0, v9, v8194; RV32ZVFHMIN-NEXT:    ret195;196; RV64ZVFHMIN-LABEL: vpmerge_vv_v32i1:197; RV64ZVFHMIN:       # %bb.0:198; RV64ZVFHMIN-NEXT:    vsetvli a1, zero, e8, m2, ta, ma199; RV64ZVFHMIN-NEXT:    vmv.v.i v10, 0200; RV64ZVFHMIN-NEXT:    vsetvli zero, a0, e8, m2, ta, ma201; RV64ZVFHMIN-NEXT:    vmerge.vim v12, v10, 1, v0202; RV64ZVFHMIN-NEXT:    vmv1r.v v0, v8203; RV64ZVFHMIN-NEXT:    vsetvli a1, zero, e8, m2, ta, ma204; RV64ZVFHMIN-NEXT:    vmerge.vim v10, v10, 1, v0205; RV64ZVFHMIN-NEXT:    vmv1r.v v0, v9206; RV64ZVFHMIN-NEXT:    vsetvli zero, a0, e8, m2, tu, ma207; RV64ZVFHMIN-NEXT:    vmerge.vvm v10, v10, v12, v0208; RV64ZVFHMIN-NEXT:    vsetvli a0, zero, e8, m2, ta, ma209; RV64ZVFHMIN-NEXT:    vmsne.vi v0, v10, 0210; RV64ZVFHMIN-NEXT:    ret211  %v = call <32 x i1> @llvm.vp.merge.v32i1(<32 x i1> %m, <32 x i1> %va, <32 x i1> %vb, i32 %evl)212  ret <32 x i1> %v213}214 215define <64 x i1> @vpmerge_vv_v64i1(<64 x i1> %va, <64 x i1> %vb, <64 x i1> %m, i32 zeroext %evl) {216; CHECK-LABEL: vpmerge_vv_v64i1:217; CHECK:       # %bb.0:218; CHECK-NEXT:    vsetvli a1, zero, e8, m4, ta, ma219; CHECK-NEXT:    vmv.v.i v12, 0220; CHECK-NEXT:    vsetvli zero, a0, e8, m4, ta, ma221; CHECK-NEXT:    vmerge.vim v16, v12, 1, v0222; CHECK-NEXT:    vmv1r.v v0, v8223; CHECK-NEXT:    vsetvli a1, zero, e8, m4, ta, ma224; CHECK-NEXT:    vmerge.vim v12, v12, 1, v0225; CHECK-NEXT:    vmv1r.v v0, v9226; CHECK-NEXT:    vsetvli zero, a0, e8, m4, tu, ma227; CHECK-NEXT:    vmerge.vvm v12, v12, v16, v0228; CHECK-NEXT:    vsetvli a0, zero, e8, m4, ta, ma229; CHECK-NEXT:    vmsne.vi v0, v12, 0230; CHECK-NEXT:    ret231  %v = call <64 x i1> @llvm.vp.merge.v64i1(<64 x i1> %m, <64 x i1> %va, <64 x i1> %vb, i32 %evl)232  ret <64 x i1> %v233}234 235define <2 x i8> @vpmerge_vv_v2i8(<2 x i8> %va, <2 x i8> %vb, <2 x i1> %m, i32 zeroext %evl) {236; CHECK-LABEL: vpmerge_vv_v2i8:237; CHECK:       # %bb.0:238; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, tu, ma239; CHECK-NEXT:    vmerge.vvm v9, v9, v8, v0240; CHECK-NEXT:    vmv1r.v v8, v9241; CHECK-NEXT:    ret242  %v = call <2 x i8> @llvm.vp.merge.v2i8(<2 x i1> %m, <2 x i8> %va, <2 x i8> %vb, i32 %evl)243  ret <2 x i8> %v244}245 246define <2 x i8> @vpmerge_vx_v2i8(i8 %a, <2 x i8> %vb, <2 x i1> %m, i32 zeroext %evl) {247; CHECK-LABEL: vpmerge_vx_v2i8:248; CHECK:       # %bb.0:249; CHECK-NEXT:    vsetvli zero, a1, e8, mf8, tu, ma250; CHECK-NEXT:    vmerge.vxm v8, v8, a0, v0251; CHECK-NEXT:    ret252  %elt.head = insertelement <2 x i8> poison, i8 %a, i32 0253  %va = shufflevector <2 x i8> %elt.head, <2 x i8> poison, <2 x i32> zeroinitializer254  %v = call <2 x i8> @llvm.vp.merge.v2i8(<2 x i1> %m, <2 x i8> %va, <2 x i8> %vb, i32 %evl)255  ret <2 x i8> %v256}257 258define <2 x i8> @vpmerge_vi_v2i8(<2 x i8> %vb, <2 x i1> %m, i32 zeroext %evl) {259; CHECK-LABEL: vpmerge_vi_v2i8:260; CHECK:       # %bb.0:261; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, tu, ma262; CHECK-NEXT:    vmerge.vim v8, v8, 2, v0263; CHECK-NEXT:    ret264  %v = call <2 x i8> @llvm.vp.merge.v2i8(<2 x i1> %m, <2 x i8> splat (i8 2), <2 x i8> %vb, i32 %evl)265  ret <2 x i8> %v266}267 268define <4 x i8> @vpmerge_vv_v4i8(<4 x i8> %va, <4 x i8> %vb, <4 x i1> %m, i32 zeroext %evl) {269; CHECK-LABEL: vpmerge_vv_v4i8:270; CHECK:       # %bb.0:271; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, tu, ma272; CHECK-NEXT:    vmerge.vvm v9, v9, v8, v0273; CHECK-NEXT:    vmv1r.v v8, v9274; CHECK-NEXT:    ret275  %v = call <4 x i8> @llvm.vp.merge.v4i8(<4 x i1> %m, <4 x i8> %va, <4 x i8> %vb, i32 %evl)276  ret <4 x i8> %v277}278 279define <4 x i8> @vpmerge_vx_v4i8(i8 %a, <4 x i8> %vb, <4 x i1> %m, i32 zeroext %evl) {280; CHECK-LABEL: vpmerge_vx_v4i8:281; CHECK:       # %bb.0:282; CHECK-NEXT:    vsetvli zero, a1, e8, mf4, tu, ma283; CHECK-NEXT:    vmerge.vxm v8, v8, a0, v0284; CHECK-NEXT:    ret285  %elt.head = insertelement <4 x i8> poison, i8 %a, i32 0286  %va = shufflevector <4 x i8> %elt.head, <4 x i8> poison, <4 x i32> zeroinitializer287  %v = call <4 x i8> @llvm.vp.merge.v4i8(<4 x i1> %m, <4 x i8> %va, <4 x i8> %vb, i32 %evl)288  ret <4 x i8> %v289}290 291define <4 x i8> @vpmerge_vi_v4i8(<4 x i8> %vb, <4 x i1> %m, i32 zeroext %evl) {292; CHECK-LABEL: vpmerge_vi_v4i8:293; CHECK:       # %bb.0:294; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, tu, ma295; CHECK-NEXT:    vmerge.vim v8, v8, 2, v0296; CHECK-NEXT:    ret297  %v = call <4 x i8> @llvm.vp.merge.v4i8(<4 x i1> %m, <4 x i8> splat (i8 2), <4 x i8> %vb, i32 %evl)298  ret <4 x i8> %v299}300 301define <6 x i8> @vpmerge_vv_v6i8(<6 x i8> %va, <6 x i8> %vb, <6 x i1> %m, i32 zeroext %evl) {302; CHECK-LABEL: vpmerge_vv_v6i8:303; CHECK:       # %bb.0:304; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, tu, ma305; CHECK-NEXT:    vmerge.vvm v9, v9, v8, v0306; CHECK-NEXT:    vmv1r.v v8, v9307; CHECK-NEXT:    ret308  %v = call <6 x i8> @llvm.vp.merge.v6i8(<6 x i1> %m, <6 x i8> %va, <6 x i8> %vb, i32 %evl)309  ret <6 x i8> %v310}311 312define <6 x i8> @vpmerge_vx_v6i8(i8 %a, <6 x i8> %vb, <6 x i1> %m, i32 zeroext %evl) {313; CHECK-LABEL: vpmerge_vx_v6i8:314; CHECK:       # %bb.0:315; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, tu, ma316; CHECK-NEXT:    vmerge.vxm v8, v8, a0, v0317; CHECK-NEXT:    ret318  %elt.head = insertelement <6 x i8> poison, i8 %a, i32 0319  %va = shufflevector <6 x i8> %elt.head, <6 x i8> poison, <6 x i32> zeroinitializer320  %v = call <6 x i8> @llvm.vp.merge.v6i8(<6 x i1> %m, <6 x i8> %va, <6 x i8> %vb, i32 %evl)321  ret <6 x i8> %v322}323 324define <6 x i8> @vpmerge_vi_v6i8(<6 x i8> %vb, <6 x i1> %m, i32 zeroext %evl) {325; CHECK-LABEL: vpmerge_vi_v6i8:326; CHECK:       # %bb.0:327; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, tu, ma328; CHECK-NEXT:    vmerge.vim v8, v8, 2, v0329; CHECK-NEXT:    ret330  %v = call <6 x i8> @llvm.vp.merge.v6i8(<6 x i1> %m, <6 x i8> splat (i8 2), <6 x i8> %vb, i32 %evl)331  ret <6 x i8> %v332}333 334define <8 x i7> @vpmerge_vv_v8i7(<8 x i7> %va, <8 x i7> %vb, <8 x i1> %m, i32 zeroext %evl) {335; CHECK-LABEL: vpmerge_vv_v8i7:336; CHECK:       # %bb.0:337; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, tu, ma338; CHECK-NEXT:    vmerge.vvm v9, v9, v8, v0339; CHECK-NEXT:    vmv1r.v v8, v9340; CHECK-NEXT:    ret341  %v = call <8 x i7> @llvm.vp.merge.v8i7(<8 x i1> %m, <8 x i7> %va, <8 x i7> %vb, i32 %evl)342  ret <8 x i7> %v343}344 345define <8 x i7> @vpmerge_vx_v8i7(i7 %a, <8 x i7> %vb, <8 x i1> %m, i32 zeroext %evl) {346; CHECK-LABEL: vpmerge_vx_v8i7:347; CHECK:       # %bb.0:348; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, tu, ma349; CHECK-NEXT:    vmerge.vxm v8, v8, a0, v0350; CHECK-NEXT:    ret351  %elt.head = insertelement <8 x i7> poison, i7 %a, i32 0352  %va = shufflevector <8 x i7> %elt.head, <8 x i7> poison, <8 x i32> zeroinitializer353  %v = call <8 x i7> @llvm.vp.merge.v8i7(<8 x i1> %m, <8 x i7> %va, <8 x i7> %vb, i32 %evl)354  ret <8 x i7> %v355}356 357define <8 x i7> @vpmerge_vi_v8i7(<8 x i7> %vb, <8 x i1> %m, i32 zeroext %evl) {358; CHECK-LABEL: vpmerge_vi_v8i7:359; CHECK:       # %bb.0:360; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, tu, ma361; CHECK-NEXT:    vmerge.vim v8, v8, 2, v0362; CHECK-NEXT:    ret363  %v = call <8 x i7> @llvm.vp.merge.v8i7(<8 x i1> %m, <8 x i7> splat (i7 2), <8 x i7> %vb, i32 %evl)364  ret <8 x i7> %v365}366 367define <8 x i8> @vpmerge_vv_v8i8(<8 x i8> %va, <8 x i8> %vb, <8 x i1> %m, i32 zeroext %evl) {368; CHECK-LABEL: vpmerge_vv_v8i8:369; CHECK:       # %bb.0:370; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, tu, ma371; CHECK-NEXT:    vmerge.vvm v9, v9, v8, v0372; CHECK-NEXT:    vmv1r.v v8, v9373; CHECK-NEXT:    ret374  %v = call <8 x i8> @llvm.vp.merge.v8i8(<8 x i1> %m, <8 x i8> %va, <8 x i8> %vb, i32 %evl)375  ret <8 x i8> %v376}377 378define <8 x i8> @vpmerge_vx_v8i8(i8 %a, <8 x i8> %vb, <8 x i1> %m, i32 zeroext %evl) {379; CHECK-LABEL: vpmerge_vx_v8i8:380; CHECK:       # %bb.0:381; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, tu, ma382; CHECK-NEXT:    vmerge.vxm v8, v8, a0, v0383; CHECK-NEXT:    ret384  %elt.head = insertelement <8 x i8> poison, i8 %a, i32 0385  %va = shufflevector <8 x i8> %elt.head, <8 x i8> poison, <8 x i32> zeroinitializer386  %v = call <8 x i8> @llvm.vp.merge.v8i8(<8 x i1> %m, <8 x i8> %va, <8 x i8> %vb, i32 %evl)387  ret <8 x i8> %v388}389 390define <8 x i8> @vpmerge_vi_v8i8(<8 x i8> %vb, <8 x i1> %m, i32 zeroext %evl) {391; CHECK-LABEL: vpmerge_vi_v8i8:392; CHECK:       # %bb.0:393; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, tu, ma394; CHECK-NEXT:    vmerge.vim v8, v8, 2, v0395; CHECK-NEXT:    ret396  %v = call <8 x i8> @llvm.vp.merge.v8i8(<8 x i1> %m, <8 x i8> splat (i8 2), <8 x i8> %vb, i32 %evl)397  ret <8 x i8> %v398}399 400define <16 x i8> @vpmerge_vv_v16i8(<16 x i8> %va, <16 x i8> %vb, <16 x i1> %m, i32 zeroext %evl) {401; CHECK-LABEL: vpmerge_vv_v16i8:402; CHECK:       # %bb.0:403; CHECK-NEXT:    vsetvli zero, a0, e8, m1, tu, ma404; CHECK-NEXT:    vmerge.vvm v9, v9, v8, v0405; CHECK-NEXT:    vmv1r.v v8, v9406; CHECK-NEXT:    ret407  %v = call <16 x i8> @llvm.vp.merge.v16i8(<16 x i1> %m, <16 x i8> %va, <16 x i8> %vb, i32 %evl)408  ret <16 x i8> %v409}410 411define <16 x i8> @vpmerge_vx_v16i8(i8 %a, <16 x i8> %vb, <16 x i1> %m, i32 zeroext %evl) {412; CHECK-LABEL: vpmerge_vx_v16i8:413; CHECK:       # %bb.0:414; CHECK-NEXT:    vsetvli zero, a1, e8, m1, tu, ma415; CHECK-NEXT:    vmerge.vxm v8, v8, a0, v0416; CHECK-NEXT:    ret417  %elt.head = insertelement <16 x i8> poison, i8 %a, i32 0418  %va = shufflevector <16 x i8> %elt.head, <16 x i8> poison, <16 x i32> zeroinitializer419  %v = call <16 x i8> @llvm.vp.merge.v16i8(<16 x i1> %m, <16 x i8> %va, <16 x i8> %vb, i32 %evl)420  ret <16 x i8> %v421}422 423define <16 x i8> @vpmerge_vi_v16i8(<16 x i8> %vb, <16 x i1> %m, i32 zeroext %evl) {424; CHECK-LABEL: vpmerge_vi_v16i8:425; CHECK:       # %bb.0:426; CHECK-NEXT:    vsetvli zero, a0, e8, m1, tu, ma427; CHECK-NEXT:    vmerge.vim v8, v8, 2, v0428; CHECK-NEXT:    ret429  %v = call <16 x i8> @llvm.vp.merge.v16i8(<16 x i1> %m, <16 x i8> splat (i8 2), <16 x i8> %vb, i32 %evl)430  ret <16 x i8> %v431}432 433define <2 x i16> @vpmerge_vv_v2i16(<2 x i16> %va, <2 x i16> %vb, <2 x i1> %m, i32 zeroext %evl) {434; CHECK-LABEL: vpmerge_vv_v2i16:435; CHECK:       # %bb.0:436; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, tu, ma437; CHECK-NEXT:    vmerge.vvm v9, v9, v8, v0438; CHECK-NEXT:    vmv1r.v v8, v9439; CHECK-NEXT:    ret440  %v = call <2 x i16> @llvm.vp.merge.v2i16(<2 x i1> %m, <2 x i16> %va, <2 x i16> %vb, i32 %evl)441  ret <2 x i16> %v442}443 444define <2 x i16> @vpmerge_vx_v2i16(i16 %a, <2 x i16> %vb, <2 x i1> %m, i32 zeroext %evl) {445; CHECK-LABEL: vpmerge_vx_v2i16:446; CHECK:       # %bb.0:447; CHECK-NEXT:    vsetvli zero, a1, e16, mf4, tu, ma448; CHECK-NEXT:    vmerge.vxm v8, v8, a0, v0449; CHECK-NEXT:    ret450  %elt.head = insertelement <2 x i16> poison, i16 %a, i32 0451  %va = shufflevector <2 x i16> %elt.head, <2 x i16> poison, <2 x i32> zeroinitializer452  %v = call <2 x i16> @llvm.vp.merge.v2i16(<2 x i1> %m, <2 x i16> %va, <2 x i16> %vb, i32 %evl)453  ret <2 x i16> %v454}455 456define <2 x i16> @vpmerge_vi_v2i16(<2 x i16> %vb, <2 x i1> %m, i32 zeroext %evl) {457; CHECK-LABEL: vpmerge_vi_v2i16:458; CHECK:       # %bb.0:459; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, tu, ma460; CHECK-NEXT:    vmerge.vim v8, v8, 2, v0461; CHECK-NEXT:    ret462  %v = call <2 x i16> @llvm.vp.merge.v2i16(<2 x i1> %m, <2 x i16> splat (i16 2), <2 x i16> %vb, i32 %evl)463  ret <2 x i16> %v464}465 466define <4 x i16> @vpmerge_vv_v4i16(<4 x i16> %va, <4 x i16> %vb, <4 x i1> %m, i32 zeroext %evl) {467; CHECK-LABEL: vpmerge_vv_v4i16:468; CHECK:       # %bb.0:469; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, tu, ma470; CHECK-NEXT:    vmerge.vvm v9, v9, v8, v0471; CHECK-NEXT:    vmv1r.v v8, v9472; CHECK-NEXT:    ret473  %v = call <4 x i16> @llvm.vp.merge.v4i16(<4 x i1> %m, <4 x i16> %va, <4 x i16> %vb, i32 %evl)474  ret <4 x i16> %v475}476 477define <4 x i16> @vpmerge_vx_v4i16(i16 %a, <4 x i16> %vb, <4 x i1> %m, i32 zeroext %evl) {478; CHECK-LABEL: vpmerge_vx_v4i16:479; CHECK:       # %bb.0:480; CHECK-NEXT:    vsetvli zero, a1, e16, mf2, tu, ma481; CHECK-NEXT:    vmerge.vxm v8, v8, a0, v0482; CHECK-NEXT:    ret483  %elt.head = insertelement <4 x i16> poison, i16 %a, i32 0484  %va = shufflevector <4 x i16> %elt.head, <4 x i16> poison, <4 x i32> zeroinitializer485  %v = call <4 x i16> @llvm.vp.merge.v4i16(<4 x i1> %m, <4 x i16> %va, <4 x i16> %vb, i32 %evl)486  ret <4 x i16> %v487}488 489define <4 x i16> @vpmerge_vi_v4i16(<4 x i16> %vb, <4 x i1> %m, i32 zeroext %evl) {490; CHECK-LABEL: vpmerge_vi_v4i16:491; CHECK:       # %bb.0:492; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, tu, ma493; CHECK-NEXT:    vmerge.vim v8, v8, 2, v0494; CHECK-NEXT:    ret495  %v = call <4 x i16> @llvm.vp.merge.v4i16(<4 x i1> %m, <4 x i16> splat (i16 2), <4 x i16> %vb, i32 %evl)496  ret <4 x i16> %v497}498 499define <8 x i16> @vpmerge_vv_v8i16(<8 x i16> %va, <8 x i16> %vb, <8 x i1> %m, i32 zeroext %evl) {500; CHECK-LABEL: vpmerge_vv_v8i16:501; CHECK:       # %bb.0:502; CHECK-NEXT:    vsetvli zero, a0, e16, m1, tu, ma503; CHECK-NEXT:    vmerge.vvm v9, v9, v8, v0504; CHECK-NEXT:    vmv1r.v v8, v9505; CHECK-NEXT:    ret506  %v = call <8 x i16> @llvm.vp.merge.v8i16(<8 x i1> %m, <8 x i16> %va, <8 x i16> %vb, i32 %evl)507  ret <8 x i16> %v508}509 510define <8 x i16> @vpmerge_vx_v8i16(i16 %a, <8 x i16> %vb, <8 x i1> %m, i32 zeroext %evl) {511; CHECK-LABEL: vpmerge_vx_v8i16:512; CHECK:       # %bb.0:513; CHECK-NEXT:    vsetvli zero, a1, e16, m1, tu, ma514; CHECK-NEXT:    vmerge.vxm v8, v8, a0, v0515; CHECK-NEXT:    ret516  %elt.head = insertelement <8 x i16> poison, i16 %a, i32 0517  %va = shufflevector <8 x i16> %elt.head, <8 x i16> poison, <8 x i32> zeroinitializer518  %v = call <8 x i16> @llvm.vp.merge.v8i16(<8 x i1> %m, <8 x i16> %va, <8 x i16> %vb, i32 %evl)519  ret <8 x i16> %v520}521 522define <8 x i16> @vpmerge_vi_v8i16(<8 x i16> %vb, <8 x i1> %m, i32 zeroext %evl) {523; CHECK-LABEL: vpmerge_vi_v8i16:524; CHECK:       # %bb.0:525; CHECK-NEXT:    vsetvli zero, a0, e16, m1, tu, ma526; CHECK-NEXT:    vmerge.vim v8, v8, 2, v0527; CHECK-NEXT:    ret528  %v = call <8 x i16> @llvm.vp.merge.v8i16(<8 x i1> %m, <8 x i16> splat (i16 2), <8 x i16> %vb, i32 %evl)529  ret <8 x i16> %v530}531 532define <16 x i16> @vpmerge_vv_v16i16(<16 x i16> %va, <16 x i16> %vb, <16 x i1> %m, i32 zeroext %evl) {533; CHECK-LABEL: vpmerge_vv_v16i16:534; CHECK:       # %bb.0:535; CHECK-NEXT:    vsetvli zero, a0, e16, m2, tu, ma536; CHECK-NEXT:    vmerge.vvm v10, v10, v8, v0537; CHECK-NEXT:    vmv2r.v v8, v10538; CHECK-NEXT:    ret539  %v = call <16 x i16> @llvm.vp.merge.v16i16(<16 x i1> %m, <16 x i16> %va, <16 x i16> %vb, i32 %evl)540  ret <16 x i16> %v541}542 543define <16 x i16> @vpmerge_vx_v16i16(i16 %a, <16 x i16> %vb, <16 x i1> %m, i32 zeroext %evl) {544; CHECK-LABEL: vpmerge_vx_v16i16:545; CHECK:       # %bb.0:546; CHECK-NEXT:    vsetvli zero, a1, e16, m2, tu, ma547; CHECK-NEXT:    vmerge.vxm v8, v8, a0, v0548; CHECK-NEXT:    ret549  %elt.head = insertelement <16 x i16> poison, i16 %a, i32 0550  %va = shufflevector <16 x i16> %elt.head, <16 x i16> poison, <16 x i32> zeroinitializer551  %v = call <16 x i16> @llvm.vp.merge.v16i16(<16 x i1> %m, <16 x i16> %va, <16 x i16> %vb, i32 %evl)552  ret <16 x i16> %v553}554 555define <16 x i16> @vpmerge_vi_v16i16(<16 x i16> %vb, <16 x i1> %m, i32 zeroext %evl) {556; CHECK-LABEL: vpmerge_vi_v16i16:557; CHECK:       # %bb.0:558; CHECK-NEXT:    vsetvli zero, a0, e16, m2, tu, ma559; CHECK-NEXT:    vmerge.vim v8, v8, 2, v0560; CHECK-NEXT:    ret561  %v = call <16 x i16> @llvm.vp.merge.v16i16(<16 x i1> %m, <16 x i16> splat (i16 2), <16 x i16> %vb, i32 %evl)562  ret <16 x i16> %v563}564 565define <2 x i32> @vpmerge_vv_v2i32(<2 x i32> %va, <2 x i32> %vb, <2 x i1> %m, i32 zeroext %evl) {566; CHECK-LABEL: vpmerge_vv_v2i32:567; CHECK:       # %bb.0:568; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, tu, ma569; CHECK-NEXT:    vmerge.vvm v9, v9, v8, v0570; CHECK-NEXT:    vmv1r.v v8, v9571; CHECK-NEXT:    ret572  %v = call <2 x i32> @llvm.vp.merge.v2i32(<2 x i1> %m, <2 x i32> %va, <2 x i32> %vb, i32 %evl)573  ret <2 x i32> %v574}575 576define <2 x i32> @vpmerge_vx_v2i32(i32 %a, <2 x i32> %vb, <2 x i1> %m, i32 zeroext %evl) {577; CHECK-LABEL: vpmerge_vx_v2i32:578; CHECK:       # %bb.0:579; CHECK-NEXT:    vsetvli zero, a1, e32, mf2, tu, ma580; CHECK-NEXT:    vmerge.vxm v8, v8, a0, v0581; CHECK-NEXT:    ret582  %elt.head = insertelement <2 x i32> poison, i32 %a, i32 0583  %va = shufflevector <2 x i32> %elt.head, <2 x i32> poison, <2 x i32> zeroinitializer584  %v = call <2 x i32> @llvm.vp.merge.v2i32(<2 x i1> %m, <2 x i32> %va, <2 x i32> %vb, i32 %evl)585  ret <2 x i32> %v586}587 588define <2 x i32> @vpmerge_vi_v2i32(<2 x i32> %vb, <2 x i1> %m, i32 zeroext %evl) {589; CHECK-LABEL: vpmerge_vi_v2i32:590; CHECK:       # %bb.0:591; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, tu, ma592; CHECK-NEXT:    vmerge.vim v8, v8, 2, v0593; CHECK-NEXT:    ret594  %v = call <2 x i32> @llvm.vp.merge.v2i32(<2 x i1> %m, <2 x i32> splat (i32 2), <2 x i32> %vb, i32 %evl)595  ret <2 x i32> %v596}597 598define <4 x i32> @vpmerge_vv_v4i32(<4 x i32> %va, <4 x i32> %vb, <4 x i1> %m, i32 zeroext %evl) {599; CHECK-LABEL: vpmerge_vv_v4i32:600; CHECK:       # %bb.0:601; CHECK-NEXT:    vsetvli zero, a0, e32, m1, tu, ma602; CHECK-NEXT:    vmerge.vvm v9, v9, v8, v0603; CHECK-NEXT:    vmv1r.v v8, v9604; CHECK-NEXT:    ret605  %v = call <4 x i32> @llvm.vp.merge.v4i32(<4 x i1> %m, <4 x i32> %va, <4 x i32> %vb, i32 %evl)606  ret <4 x i32> %v607}608 609define <4 x i32> @vpmerge_vx_v4i32(i32 %a, <4 x i32> %vb, <4 x i1> %m, i32 zeroext %evl) {610; CHECK-LABEL: vpmerge_vx_v4i32:611; CHECK:       # %bb.0:612; CHECK-NEXT:    vsetvli zero, a1, e32, m1, tu, ma613; CHECK-NEXT:    vmerge.vxm v8, v8, a0, v0614; CHECK-NEXT:    ret615  %elt.head = insertelement <4 x i32> poison, i32 %a, i32 0616  %va = shufflevector <4 x i32> %elt.head, <4 x i32> poison, <4 x i32> zeroinitializer617  %v = call <4 x i32> @llvm.vp.merge.v4i32(<4 x i1> %m, <4 x i32> %va, <4 x i32> %vb, i32 %evl)618  ret <4 x i32> %v619}620 621define <4 x i32> @vpmerge_vi_v4i32(<4 x i32> %vb, <4 x i1> %m, i32 zeroext %evl) {622; CHECK-LABEL: vpmerge_vi_v4i32:623; CHECK:       # %bb.0:624; CHECK-NEXT:    vsetvli zero, a0, e32, m1, tu, ma625; CHECK-NEXT:    vmerge.vim v8, v8, 2, v0626; CHECK-NEXT:    ret627  %v = call <4 x i32> @llvm.vp.merge.v4i32(<4 x i1> %m, <4 x i32> splat (i32 2), <4 x i32> %vb, i32 %evl)628  ret <4 x i32> %v629}630 631define <8 x i32> @vpmerge_vv_v8i32(<8 x i32> %va, <8 x i32> %vb, <8 x i1> %m, i32 zeroext %evl) {632; CHECK-LABEL: vpmerge_vv_v8i32:633; CHECK:       # %bb.0:634; CHECK-NEXT:    vsetvli zero, a0, e32, m2, tu, ma635; CHECK-NEXT:    vmerge.vvm v10, v10, v8, v0636; CHECK-NEXT:    vmv2r.v v8, v10637; CHECK-NEXT:    ret638  %v = call <8 x i32> @llvm.vp.merge.v8i32(<8 x i1> %m, <8 x i32> %va, <8 x i32> %vb, i32 %evl)639  ret <8 x i32> %v640}641 642define <8 x i32> @vpmerge_vx_v8i32(i32 %a, <8 x i32> %vb, <8 x i1> %m, i32 zeroext %evl) {643; CHECK-LABEL: vpmerge_vx_v8i32:644; CHECK:       # %bb.0:645; CHECK-NEXT:    vsetvli zero, a1, e32, m2, tu, ma646; CHECK-NEXT:    vmerge.vxm v8, v8, a0, v0647; CHECK-NEXT:    ret648  %elt.head = insertelement <8 x i32> poison, i32 %a, i32 0649  %va = shufflevector <8 x i32> %elt.head, <8 x i32> poison, <8 x i32> zeroinitializer650  %v = call <8 x i32> @llvm.vp.merge.v8i32(<8 x i1> %m, <8 x i32> %va, <8 x i32> %vb, i32 %evl)651  ret <8 x i32> %v652}653 654define <8 x i32> @vpmerge_vi_v8i32(<8 x i32> %vb, <8 x i1> %m, i32 zeroext %evl) {655; CHECK-LABEL: vpmerge_vi_v8i32:656; CHECK:       # %bb.0:657; CHECK-NEXT:    vsetvli zero, a0, e32, m2, tu, ma658; CHECK-NEXT:    vmerge.vim v8, v8, 2, v0659; CHECK-NEXT:    ret660  %v = call <8 x i32> @llvm.vp.merge.v8i32(<8 x i1> %m, <8 x i32> splat (i32 2), <8 x i32> %vb, i32 %evl)661  ret <8 x i32> %v662}663 664define <16 x i32> @vpmerge_vv_v16i32(<16 x i32> %va, <16 x i32> %vb, <16 x i1> %m, i32 zeroext %evl) {665; CHECK-LABEL: vpmerge_vv_v16i32:666; CHECK:       # %bb.0:667; CHECK-NEXT:    vsetvli zero, a0, e32, m4, tu, ma668; CHECK-NEXT:    vmerge.vvm v12, v12, v8, v0669; CHECK-NEXT:    vmv4r.v v8, v12670; CHECK-NEXT:    ret671  %v = call <16 x i32> @llvm.vp.merge.v16i32(<16 x i1> %m, <16 x i32> %va, <16 x i32> %vb, i32 %evl)672  ret <16 x i32> %v673}674 675define <16 x i32> @vpmerge_vx_v16i32(i32 %a, <16 x i32> %vb, <16 x i1> %m, i32 zeroext %evl) {676; CHECK-LABEL: vpmerge_vx_v16i32:677; CHECK:       # %bb.0:678; CHECK-NEXT:    vsetvli zero, a1, e32, m4, tu, ma679; CHECK-NEXT:    vmerge.vxm v8, v8, a0, v0680; CHECK-NEXT:    ret681  %elt.head = insertelement <16 x i32> poison, i32 %a, i32 0682  %va = shufflevector <16 x i32> %elt.head, <16 x i32> poison, <16 x i32> zeroinitializer683  %v = call <16 x i32> @llvm.vp.merge.v16i32(<16 x i1> %m, <16 x i32> %va, <16 x i32> %vb, i32 %evl)684  ret <16 x i32> %v685}686 687define <16 x i32> @vpmerge_vi_v16i32(<16 x i32> %vb, <16 x i1> %m, i32 zeroext %evl) {688; CHECK-LABEL: vpmerge_vi_v16i32:689; CHECK:       # %bb.0:690; CHECK-NEXT:    vsetvli zero, a0, e32, m4, tu, ma691; CHECK-NEXT:    vmerge.vim v8, v8, 2, v0692; CHECK-NEXT:    ret693  %v = call <16 x i32> @llvm.vp.merge.v16i32(<16 x i1> %m, <16 x i32> splat (i32 2), <16 x i32> %vb, i32 %evl)694  ret <16 x i32> %v695}696 697define <2 x i64> @vpmerge_vv_v2i64(<2 x i64> %va, <2 x i64> %vb, <2 x i1> %m, i32 zeroext %evl) {698; CHECK-LABEL: vpmerge_vv_v2i64:699; CHECK:       # %bb.0:700; CHECK-NEXT:    vsetvli zero, a0, e64, m1, tu, ma701; CHECK-NEXT:    vmerge.vvm v9, v9, v8, v0702; CHECK-NEXT:    vmv1r.v v8, v9703; CHECK-NEXT:    ret704  %v = call <2 x i64> @llvm.vp.merge.v2i64(<2 x i1> %m, <2 x i64> %va, <2 x i64> %vb, i32 %evl)705  ret <2 x i64> %v706}707 708define <2 x i64> @vpmerge_vx_v2i64(i64 %a, <2 x i64> %vb, <2 x i1> %m, i32 zeroext %evl) {709; RV32-LABEL: vpmerge_vx_v2i64:710; RV32:       # %bb.0:711; RV32-NEXT:    addi sp, sp, -16712; RV32-NEXT:    .cfi_def_cfa_offset 16713; RV32-NEXT:    sw a0, 8(sp)714; RV32-NEXT:    sw a1, 12(sp)715; RV32-NEXT:    addi a0, sp, 8716; RV32-NEXT:    vsetivli zero, 2, e64, m1, ta, ma717; RV32-NEXT:    vlse64.v v9, (a0), zero718; RV32-NEXT:    vsetvli zero, a2, e64, m1, tu, ma719; RV32-NEXT:    vmerge.vvm v8, v8, v9, v0720; RV32-NEXT:    addi sp, sp, 16721; RV32-NEXT:    .cfi_def_cfa_offset 0722; RV32-NEXT:    ret723;724; RV64-LABEL: vpmerge_vx_v2i64:725; RV64:       # %bb.0:726; RV64-NEXT:    vsetvli zero, a1, e64, m1, tu, ma727; RV64-NEXT:    vmerge.vxm v8, v8, a0, v0728; RV64-NEXT:    ret729;730; RV32ZVFHMIN-LABEL: vpmerge_vx_v2i64:731; RV32ZVFHMIN:       # %bb.0:732; RV32ZVFHMIN-NEXT:    addi sp, sp, -16733; RV32ZVFHMIN-NEXT:    .cfi_def_cfa_offset 16734; RV32ZVFHMIN-NEXT:    sw a0, 8(sp)735; RV32ZVFHMIN-NEXT:    sw a1, 12(sp)736; RV32ZVFHMIN-NEXT:    addi a0, sp, 8737; RV32ZVFHMIN-NEXT:    vsetivli zero, 2, e64, m1, ta, ma738; RV32ZVFHMIN-NEXT:    vlse64.v v9, (a0), zero739; RV32ZVFHMIN-NEXT:    vsetvli zero, a2, e64, m1, tu, ma740; RV32ZVFHMIN-NEXT:    vmerge.vvm v8, v8, v9, v0741; RV32ZVFHMIN-NEXT:    addi sp, sp, 16742; RV32ZVFHMIN-NEXT:    .cfi_def_cfa_offset 0743; RV32ZVFHMIN-NEXT:    ret744;745; RV64ZVFHMIN-LABEL: vpmerge_vx_v2i64:746; RV64ZVFHMIN:       # %bb.0:747; RV64ZVFHMIN-NEXT:    vsetvli zero, a1, e64, m1, tu, ma748; RV64ZVFHMIN-NEXT:    vmerge.vxm v8, v8, a0, v0749; RV64ZVFHMIN-NEXT:    ret750  %elt.head = insertelement <2 x i64> poison, i64 %a, i32 0751  %va = shufflevector <2 x i64> %elt.head, <2 x i64> poison, <2 x i32> zeroinitializer752  %v = call <2 x i64> @llvm.vp.merge.v2i64(<2 x i1> %m, <2 x i64> %va, <2 x i64> %vb, i32 %evl)753  ret <2 x i64> %v754}755 756define <2 x i64> @vpmerge_vi_v2i64(<2 x i64> %vb, <2 x i1> %m, i32 zeroext %evl) {757; CHECK-LABEL: vpmerge_vi_v2i64:758; CHECK:       # %bb.0:759; CHECK-NEXT:    vsetvli zero, a0, e64, m1, tu, ma760; CHECK-NEXT:    vmerge.vim v8, v8, 2, v0761; CHECK-NEXT:    ret762  %v = call <2 x i64> @llvm.vp.merge.v2i64(<2 x i1> %m, <2 x i64> splat (i64 2), <2 x i64> %vb, i32 %evl)763  ret <2 x i64> %v764}765 766define <4 x i64> @vpmerge_vv_v4i64(<4 x i64> %va, <4 x i64> %vb, <4 x i1> %m, i32 zeroext %evl) {767; CHECK-LABEL: vpmerge_vv_v4i64:768; CHECK:       # %bb.0:769; CHECK-NEXT:    vsetvli zero, a0, e64, m2, tu, ma770; CHECK-NEXT:    vmerge.vvm v10, v10, v8, v0771; CHECK-NEXT:    vmv2r.v v8, v10772; CHECK-NEXT:    ret773  %v = call <4 x i64> @llvm.vp.merge.v4i64(<4 x i1> %m, <4 x i64> %va, <4 x i64> %vb, i32 %evl)774  ret <4 x i64> %v775}776 777define <4 x i64> @vpmerge_vx_v4i64(i64 %a, <4 x i64> %vb, <4 x i1> %m, i32 zeroext %evl) {778; RV32-LABEL: vpmerge_vx_v4i64:779; RV32:       # %bb.0:780; RV32-NEXT:    addi sp, sp, -16781; RV32-NEXT:    .cfi_def_cfa_offset 16782; RV32-NEXT:    sw a0, 8(sp)783; RV32-NEXT:    sw a1, 12(sp)784; RV32-NEXT:    addi a0, sp, 8785; RV32-NEXT:    vsetivli zero, 4, e64, m2, ta, ma786; RV32-NEXT:    vlse64.v v10, (a0), zero787; RV32-NEXT:    vsetvli zero, a2, e64, m2, tu, ma788; RV32-NEXT:    vmerge.vvm v8, v8, v10, v0789; RV32-NEXT:    addi sp, sp, 16790; RV32-NEXT:    .cfi_def_cfa_offset 0791; RV32-NEXT:    ret792;793; RV64-LABEL: vpmerge_vx_v4i64:794; RV64:       # %bb.0:795; RV64-NEXT:    vsetvli zero, a1, e64, m2, tu, ma796; RV64-NEXT:    vmerge.vxm v8, v8, a0, v0797; RV64-NEXT:    ret798;799; RV32ZVFHMIN-LABEL: vpmerge_vx_v4i64:800; RV32ZVFHMIN:       # %bb.0:801; RV32ZVFHMIN-NEXT:    addi sp, sp, -16802; RV32ZVFHMIN-NEXT:    .cfi_def_cfa_offset 16803; RV32ZVFHMIN-NEXT:    sw a0, 8(sp)804; RV32ZVFHMIN-NEXT:    sw a1, 12(sp)805; RV32ZVFHMIN-NEXT:    addi a0, sp, 8806; RV32ZVFHMIN-NEXT:    vsetivli zero, 4, e64, m2, ta, ma807; RV32ZVFHMIN-NEXT:    vlse64.v v10, (a0), zero808; RV32ZVFHMIN-NEXT:    vsetvli zero, a2, e64, m2, tu, ma809; RV32ZVFHMIN-NEXT:    vmerge.vvm v8, v8, v10, v0810; RV32ZVFHMIN-NEXT:    addi sp, sp, 16811; RV32ZVFHMIN-NEXT:    .cfi_def_cfa_offset 0812; RV32ZVFHMIN-NEXT:    ret813;814; RV64ZVFHMIN-LABEL: vpmerge_vx_v4i64:815; RV64ZVFHMIN:       # %bb.0:816; RV64ZVFHMIN-NEXT:    vsetvli zero, a1, e64, m2, tu, ma817; RV64ZVFHMIN-NEXT:    vmerge.vxm v8, v8, a0, v0818; RV64ZVFHMIN-NEXT:    ret819  %elt.head = insertelement <4 x i64> poison, i64 %a, i32 0820  %va = shufflevector <4 x i64> %elt.head, <4 x i64> poison, <4 x i32> zeroinitializer821  %v = call <4 x i64> @llvm.vp.merge.v4i64(<4 x i1> %m, <4 x i64> %va, <4 x i64> %vb, i32 %evl)822  ret <4 x i64> %v823}824 825define <4 x i64> @vpmerge_vi_v4i64(<4 x i64> %vb, <4 x i1> %m, i32 zeroext %evl) {826; CHECK-LABEL: vpmerge_vi_v4i64:827; CHECK:       # %bb.0:828; CHECK-NEXT:    vsetvli zero, a0, e64, m2, tu, ma829; CHECK-NEXT:    vmerge.vim v8, v8, 2, v0830; CHECK-NEXT:    ret831  %v = call <4 x i64> @llvm.vp.merge.v4i64(<4 x i1> %m, <4 x i64> splat (i64 2), <4 x i64> %vb, i32 %evl)832  ret <4 x i64> %v833}834 835define <8 x i64> @vpmerge_vv_v8i64(<8 x i64> %va, <8 x i64> %vb, <8 x i1> %m, i32 zeroext %evl) {836; CHECK-LABEL: vpmerge_vv_v8i64:837; CHECK:       # %bb.0:838; CHECK-NEXT:    vsetvli zero, a0, e64, m4, tu, ma839; CHECK-NEXT:    vmerge.vvm v12, v12, v8, v0840; CHECK-NEXT:    vmv4r.v v8, v12841; CHECK-NEXT:    ret842  %v = call <8 x i64> @llvm.vp.merge.v8i64(<8 x i1> %m, <8 x i64> %va, <8 x i64> %vb, i32 %evl)843  ret <8 x i64> %v844}845 846define <8 x i64> @vpmerge_vx_v8i64(i64 %a, <8 x i64> %vb, <8 x i1> %m, i32 zeroext %evl) {847; RV32-LABEL: vpmerge_vx_v8i64:848; RV32:       # %bb.0:849; RV32-NEXT:    addi sp, sp, -16850; RV32-NEXT:    .cfi_def_cfa_offset 16851; RV32-NEXT:    sw a0, 8(sp)852; RV32-NEXT:    sw a1, 12(sp)853; RV32-NEXT:    addi a0, sp, 8854; RV32-NEXT:    vsetivli zero, 8, e64, m4, ta, ma855; RV32-NEXT:    vlse64.v v12, (a0), zero856; RV32-NEXT:    vsetvli zero, a2, e64, m4, tu, ma857; RV32-NEXT:    vmerge.vvm v8, v8, v12, v0858; RV32-NEXT:    addi sp, sp, 16859; RV32-NEXT:    .cfi_def_cfa_offset 0860; RV32-NEXT:    ret861;862; RV64-LABEL: vpmerge_vx_v8i64:863; RV64:       # %bb.0:864; RV64-NEXT:    vsetvli zero, a1, e64, m4, tu, ma865; RV64-NEXT:    vmerge.vxm v8, v8, a0, v0866; RV64-NEXT:    ret867;868; RV32ZVFHMIN-LABEL: vpmerge_vx_v8i64:869; RV32ZVFHMIN:       # %bb.0:870; RV32ZVFHMIN-NEXT:    addi sp, sp, -16871; RV32ZVFHMIN-NEXT:    .cfi_def_cfa_offset 16872; RV32ZVFHMIN-NEXT:    sw a0, 8(sp)873; RV32ZVFHMIN-NEXT:    sw a1, 12(sp)874; RV32ZVFHMIN-NEXT:    addi a0, sp, 8875; RV32ZVFHMIN-NEXT:    vsetivli zero, 8, e64, m4, ta, ma876; RV32ZVFHMIN-NEXT:    vlse64.v v12, (a0), zero877; RV32ZVFHMIN-NEXT:    vsetvli zero, a2, e64, m4, tu, ma878; RV32ZVFHMIN-NEXT:    vmerge.vvm v8, v8, v12, v0879; RV32ZVFHMIN-NEXT:    addi sp, sp, 16880; RV32ZVFHMIN-NEXT:    .cfi_def_cfa_offset 0881; RV32ZVFHMIN-NEXT:    ret882;883; RV64ZVFHMIN-LABEL: vpmerge_vx_v8i64:884; RV64ZVFHMIN:       # %bb.0:885; RV64ZVFHMIN-NEXT:    vsetvli zero, a1, e64, m4, tu, ma886; RV64ZVFHMIN-NEXT:    vmerge.vxm v8, v8, a0, v0887; RV64ZVFHMIN-NEXT:    ret888  %elt.head = insertelement <8 x i64> poison, i64 %a, i32 0889  %va = shufflevector <8 x i64> %elt.head, <8 x i64> poison, <8 x i32> zeroinitializer890  %v = call <8 x i64> @llvm.vp.merge.v8i64(<8 x i1> %m, <8 x i64> %va, <8 x i64> %vb, i32 %evl)891  ret <8 x i64> %v892}893 894define <8 x i64> @vpmerge_vi_v8i64(<8 x i64> %vb, <8 x i1> %m, i32 zeroext %evl) {895; CHECK-LABEL: vpmerge_vi_v8i64:896; CHECK:       # %bb.0:897; CHECK-NEXT:    vsetvli zero, a0, e64, m4, tu, ma898; CHECK-NEXT:    vmerge.vim v8, v8, 2, v0899; CHECK-NEXT:    ret900  %v = call <8 x i64> @llvm.vp.merge.v8i64(<8 x i1> %m, <8 x i64> splat (i64 2), <8 x i64> %vb, i32 %evl)901  ret <8 x i64> %v902}903 904define <16 x i64> @vpmerge_vv_v16i64(<16 x i64> %va, <16 x i64> %vb, <16 x i1> %m, i32 zeroext %evl) {905; CHECK-LABEL: vpmerge_vv_v16i64:906; CHECK:       # %bb.0:907; CHECK-NEXT:    vsetvli zero, a0, e64, m8, tu, ma908; CHECK-NEXT:    vmerge.vvm v16, v16, v8, v0909; CHECK-NEXT:    vmv8r.v v8, v16910; CHECK-NEXT:    ret911  %v = call <16 x i64> @llvm.vp.merge.v16i64(<16 x i1> %m, <16 x i64> %va, <16 x i64> %vb, i32 %evl)912  ret <16 x i64> %v913}914 915define <16 x i64> @vpmerge_vx_v16i64(i64 %a, <16 x i64> %vb, <16 x i1> %m, i32 zeroext %evl) {916; RV32-LABEL: vpmerge_vx_v16i64:917; RV32:       # %bb.0:918; RV32-NEXT:    addi sp, sp, -16919; RV32-NEXT:    .cfi_def_cfa_offset 16920; RV32-NEXT:    sw a0, 8(sp)921; RV32-NEXT:    sw a1, 12(sp)922; RV32-NEXT:    addi a0, sp, 8923; RV32-NEXT:    vsetivli zero, 16, e64, m8, ta, ma924; RV32-NEXT:    vlse64.v v16, (a0), zero925; RV32-NEXT:    vsetvli zero, a2, e64, m8, tu, ma926; RV32-NEXT:    vmerge.vvm v8, v8, v16, v0927; RV32-NEXT:    addi sp, sp, 16928; RV32-NEXT:    .cfi_def_cfa_offset 0929; RV32-NEXT:    ret930;931; RV64-LABEL: vpmerge_vx_v16i64:932; RV64:       # %bb.0:933; RV64-NEXT:    vsetvli zero, a1, e64, m8, tu, ma934; RV64-NEXT:    vmerge.vxm v8, v8, a0, v0935; RV64-NEXT:    ret936;937; RV32ZVFHMIN-LABEL: vpmerge_vx_v16i64:938; RV32ZVFHMIN:       # %bb.0:939; RV32ZVFHMIN-NEXT:    addi sp, sp, -16940; RV32ZVFHMIN-NEXT:    .cfi_def_cfa_offset 16941; RV32ZVFHMIN-NEXT:    sw a0, 8(sp)942; RV32ZVFHMIN-NEXT:    sw a1, 12(sp)943; RV32ZVFHMIN-NEXT:    addi a0, sp, 8944; RV32ZVFHMIN-NEXT:    vsetivli zero, 16, e64, m8, ta, ma945; RV32ZVFHMIN-NEXT:    vlse64.v v16, (a0), zero946; RV32ZVFHMIN-NEXT:    vsetvli zero, a2, e64, m8, tu, ma947; RV32ZVFHMIN-NEXT:    vmerge.vvm v8, v8, v16, v0948; RV32ZVFHMIN-NEXT:    addi sp, sp, 16949; RV32ZVFHMIN-NEXT:    .cfi_def_cfa_offset 0950; RV32ZVFHMIN-NEXT:    ret951;952; RV64ZVFHMIN-LABEL: vpmerge_vx_v16i64:953; RV64ZVFHMIN:       # %bb.0:954; RV64ZVFHMIN-NEXT:    vsetvli zero, a1, e64, m8, tu, ma955; RV64ZVFHMIN-NEXT:    vmerge.vxm v8, v8, a0, v0956; RV64ZVFHMIN-NEXT:    ret957  %elt.head = insertelement <16 x i64> poison, i64 %a, i32 0958  %va = shufflevector <16 x i64> %elt.head, <16 x i64> poison, <16 x i32> zeroinitializer959  %v = call <16 x i64> @llvm.vp.merge.v16i64(<16 x i1> %m, <16 x i64> %va, <16 x i64> %vb, i32 %evl)960  ret <16 x i64> %v961}962 963define <16 x i64> @vpmerge_vi_v16i64(<16 x i64> %vb, <16 x i1> %m, i32 zeroext %evl) {964; CHECK-LABEL: vpmerge_vi_v16i64:965; CHECK:       # %bb.0:966; CHECK-NEXT:    vsetvli zero, a0, e64, m8, tu, ma967; CHECK-NEXT:    vmerge.vim v8, v8, 2, v0968; CHECK-NEXT:    ret969  %v = call <16 x i64> @llvm.vp.merge.v16i64(<16 x i1> %m, <16 x i64> splat (i64 2), <16 x i64> %vb, i32 %evl)970  ret <16 x i64> %v971}972 973define <2 x half> @vpmerge_vv_v2f16(<2 x half> %va, <2 x half> %vb, <2 x i1> %m, i32 zeroext %evl) {974; CHECK-LABEL: vpmerge_vv_v2f16:975; CHECK:       # %bb.0:976; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, tu, ma977; CHECK-NEXT:    vmerge.vvm v9, v9, v8, v0978; CHECK-NEXT:    vmv1r.v v8, v9979; CHECK-NEXT:    ret980  %v = call <2 x half> @llvm.vp.merge.v2f16(<2 x i1> %m, <2 x half> %va, <2 x half> %vb, i32 %evl)981  ret <2 x half> %v982}983 984define <2 x half> @vpmerge_vf_v2f16(half %a, <2 x half> %vb, <2 x i1> %m, i32 zeroext %evl) {985; ZVFH-LABEL: vpmerge_vf_v2f16:986; ZVFH:       # %bb.0:987; ZVFH-NEXT:    vsetvli zero, a0, e16, mf4, tu, ma988; ZVFH-NEXT:    vfmerge.vfm v8, v8, fa0, v0989; ZVFH-NEXT:    ret990;991; ZVFHMIN-LABEL: vpmerge_vf_v2f16:992; ZVFHMIN:       # %bb.0:993; ZVFHMIN-NEXT:    fmv.x.h a1, fa0994; ZVFHMIN-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma995; ZVFHMIN-NEXT:    vmv.v.x v9, a1996; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf4, tu, ma997; ZVFHMIN-NEXT:    vmerge.vvm v8, v8, v9, v0998; ZVFHMIN-NEXT:    ret999  %elt.head = insertelement <2 x half> poison, half %a, i32 01000  %va = shufflevector <2 x half> %elt.head, <2 x half> poison, <2 x i32> zeroinitializer1001  %v = call <2 x half> @llvm.vp.merge.v2f16(<2 x i1> %m, <2 x half> %va, <2 x half> %vb, i32 %evl)1002  ret <2 x half> %v1003}1004 1005define <4 x half> @vpmerge_vv_v4f16(<4 x half> %va, <4 x half> %vb, <4 x i1> %m, i32 zeroext %evl) {1006; CHECK-LABEL: vpmerge_vv_v4f16:1007; CHECK:       # %bb.0:1008; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, tu, ma1009; CHECK-NEXT:    vmerge.vvm v9, v9, v8, v01010; CHECK-NEXT:    vmv1r.v v8, v91011; CHECK-NEXT:    ret1012  %v = call <4 x half> @llvm.vp.merge.v4f16(<4 x i1> %m, <4 x half> %va, <4 x half> %vb, i32 %evl)1013  ret <4 x half> %v1014}1015 1016define <4 x half> @vpmerge_vf_v4f16(half %a, <4 x half> %vb, <4 x i1> %m, i32 zeroext %evl) {1017; ZVFH-LABEL: vpmerge_vf_v4f16:1018; ZVFH:       # %bb.0:1019; ZVFH-NEXT:    vsetvli zero, a0, e16, mf2, tu, ma1020; ZVFH-NEXT:    vfmerge.vfm v8, v8, fa0, v01021; ZVFH-NEXT:    ret1022;1023; ZVFHMIN-LABEL: vpmerge_vf_v4f16:1024; ZVFHMIN:       # %bb.0:1025; ZVFHMIN-NEXT:    fmv.x.h a1, fa01026; ZVFHMIN-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma1027; ZVFHMIN-NEXT:    vmv.v.x v9, a11028; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, mf2, tu, ma1029; ZVFHMIN-NEXT:    vmerge.vvm v8, v8, v9, v01030; ZVFHMIN-NEXT:    ret1031  %elt.head = insertelement <4 x half> poison, half %a, i32 01032  %va = shufflevector <4 x half> %elt.head, <4 x half> poison, <4 x i32> zeroinitializer1033  %v = call <4 x half> @llvm.vp.merge.v4f16(<4 x i1> %m, <4 x half> %va, <4 x half> %vb, i32 %evl)1034  ret <4 x half> %v1035}1036 1037define <8 x half> @vpmerge_vv_v8f16(<8 x half> %va, <8 x half> %vb, <8 x i1> %m, i32 zeroext %evl) {1038; CHECK-LABEL: vpmerge_vv_v8f16:1039; CHECK:       # %bb.0:1040; CHECK-NEXT:    vsetvli zero, a0, e16, m1, tu, ma1041; CHECK-NEXT:    vmerge.vvm v9, v9, v8, v01042; CHECK-NEXT:    vmv1r.v v8, v91043; CHECK-NEXT:    ret1044  %v = call <8 x half> @llvm.vp.merge.v8f16(<8 x i1> %m, <8 x half> %va, <8 x half> %vb, i32 %evl)1045  ret <8 x half> %v1046}1047 1048define <8 x half> @vpmerge_vf_v8f16(half %a, <8 x half> %vb, <8 x i1> %m, i32 zeroext %evl) {1049; ZVFH-LABEL: vpmerge_vf_v8f16:1050; ZVFH:       # %bb.0:1051; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, tu, ma1052; ZVFH-NEXT:    vfmerge.vfm v8, v8, fa0, v01053; ZVFH-NEXT:    ret1054;1055; ZVFHMIN-LABEL: vpmerge_vf_v8f16:1056; ZVFHMIN:       # %bb.0:1057; ZVFHMIN-NEXT:    fmv.x.h a1, fa01058; ZVFHMIN-NEXT:    vsetivli zero, 8, e16, m1, ta, ma1059; ZVFHMIN-NEXT:    vmv.v.x v9, a11060; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m1, tu, ma1061; ZVFHMIN-NEXT:    vmerge.vvm v8, v8, v9, v01062; ZVFHMIN-NEXT:    ret1063  %elt.head = insertelement <8 x half> poison, half %a, i32 01064  %va = shufflevector <8 x half> %elt.head, <8 x half> poison, <8 x i32> zeroinitializer1065  %v = call <8 x half> @llvm.vp.merge.v8f16(<8 x i1> %m, <8 x half> %va, <8 x half> %vb, i32 %evl)1066  ret <8 x half> %v1067}1068 1069define <16 x half> @vpmerge_vv_v16f16(<16 x half> %va, <16 x half> %vb, <16 x i1> %m, i32 zeroext %evl) {1070; CHECK-LABEL: vpmerge_vv_v16f16:1071; CHECK:       # %bb.0:1072; CHECK-NEXT:    vsetvli zero, a0, e16, m2, tu, ma1073; CHECK-NEXT:    vmerge.vvm v10, v10, v8, v01074; CHECK-NEXT:    vmv2r.v v8, v101075; CHECK-NEXT:    ret1076  %v = call <16 x half> @llvm.vp.merge.v16f16(<16 x i1> %m, <16 x half> %va, <16 x half> %vb, i32 %evl)1077  ret <16 x half> %v1078}1079 1080define <16 x half> @vpmerge_vf_v16f16(half %a, <16 x half> %vb, <16 x i1> %m, i32 zeroext %evl) {1081; ZVFH-LABEL: vpmerge_vf_v16f16:1082; ZVFH:       # %bb.0:1083; ZVFH-NEXT:    vsetvli zero, a0, e16, m2, tu, ma1084; ZVFH-NEXT:    vfmerge.vfm v8, v8, fa0, v01085; ZVFH-NEXT:    ret1086;1087; ZVFHMIN-LABEL: vpmerge_vf_v16f16:1088; ZVFHMIN:       # %bb.0:1089; ZVFHMIN-NEXT:    fmv.x.h a1, fa01090; ZVFHMIN-NEXT:    vsetivli zero, 16, e16, m2, ta, ma1091; ZVFHMIN-NEXT:    vmv.v.x v10, a11092; ZVFHMIN-NEXT:    vsetvli zero, a0, e16, m2, tu, ma1093; ZVFHMIN-NEXT:    vmerge.vvm v8, v8, v10, v01094; ZVFHMIN-NEXT:    ret1095  %elt.head = insertelement <16 x half> poison, half %a, i32 01096  %va = shufflevector <16 x half> %elt.head, <16 x half> poison, <16 x i32> zeroinitializer1097  %v = call <16 x half> @llvm.vp.merge.v16f16(<16 x i1> %m, <16 x half> %va, <16 x half> %vb, i32 %evl)1098  ret <16 x half> %v1099}1100 1101define <2 x float> @vpmerge_vv_v2f32(<2 x float> %va, <2 x float> %vb, <2 x i1> %m, i32 zeroext %evl) {1102; CHECK-LABEL: vpmerge_vv_v2f32:1103; CHECK:       # %bb.0:1104; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, tu, ma1105; CHECK-NEXT:    vmerge.vvm v9, v9, v8, v01106; CHECK-NEXT:    vmv1r.v v8, v91107; CHECK-NEXT:    ret1108  %v = call <2 x float> @llvm.vp.merge.v2f32(<2 x i1> %m, <2 x float> %va, <2 x float> %vb, i32 %evl)1109  ret <2 x float> %v1110}1111 1112define <2 x float> @vpmerge_vf_v2f32(float %a, <2 x float> %vb, <2 x i1> %m, i32 zeroext %evl) {1113; CHECK-LABEL: vpmerge_vf_v2f32:1114; CHECK:       # %bb.0:1115; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, tu, ma1116; CHECK-NEXT:    vfmerge.vfm v8, v8, fa0, v01117; CHECK-NEXT:    ret1118  %elt.head = insertelement <2 x float> poison, float %a, i32 01119  %va = shufflevector <2 x float> %elt.head, <2 x float> poison, <2 x i32> zeroinitializer1120  %v = call <2 x float> @llvm.vp.merge.v2f32(<2 x i1> %m, <2 x float> %va, <2 x float> %vb, i32 %evl)1121  ret <2 x float> %v1122}1123 1124define <4 x float> @vpmerge_vv_v4f32(<4 x float> %va, <4 x float> %vb, <4 x i1> %m, i32 zeroext %evl) {1125; CHECK-LABEL: vpmerge_vv_v4f32:1126; CHECK:       # %bb.0:1127; CHECK-NEXT:    vsetvli zero, a0, e32, m1, tu, ma1128; CHECK-NEXT:    vmerge.vvm v9, v9, v8, v01129; CHECK-NEXT:    vmv1r.v v8, v91130; CHECK-NEXT:    ret1131  %v = call <4 x float> @llvm.vp.merge.v4f32(<4 x i1> %m, <4 x float> %va, <4 x float> %vb, i32 %evl)1132  ret <4 x float> %v1133}1134 1135define <4 x float> @vpmerge_vf_v4f32(float %a, <4 x float> %vb, <4 x i1> %m, i32 zeroext %evl) {1136; CHECK-LABEL: vpmerge_vf_v4f32:1137; CHECK:       # %bb.0:1138; CHECK-NEXT:    vsetvli zero, a0, e32, m1, tu, ma1139; CHECK-NEXT:    vfmerge.vfm v8, v8, fa0, v01140; CHECK-NEXT:    ret1141  %elt.head = insertelement <4 x float> poison, float %a, i32 01142  %va = shufflevector <4 x float> %elt.head, <4 x float> poison, <4 x i32> zeroinitializer1143  %v = call <4 x float> @llvm.vp.merge.v4f32(<4 x i1> %m, <4 x float> %va, <4 x float> %vb, i32 %evl)1144  ret <4 x float> %v1145}1146 1147define <8 x float> @vpmerge_vv_v8f32(<8 x float> %va, <8 x float> %vb, <8 x i1> %m, i32 zeroext %evl) {1148; CHECK-LABEL: vpmerge_vv_v8f32:1149; CHECK:       # %bb.0:1150; CHECK-NEXT:    vsetvli zero, a0, e32, m2, tu, ma1151; CHECK-NEXT:    vmerge.vvm v10, v10, v8, v01152; CHECK-NEXT:    vmv2r.v v8, v101153; CHECK-NEXT:    ret1154  %v = call <8 x float> @llvm.vp.merge.v8f32(<8 x i1> %m, <8 x float> %va, <8 x float> %vb, i32 %evl)1155  ret <8 x float> %v1156}1157 1158define <8 x float> @vpmerge_vf_v8f32(float %a, <8 x float> %vb, <8 x i1> %m, i32 zeroext %evl) {1159; CHECK-LABEL: vpmerge_vf_v8f32:1160; CHECK:       # %bb.0:1161; CHECK-NEXT:    vsetvli zero, a0, e32, m2, tu, ma1162; CHECK-NEXT:    vfmerge.vfm v8, v8, fa0, v01163; CHECK-NEXT:    ret1164  %elt.head = insertelement <8 x float> poison, float %a, i32 01165  %va = shufflevector <8 x float> %elt.head, <8 x float> poison, <8 x i32> zeroinitializer1166  %v = call <8 x float> @llvm.vp.merge.v8f32(<8 x i1> %m, <8 x float> %va, <8 x float> %vb, i32 %evl)1167  ret <8 x float> %v1168}1169 1170define <16 x float> @vpmerge_vv_v16f32(<16 x float> %va, <16 x float> %vb, <16 x i1> %m, i32 zeroext %evl) {1171; CHECK-LABEL: vpmerge_vv_v16f32:1172; CHECK:       # %bb.0:1173; CHECK-NEXT:    vsetvli zero, a0, e32, m4, tu, ma1174; CHECK-NEXT:    vmerge.vvm v12, v12, v8, v01175; CHECK-NEXT:    vmv4r.v v8, v121176; CHECK-NEXT:    ret1177  %v = call <16 x float> @llvm.vp.merge.v16f32(<16 x i1> %m, <16 x float> %va, <16 x float> %vb, i32 %evl)1178  ret <16 x float> %v1179}1180 1181define <16 x float> @vpmerge_vf_v16f32(float %a, <16 x float> %vb, <16 x i1> %m, i32 zeroext %evl) {1182; CHECK-LABEL: vpmerge_vf_v16f32:1183; CHECK:       # %bb.0:1184; CHECK-NEXT:    vsetvli zero, a0, e32, m4, tu, ma1185; CHECK-NEXT:    vfmerge.vfm v8, v8, fa0, v01186; CHECK-NEXT:    ret1187  %elt.head = insertelement <16 x float> poison, float %a, i32 01188  %va = shufflevector <16 x float> %elt.head, <16 x float> poison, <16 x i32> zeroinitializer1189  %v = call <16 x float> @llvm.vp.merge.v16f32(<16 x i1> %m, <16 x float> %va, <16 x float> %vb, i32 %evl)1190  ret <16 x float> %v1191}1192 1193define <2 x double> @vpmerge_vv_v2f64(<2 x double> %va, <2 x double> %vb, <2 x i1> %m, i32 zeroext %evl) {1194; CHECK-LABEL: vpmerge_vv_v2f64:1195; CHECK:       # %bb.0:1196; CHECK-NEXT:    vsetvli zero, a0, e64, m1, tu, ma1197; CHECK-NEXT:    vmerge.vvm v9, v9, v8, v01198; CHECK-NEXT:    vmv1r.v v8, v91199; CHECK-NEXT:    ret1200  %v = call <2 x double> @llvm.vp.merge.v2f64(<2 x i1> %m, <2 x double> %va, <2 x double> %vb, i32 %evl)1201  ret <2 x double> %v1202}1203 1204define <2 x double> @vpmerge_vf_v2f64(double %a, <2 x double> %vb, <2 x i1> %m, i32 zeroext %evl) {1205; CHECK-LABEL: vpmerge_vf_v2f64:1206; CHECK:       # %bb.0:1207; CHECK-NEXT:    vsetvli zero, a0, e64, m1, tu, ma1208; CHECK-NEXT:    vfmerge.vfm v8, v8, fa0, v01209; CHECK-NEXT:    ret1210  %elt.head = insertelement <2 x double> poison, double %a, i32 01211  %va = shufflevector <2 x double> %elt.head, <2 x double> poison, <2 x i32> zeroinitializer1212  %v = call <2 x double> @llvm.vp.merge.v2f64(<2 x i1> %m, <2 x double> %va, <2 x double> %vb, i32 %evl)1213  ret <2 x double> %v1214}1215 1216define <4 x double> @vpmerge_vv_v4f64(<4 x double> %va, <4 x double> %vb, <4 x i1> %m, i32 zeroext %evl) {1217; CHECK-LABEL: vpmerge_vv_v4f64:1218; CHECK:       # %bb.0:1219; CHECK-NEXT:    vsetvli zero, a0, e64, m2, tu, ma1220; CHECK-NEXT:    vmerge.vvm v10, v10, v8, v01221; CHECK-NEXT:    vmv2r.v v8, v101222; CHECK-NEXT:    ret1223  %v = call <4 x double> @llvm.vp.merge.v4f64(<4 x i1> %m, <4 x double> %va, <4 x double> %vb, i32 %evl)1224  ret <4 x double> %v1225}1226 1227define <4 x double> @vpmerge_vf_v4f64(double %a, <4 x double> %vb, <4 x i1> %m, i32 zeroext %evl) {1228; CHECK-LABEL: vpmerge_vf_v4f64:1229; CHECK:       # %bb.0:1230; CHECK-NEXT:    vsetvli zero, a0, e64, m2, tu, ma1231; CHECK-NEXT:    vfmerge.vfm v8, v8, fa0, v01232; CHECK-NEXT:    ret1233  %elt.head = insertelement <4 x double> poison, double %a, i32 01234  %va = shufflevector <4 x double> %elt.head, <4 x double> poison, <4 x i32> zeroinitializer1235  %v = call <4 x double> @llvm.vp.merge.v4f64(<4 x i1> %m, <4 x double> %va, <4 x double> %vb, i32 %evl)1236  ret <4 x double> %v1237}1238 1239define <8 x double> @vpmerge_vv_v8f64(<8 x double> %va, <8 x double> %vb, <8 x i1> %m, i32 zeroext %evl) {1240; CHECK-LABEL: vpmerge_vv_v8f64:1241; CHECK:       # %bb.0:1242; CHECK-NEXT:    vsetvli zero, a0, e64, m4, tu, ma1243; CHECK-NEXT:    vmerge.vvm v12, v12, v8, v01244; CHECK-NEXT:    vmv4r.v v8, v121245; CHECK-NEXT:    ret1246  %v = call <8 x double> @llvm.vp.merge.v8f64(<8 x i1> %m, <8 x double> %va, <8 x double> %vb, i32 %evl)1247  ret <8 x double> %v1248}1249 1250define <8 x double> @vpmerge_vf_v8f64(double %a, <8 x double> %vb, <8 x i1> %m, i32 zeroext %evl) {1251; CHECK-LABEL: vpmerge_vf_v8f64:1252; CHECK:       # %bb.0:1253; CHECK-NEXT:    vsetvli zero, a0, e64, m4, tu, ma1254; CHECK-NEXT:    vfmerge.vfm v8, v8, fa0, v01255; CHECK-NEXT:    ret1256  %elt.head = insertelement <8 x double> poison, double %a, i32 01257  %va = shufflevector <8 x double> %elt.head, <8 x double> poison, <8 x i32> zeroinitializer1258  %v = call <8 x double> @llvm.vp.merge.v8f64(<8 x i1> %m, <8 x double> %va, <8 x double> %vb, i32 %evl)1259  ret <8 x double> %v1260}1261 1262define <16 x double> @vpmerge_vv_v16f64(<16 x double> %va, <16 x double> %vb, <16 x i1> %m, i32 zeroext %evl) {1263; CHECK-LABEL: vpmerge_vv_v16f64:1264; CHECK:       # %bb.0:1265; CHECK-NEXT:    vsetvli zero, a0, e64, m8, tu, ma1266; CHECK-NEXT:    vmerge.vvm v16, v16, v8, v01267; CHECK-NEXT:    vmv8r.v v8, v161268; CHECK-NEXT:    ret1269  %v = call <16 x double> @llvm.vp.merge.v16f64(<16 x i1> %m, <16 x double> %va, <16 x double> %vb, i32 %evl)1270  ret <16 x double> %v1271}1272 1273define <16 x double> @vpmerge_vf_v16f64(double %a, <16 x double> %vb, <16 x i1> %m, i32 zeroext %evl) {1274; CHECK-LABEL: vpmerge_vf_v16f64:1275; CHECK:       # %bb.0:1276; CHECK-NEXT:    vsetvli zero, a0, e64, m8, tu, ma1277; CHECK-NEXT:    vfmerge.vfm v8, v8, fa0, v01278; CHECK-NEXT:    ret1279  %elt.head = insertelement <16 x double> poison, double %a, i32 01280  %va = shufflevector <16 x double> %elt.head, <16 x double> poison, <16 x i32> zeroinitializer1281  %v = call <16 x double> @llvm.vp.merge.v16f64(<16 x i1> %m, <16 x double> %va, <16 x double> %vb, i32 %evl)1282  ret <16 x double> %v1283}1284 1285define <32 x double> @vpmerge_vv_v32f64(<32 x double> %va, <32 x double> %vb, <32 x i1> %m, i32 zeroext %evl) {1286; CHECK-LABEL: vpmerge_vv_v32f64:1287; CHECK:       # %bb.0:1288; CHECK-NEXT:    addi sp, sp, -161289; CHECK-NEXT:    .cfi_def_cfa_offset 161290; CHECK-NEXT:    csrr a1, vlenb1291; CHECK-NEXT:    slli a1, a1, 31292; CHECK-NEXT:    sub sp, sp, a11293; CHECK-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x08, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 8 * vlenb1294; CHECK-NEXT:    addi a1, sp, 161295; CHECK-NEXT:    vs8r.v v16, (a1) # vscale x 64-byte Folded Spill1296; CHECK-NEXT:    vsetivli zero, 16, e64, m8, ta, ma1297; CHECK-NEXT:    vmv8r.v v16, v81298; CHECK-NEXT:    addi a1, a0, 1281299; CHECK-NEXT:    vle64.v v24, (a1)1300; CHECK-NEXT:    vle64.v v8, (a0)1301; CHECK-NEXT:    li a1, 161302; CHECK-NEXT:    mv a0, a21303; CHECK-NEXT:    bltu a2, a1, .LBB83_21304; CHECK-NEXT:  # %bb.1:1305; CHECK-NEXT:    li a0, 161306; CHECK-NEXT:  .LBB83_2:1307; CHECK-NEXT:    vsetvli zero, a0, e64, m8, tu, ma1308; CHECK-NEXT:    vmerge.vvm v8, v8, v16, v01309; CHECK-NEXT:    addi a0, a2, -161310; CHECK-NEXT:    sltu a1, a2, a01311; CHECK-NEXT:    addi a1, a1, -11312; CHECK-NEXT:    vsetivli zero, 2, e8, mf4, ta, ma1313; CHECK-NEXT:    vslidedown.vi v0, v0, 21314; CHECK-NEXT:    and a0, a1, a01315; CHECK-NEXT:    addi a1, sp, 161316; CHECK-NEXT:    vl8r.v v16, (a1) # vscale x 64-byte Folded Reload1317; CHECK-NEXT:    vsetvli zero, a0, e64, m8, tu, ma1318; CHECK-NEXT:    vmerge.vvm v24, v24, v16, v01319; CHECK-NEXT:    vmv8r.v v16, v241320; CHECK-NEXT:    csrr a0, vlenb1321; CHECK-NEXT:    slli a0, a0, 31322; CHECK-NEXT:    add sp, sp, a01323; CHECK-NEXT:    .cfi_def_cfa sp, 161324; CHECK-NEXT:    addi sp, sp, 161325; CHECK-NEXT:    .cfi_def_cfa_offset 01326; CHECK-NEXT:    ret1327  %v = call <32 x double> @llvm.vp.merge.v32f64(<32 x i1> %m, <32 x double> %va, <32 x double> %vb, i32 %evl)1328  ret <32 x double> %v1329}1330 1331define <32 x double> @vpmerge_vf_v32f64(double %a, <32 x double> %vb, <32 x i1> %m, i32 zeroext %evl) {1332; CHECK-LABEL: vpmerge_vf_v32f64:1333; CHECK:       # %bb.0:1334; CHECK-NEXT:    li a2, 161335; CHECK-NEXT:    mv a1, a01336; CHECK-NEXT:    bltu a0, a2, .LBB84_21337; CHECK-NEXT:  # %bb.1:1338; CHECK-NEXT:    li a1, 161339; CHECK-NEXT:  .LBB84_2:1340; CHECK-NEXT:    vsetvli zero, a1, e64, m8, tu, ma1341; CHECK-NEXT:    vfmerge.vfm v8, v8, fa0, v01342; CHECK-NEXT:    addi a1, a0, -161343; CHECK-NEXT:    sltu a0, a0, a11344; CHECK-NEXT:    addi a0, a0, -11345; CHECK-NEXT:    vsetivli zero, 2, e8, mf4, ta, ma1346; CHECK-NEXT:    vslidedown.vi v0, v0, 21347; CHECK-NEXT:    and a0, a0, a11348; CHECK-NEXT:    vsetvli zero, a0, e64, m8, tu, ma1349; CHECK-NEXT:    vfmerge.vfm v16, v16, fa0, v01350; CHECK-NEXT:    ret1351  %elt.head = insertelement <32 x double> poison, double %a, i32 01352  %va = shufflevector <32 x double> %elt.head, <32 x double> poison, <32 x i32> zeroinitializer1353  %v = call <32 x double> @llvm.vp.merge.v32f64(<32 x i1> %m, <32 x double> %va, <32 x double> %vb, i32 %evl)1354  ret <32 x double> %v1355}1356