4211 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple riscv32 -mattr=+m,+f,+d,+v,+zvfhmin,+zvfbfmin < %s | FileCheck %s --check-prefixes=CHECK,NOVLDEP3; RUN: llc -mtriple riscv64 -mattr=+m,+f,+d,+v,+zvfhmin,+zvfbfmin < %s | FileCheck %s --check-prefixes=CHECK,NOVLDEP4; RUN: llc -mtriple riscv32 -mattr=+m,+f,+d,+v,+zvfh,+zvfbfmin < %s | FileCheck %s --check-prefixes=CHECK,NOVLDEP5; RUN: llc -mtriple riscv64 -mattr=+m,+f,+d,+v,+zvfh,+zvfbfmin < %s | FileCheck %s --check-prefixes=CHECK,NOVLDEP6; RUN: llc -mtriple riscv32 -mattr=+m,+f,+d,+v,+zvfhmin,+zvfbfmin,+vl-dependent-latency < %s | FileCheck %s --check-prefixes=CHECK,VLDEP7; RUN: llc -mtriple riscv64 -mattr=+m,+f,+d,+v,+zvfhmin,+zvfbfmin,+vl-dependent-latency < %s | FileCheck %s --check-prefixes=CHECK,VLDEP8; RUN: llc -mtriple riscv32 -mattr=+m,+f,+d,+v,+zvfh,+zvfbfmin,+vl-dependent-latency < %s | FileCheck %s --check-prefixes=CHECK,VLDEP9; RUN: llc -mtriple riscv64 -mattr=+m,+f,+d,+v,+zvfh,+zvfbfmin,+vl-dependent-latency < %s | FileCheck %s --check-prefixes=CHECK,VLDEP10 11; Tests assume VLEN=128 or vscale_range_min=2.12 13define <vscale x 1 x i1> @splice_nxv1i1_offset_negone(<vscale x 1 x i1> %a, <vscale x 1 x i1> %b) #0 {14; NOVLDEP-LABEL: splice_nxv1i1_offset_negone:15; NOVLDEP: # %bb.0:16; NOVLDEP-NEXT: vsetvli a0, zero, e8, mf8, ta, ma17; NOVLDEP-NEXT: vmv1r.v v9, v018; NOVLDEP-NEXT: vmv1r.v v0, v819; NOVLDEP-NEXT: vmv.v.i v8, 020; NOVLDEP-NEXT: csrr a0, vlenb21; NOVLDEP-NEXT: vmerge.vim v10, v8, 1, v022; NOVLDEP-NEXT: vmv1r.v v0, v923; NOVLDEP-NEXT: vmerge.vim v8, v8, 1, v024; NOVLDEP-NEXT: srli a0, a0, 325; NOVLDEP-NEXT: addi a0, a0, -126; NOVLDEP-NEXT: vslidedown.vx v8, v8, a027; NOVLDEP-NEXT: vslideup.vi v8, v10, 128; NOVLDEP-NEXT: vand.vi v8, v8, 129; NOVLDEP-NEXT: vmsne.vi v0, v8, 030; NOVLDEP-NEXT: ret31;32; VLDEP-LABEL: splice_nxv1i1_offset_negone:33; VLDEP: # %bb.0:34; VLDEP-NEXT: vsetvli a0, zero, e8, mf8, ta, ma35; VLDEP-NEXT: vmv1r.v v9, v036; VLDEP-NEXT: vmv1r.v v0, v837; VLDEP-NEXT: vmv.v.i v8, 038; VLDEP-NEXT: csrr a0, vlenb39; VLDEP-NEXT: vmerge.vim v10, v8, 1, v040; VLDEP-NEXT: vmv1r.v v0, v941; VLDEP-NEXT: vmerge.vim v8, v8, 1, v042; VLDEP-NEXT: srli a0, a0, 343; VLDEP-NEXT: addi a0, a0, -144; VLDEP-NEXT: vsetivli zero, 1, e8, mf8, ta, ma45; VLDEP-NEXT: vslidedown.vx v8, v8, a046; VLDEP-NEXT: vsetvli a0, zero, e8, mf8, ta, ma47; VLDEP-NEXT: vslideup.vi v8, v10, 148; VLDEP-NEXT: vand.vi v8, v8, 149; VLDEP-NEXT: vmsne.vi v0, v8, 050; VLDEP-NEXT: ret51 %res = call <vscale x 1 x i1> @llvm.vector.splice.nxv1i1(<vscale x 1 x i1> %a, <vscale x 1 x i1> %b, i32 -1)52 ret <vscale x 1 x i1> %res53}54 55define <vscale x 1 x i1> @splice_nxv1i1_offset_max(<vscale x 1 x i1> %a, <vscale x 1 x i1> %b) #0 {56; NOVLDEP-LABEL: splice_nxv1i1_offset_max:57; NOVLDEP: # %bb.0:58; NOVLDEP-NEXT: vsetvli a0, zero, e8, mf8, ta, ma59; NOVLDEP-NEXT: vmv1r.v v9, v060; NOVLDEP-NEXT: vmv1r.v v0, v861; NOVLDEP-NEXT: vmv.v.i v8, 062; NOVLDEP-NEXT: csrr a0, vlenb63; NOVLDEP-NEXT: vmerge.vim v10, v8, 1, v064; NOVLDEP-NEXT: vmv1r.v v0, v965; NOVLDEP-NEXT: vmerge.vim v8, v8, 1, v066; NOVLDEP-NEXT: srli a0, a0, 367; NOVLDEP-NEXT: vslidedown.vi v8, v8, 168; NOVLDEP-NEXT: addi a0, a0, -169; NOVLDEP-NEXT: vslideup.vx v8, v10, a070; NOVLDEP-NEXT: vand.vi v8, v8, 171; NOVLDEP-NEXT: vmsne.vi v0, v8, 072; NOVLDEP-NEXT: ret73;74; VLDEP-LABEL: splice_nxv1i1_offset_max:75; VLDEP: # %bb.0:76; VLDEP-NEXT: vsetvli a0, zero, e8, mf8, ta, ma77; VLDEP-NEXT: vmv1r.v v9, v078; VLDEP-NEXT: vmv1r.v v0, v879; VLDEP-NEXT: vmv.v.i v8, 080; VLDEP-NEXT: csrr a0, vlenb81; VLDEP-NEXT: vmerge.vim v10, v8, 1, v082; VLDEP-NEXT: vmv1r.v v0, v983; VLDEP-NEXT: vmerge.vim v8, v8, 1, v084; VLDEP-NEXT: srli a0, a0, 385; VLDEP-NEXT: addi a0, a0, -186; VLDEP-NEXT: vsetvli zero, a0, e8, mf8, ta, ma87; VLDEP-NEXT: vslidedown.vi v8, v8, 188; VLDEP-NEXT: vsetvli a1, zero, e8, mf8, ta, ma89; VLDEP-NEXT: vslideup.vx v8, v10, a090; VLDEP-NEXT: vand.vi v8, v8, 191; VLDEP-NEXT: vmsne.vi v0, v8, 092; VLDEP-NEXT: ret93 %res = call <vscale x 1 x i1> @llvm.vector.splice.nxv1i1(<vscale x 1 x i1> %a, <vscale x 1 x i1> %b, i32 1)94 ret <vscale x 1 x i1> %res95}96 97define <vscale x 2 x i1> @splice_nxv2i1_offset_negone(<vscale x 2 x i1> %a, <vscale x 2 x i1> %b) #0 {98; NOVLDEP-LABEL: splice_nxv2i1_offset_negone:99; NOVLDEP: # %bb.0:100; NOVLDEP-NEXT: vsetvli a0, zero, e8, mf4, ta, ma101; NOVLDEP-NEXT: vmv1r.v v9, v0102; NOVLDEP-NEXT: vmv1r.v v0, v8103; NOVLDEP-NEXT: vmv.v.i v8, 0104; NOVLDEP-NEXT: csrr a0, vlenb105; NOVLDEP-NEXT: vmerge.vim v10, v8, 1, v0106; NOVLDEP-NEXT: vmv1r.v v0, v9107; NOVLDEP-NEXT: vmerge.vim v8, v8, 1, v0108; NOVLDEP-NEXT: srli a0, a0, 2109; NOVLDEP-NEXT: addi a0, a0, -1110; NOVLDEP-NEXT: vslidedown.vx v8, v8, a0111; NOVLDEP-NEXT: vslideup.vi v8, v10, 1112; NOVLDEP-NEXT: vand.vi v8, v8, 1113; NOVLDEP-NEXT: vmsne.vi v0, v8, 0114; NOVLDEP-NEXT: ret115;116; VLDEP-LABEL: splice_nxv2i1_offset_negone:117; VLDEP: # %bb.0:118; VLDEP-NEXT: vsetvli a0, zero, e8, mf4, ta, ma119; VLDEP-NEXT: vmv1r.v v9, v0120; VLDEP-NEXT: vmv1r.v v0, v8121; VLDEP-NEXT: vmv.v.i v8, 0122; VLDEP-NEXT: csrr a0, vlenb123; VLDEP-NEXT: vmerge.vim v10, v8, 1, v0124; VLDEP-NEXT: vmv1r.v v0, v9125; VLDEP-NEXT: vmerge.vim v8, v8, 1, v0126; VLDEP-NEXT: srli a0, a0, 2127; VLDEP-NEXT: addi a0, a0, -1128; VLDEP-NEXT: vsetivli zero, 1, e8, mf4, ta, ma129; VLDEP-NEXT: vslidedown.vx v8, v8, a0130; VLDEP-NEXT: vsetvli a0, zero, e8, mf4, ta, ma131; VLDEP-NEXT: vslideup.vi v8, v10, 1132; VLDEP-NEXT: vand.vi v8, v8, 1133; VLDEP-NEXT: vmsne.vi v0, v8, 0134; VLDEP-NEXT: ret135 %res = call <vscale x 2 x i1> @llvm.vector.splice.nxv2i1(<vscale x 2 x i1> %a, <vscale x 2 x i1> %b, i32 -1)136 ret <vscale x 2 x i1> %res137}138 139define <vscale x 2 x i1> @splice_nxv2i1_offset_max(<vscale x 2 x i1> %a, <vscale x 2 x i1> %b) #0 {140; NOVLDEP-LABEL: splice_nxv2i1_offset_max:141; NOVLDEP: # %bb.0:142; NOVLDEP-NEXT: vsetvli a0, zero, e8, mf4, ta, ma143; NOVLDEP-NEXT: vmv1r.v v9, v0144; NOVLDEP-NEXT: vmv1r.v v0, v8145; NOVLDEP-NEXT: vmv.v.i v8, 0146; NOVLDEP-NEXT: csrr a0, vlenb147; NOVLDEP-NEXT: vmerge.vim v10, v8, 1, v0148; NOVLDEP-NEXT: vmv1r.v v0, v9149; NOVLDEP-NEXT: vmerge.vim v8, v8, 1, v0150; NOVLDEP-NEXT: srli a0, a0, 2151; NOVLDEP-NEXT: vslidedown.vi v8, v8, 3152; NOVLDEP-NEXT: addi a0, a0, -3153; NOVLDEP-NEXT: vslideup.vx v8, v10, a0154; NOVLDEP-NEXT: vand.vi v8, v8, 1155; NOVLDEP-NEXT: vmsne.vi v0, v8, 0156; NOVLDEP-NEXT: ret157;158; VLDEP-LABEL: splice_nxv2i1_offset_max:159; VLDEP: # %bb.0:160; VLDEP-NEXT: vsetvli a0, zero, e8, mf4, ta, ma161; VLDEP-NEXT: vmv1r.v v9, v0162; VLDEP-NEXT: vmv1r.v v0, v8163; VLDEP-NEXT: vmv.v.i v8, 0164; VLDEP-NEXT: csrr a0, vlenb165; VLDEP-NEXT: vmerge.vim v10, v8, 1, v0166; VLDEP-NEXT: vmv1r.v v0, v9167; VLDEP-NEXT: vmerge.vim v8, v8, 1, v0168; VLDEP-NEXT: srli a0, a0, 2169; VLDEP-NEXT: addi a0, a0, -3170; VLDEP-NEXT: vsetvli zero, a0, e8, mf4, ta, ma171; VLDEP-NEXT: vslidedown.vi v8, v8, 3172; VLDEP-NEXT: vsetvli a1, zero, e8, mf4, ta, ma173; VLDEP-NEXT: vslideup.vx v8, v10, a0174; VLDEP-NEXT: vand.vi v8, v8, 1175; VLDEP-NEXT: vmsne.vi v0, v8, 0176; VLDEP-NEXT: ret177 %res = call <vscale x 2 x i1> @llvm.vector.splice.nxv2i1(<vscale x 2 x i1> %a, <vscale x 2 x i1> %b, i32 3)178 ret <vscale x 2 x i1> %res179}180 181define <vscale x 4 x i1> @splice_nxv4i1_offset_negone(<vscale x 4 x i1> %a, <vscale x 4 x i1> %b) #0 {182; NOVLDEP-LABEL: splice_nxv4i1_offset_negone:183; NOVLDEP: # %bb.0:184; NOVLDEP-NEXT: vsetvli a0, zero, e8, mf2, ta, ma185; NOVLDEP-NEXT: vmv1r.v v9, v0186; NOVLDEP-NEXT: vmv1r.v v0, v8187; NOVLDEP-NEXT: vmv.v.i v8, 0188; NOVLDEP-NEXT: csrr a0, vlenb189; NOVLDEP-NEXT: vmerge.vim v10, v8, 1, v0190; NOVLDEP-NEXT: vmv1r.v v0, v9191; NOVLDEP-NEXT: vmerge.vim v8, v8, 1, v0192; NOVLDEP-NEXT: srli a0, a0, 1193; NOVLDEP-NEXT: addi a0, a0, -1194; NOVLDEP-NEXT: vslidedown.vx v8, v8, a0195; NOVLDEP-NEXT: vslideup.vi v8, v10, 1196; NOVLDEP-NEXT: vand.vi v8, v8, 1197; NOVLDEP-NEXT: vmsne.vi v0, v8, 0198; NOVLDEP-NEXT: ret199;200; VLDEP-LABEL: splice_nxv4i1_offset_negone:201; VLDEP: # %bb.0:202; VLDEP-NEXT: vsetvli a0, zero, e8, mf2, ta, ma203; VLDEP-NEXT: vmv1r.v v9, v0204; VLDEP-NEXT: vmv1r.v v0, v8205; VLDEP-NEXT: vmv.v.i v8, 0206; VLDEP-NEXT: csrr a0, vlenb207; VLDEP-NEXT: vmerge.vim v10, v8, 1, v0208; VLDEP-NEXT: vmv1r.v v0, v9209; VLDEP-NEXT: vmerge.vim v8, v8, 1, v0210; VLDEP-NEXT: srli a0, a0, 1211; VLDEP-NEXT: addi a0, a0, -1212; VLDEP-NEXT: vsetivli zero, 1, e8, mf2, ta, ma213; VLDEP-NEXT: vslidedown.vx v8, v8, a0214; VLDEP-NEXT: vsetvli a0, zero, e8, mf2, ta, ma215; VLDEP-NEXT: vslideup.vi v8, v10, 1216; VLDEP-NEXT: vand.vi v8, v8, 1217; VLDEP-NEXT: vmsne.vi v0, v8, 0218; VLDEP-NEXT: ret219 %res = call <vscale x 4 x i1> @llvm.vector.splice.nxv4i1(<vscale x 4 x i1> %a, <vscale x 4 x i1> %b, i32 -1)220 ret <vscale x 4 x i1> %res221}222 223define <vscale x 4 x i1> @splice_nxv4i1_offset_max(<vscale x 4 x i1> %a, <vscale x 4 x i1> %b) #0 {224; NOVLDEP-LABEL: splice_nxv4i1_offset_max:225; NOVLDEP: # %bb.0:226; NOVLDEP-NEXT: vsetvli a0, zero, e8, mf2, ta, ma227; NOVLDEP-NEXT: vmv1r.v v9, v0228; NOVLDEP-NEXT: vmv1r.v v0, v8229; NOVLDEP-NEXT: vmv.v.i v8, 0230; NOVLDEP-NEXT: csrr a0, vlenb231; NOVLDEP-NEXT: vmerge.vim v10, v8, 1, v0232; NOVLDEP-NEXT: vmv1r.v v0, v9233; NOVLDEP-NEXT: vmerge.vim v8, v8, 1, v0234; NOVLDEP-NEXT: srli a0, a0, 1235; NOVLDEP-NEXT: vslidedown.vi v8, v8, 7236; NOVLDEP-NEXT: addi a0, a0, -7237; NOVLDEP-NEXT: vslideup.vx v8, v10, a0238; NOVLDEP-NEXT: vand.vi v8, v8, 1239; NOVLDEP-NEXT: vmsne.vi v0, v8, 0240; NOVLDEP-NEXT: ret241;242; VLDEP-LABEL: splice_nxv4i1_offset_max:243; VLDEP: # %bb.0:244; VLDEP-NEXT: vsetvli a0, zero, e8, mf2, ta, ma245; VLDEP-NEXT: vmv1r.v v9, v0246; VLDEP-NEXT: vmv1r.v v0, v8247; VLDEP-NEXT: vmv.v.i v8, 0248; VLDEP-NEXT: csrr a0, vlenb249; VLDEP-NEXT: vmerge.vim v10, v8, 1, v0250; VLDEP-NEXT: vmv1r.v v0, v9251; VLDEP-NEXT: vmerge.vim v8, v8, 1, v0252; VLDEP-NEXT: srli a0, a0, 1253; VLDEP-NEXT: addi a0, a0, -7254; VLDEP-NEXT: vsetvli zero, a0, e8, mf2, ta, ma255; VLDEP-NEXT: vslidedown.vi v8, v8, 7256; VLDEP-NEXT: vsetvli a1, zero, e8, mf2, ta, ma257; VLDEP-NEXT: vslideup.vx v8, v10, a0258; VLDEP-NEXT: vand.vi v8, v8, 1259; VLDEP-NEXT: vmsne.vi v0, v8, 0260; VLDEP-NEXT: ret261 %res = call <vscale x 4 x i1> @llvm.vector.splice.nxv4i1(<vscale x 4 x i1> %a, <vscale x 4 x i1> %b, i32 7)262 ret <vscale x 4 x i1> %res263}264 265define <vscale x 8 x i1> @splice_nxv8i1_offset_negone(<vscale x 8 x i1> %a, <vscale x 8 x i1> %b) #0 {266; NOVLDEP-LABEL: splice_nxv8i1_offset_negone:267; NOVLDEP: # %bb.0:268; NOVLDEP-NEXT: vsetvli a0, zero, e8, m1, ta, ma269; NOVLDEP-NEXT: vmv1r.v v9, v0270; NOVLDEP-NEXT: vmv1r.v v0, v8271; NOVLDEP-NEXT: vmv.v.i v8, 0272; NOVLDEP-NEXT: csrr a0, vlenb273; NOVLDEP-NEXT: vmerge.vim v10, v8, 1, v0274; NOVLDEP-NEXT: vmv1r.v v0, v9275; NOVLDEP-NEXT: vmerge.vim v8, v8, 1, v0276; NOVLDEP-NEXT: addi a0, a0, -1277; NOVLDEP-NEXT: vslidedown.vx v8, v8, a0278; NOVLDEP-NEXT: vslideup.vi v8, v10, 1279; NOVLDEP-NEXT: vand.vi v8, v8, 1280; NOVLDEP-NEXT: vmsne.vi v0, v8, 0281; NOVLDEP-NEXT: ret282;283; VLDEP-LABEL: splice_nxv8i1_offset_negone:284; VLDEP: # %bb.0:285; VLDEP-NEXT: vsetvli a0, zero, e8, m1, ta, ma286; VLDEP-NEXT: vmv1r.v v9, v0287; VLDEP-NEXT: vmv1r.v v0, v8288; VLDEP-NEXT: vmv.v.i v8, 0289; VLDEP-NEXT: csrr a0, vlenb290; VLDEP-NEXT: vmerge.vim v10, v8, 1, v0291; VLDEP-NEXT: vmv1r.v v0, v9292; VLDEP-NEXT: vmerge.vim v8, v8, 1, v0293; VLDEP-NEXT: addi a0, a0, -1294; VLDEP-NEXT: vsetivli zero, 1, e8, m1, ta, ma295; VLDEP-NEXT: vslidedown.vx v8, v8, a0296; VLDEP-NEXT: vsetvli a0, zero, e8, m1, ta, ma297; VLDEP-NEXT: vslideup.vi v8, v10, 1298; VLDEP-NEXT: vand.vi v8, v8, 1299; VLDEP-NEXT: vmsne.vi v0, v8, 0300; VLDEP-NEXT: ret301 %res = call <vscale x 8 x i1> @llvm.vector.splice.nxv8i1(<vscale x 8 x i1> %a, <vscale x 8 x i1> %b, i32 -1)302 ret <vscale x 8 x i1> %res303}304 305define <vscale x 8 x i1> @splice_nxv8i1_offset_max(<vscale x 8 x i1> %a, <vscale x 8 x i1> %b) #0 {306; NOVLDEP-LABEL: splice_nxv8i1_offset_max:307; NOVLDEP: # %bb.0:308; NOVLDEP-NEXT: vsetvli a0, zero, e8, m1, ta, ma309; NOVLDEP-NEXT: vmv1r.v v9, v0310; NOVLDEP-NEXT: vmv1r.v v0, v8311; NOVLDEP-NEXT: vmv.v.i v8, 0312; NOVLDEP-NEXT: csrr a0, vlenb313; NOVLDEP-NEXT: vmerge.vim v10, v8, 1, v0314; NOVLDEP-NEXT: vmv1r.v v0, v9315; NOVLDEP-NEXT: vmerge.vim v8, v8, 1, v0316; NOVLDEP-NEXT: vslidedown.vi v8, v8, 15317; NOVLDEP-NEXT: addi a0, a0, -15318; NOVLDEP-NEXT: vslideup.vx v8, v10, a0319; NOVLDEP-NEXT: vand.vi v8, v8, 1320; NOVLDEP-NEXT: vmsne.vi v0, v8, 0321; NOVLDEP-NEXT: ret322;323; VLDEP-LABEL: splice_nxv8i1_offset_max:324; VLDEP: # %bb.0:325; VLDEP-NEXT: vsetvli a0, zero, e8, m1, ta, ma326; VLDEP-NEXT: vmv1r.v v9, v0327; VLDEP-NEXT: vmv1r.v v0, v8328; VLDEP-NEXT: vmv.v.i v8, 0329; VLDEP-NEXT: csrr a0, vlenb330; VLDEP-NEXT: vmerge.vim v10, v8, 1, v0331; VLDEP-NEXT: vmv1r.v v0, v9332; VLDEP-NEXT: vmerge.vim v8, v8, 1, v0333; VLDEP-NEXT: addi a0, a0, -15334; VLDEP-NEXT: vsetvli zero, a0, e8, m1, ta, ma335; VLDEP-NEXT: vslidedown.vi v8, v8, 15336; VLDEP-NEXT: vsetvli a1, zero, e8, m1, ta, ma337; VLDEP-NEXT: vslideup.vx v8, v10, a0338; VLDEP-NEXT: vand.vi v8, v8, 1339; VLDEP-NEXT: vmsne.vi v0, v8, 0340; VLDEP-NEXT: ret341 %res = call <vscale x 8 x i1> @llvm.vector.splice.nxv8i1(<vscale x 8 x i1> %a, <vscale x 8 x i1> %b, i32 15)342 ret <vscale x 8 x i1> %res343}344 345define <vscale x 16 x i1> @splice_nxv16i1_offset_negone(<vscale x 16 x i1> %a, <vscale x 16 x i1> %b) #0 {346; NOVLDEP-LABEL: splice_nxv16i1_offset_negone:347; NOVLDEP: # %bb.0:348; NOVLDEP-NEXT: vsetvli a0, zero, e8, m2, ta, ma349; NOVLDEP-NEXT: vmv1r.v v9, v0350; NOVLDEP-NEXT: vmv1r.v v0, v8351; NOVLDEP-NEXT: vmv.v.i v10, 0352; NOVLDEP-NEXT: csrr a0, vlenb353; NOVLDEP-NEXT: vmerge.vim v12, v10, 1, v0354; NOVLDEP-NEXT: vmv1r.v v0, v9355; NOVLDEP-NEXT: vmerge.vim v8, v10, 1, v0356; NOVLDEP-NEXT: slli a0, a0, 1357; NOVLDEP-NEXT: addi a0, a0, -1358; NOVLDEP-NEXT: vslidedown.vx v8, v8, a0359; NOVLDEP-NEXT: vslideup.vi v8, v12, 1360; NOVLDEP-NEXT: vand.vi v8, v8, 1361; NOVLDEP-NEXT: vmsne.vi v0, v8, 0362; NOVLDEP-NEXT: ret363;364; VLDEP-LABEL: splice_nxv16i1_offset_negone:365; VLDEP: # %bb.0:366; VLDEP-NEXT: vsetvli a0, zero, e8, m2, ta, ma367; VLDEP-NEXT: vmv1r.v v9, v0368; VLDEP-NEXT: vmv1r.v v0, v8369; VLDEP-NEXT: vmv.v.i v10, 0370; VLDEP-NEXT: csrr a0, vlenb371; VLDEP-NEXT: vmerge.vim v12, v10, 1, v0372; VLDEP-NEXT: vmv1r.v v0, v9373; VLDEP-NEXT: vmerge.vim v8, v10, 1, v0374; VLDEP-NEXT: slli a0, a0, 1375; VLDEP-NEXT: addi a0, a0, -1376; VLDEP-NEXT: vsetivli zero, 1, e8, m2, ta, ma377; VLDEP-NEXT: vslidedown.vx v8, v8, a0378; VLDEP-NEXT: vsetvli a0, zero, e8, m2, ta, ma379; VLDEP-NEXT: vslideup.vi v8, v12, 1380; VLDEP-NEXT: vand.vi v8, v8, 1381; VLDEP-NEXT: vmsne.vi v0, v8, 0382; VLDEP-NEXT: ret383 %res = call <vscale x 16 x i1> @llvm.vector.splice.nxv16i1(<vscale x 16 x i1> %a, <vscale x 16 x i1> %b, i32 -1)384 ret <vscale x 16 x i1> %res385}386 387define <vscale x 16 x i1> @splice_nxv16i1_offset_max(<vscale x 16 x i1> %a, <vscale x 16 x i1> %b) #0 {388; NOVLDEP-LABEL: splice_nxv16i1_offset_max:389; NOVLDEP: # %bb.0:390; NOVLDEP-NEXT: vsetvli a0, zero, e8, m2, ta, ma391; NOVLDEP-NEXT: vmv1r.v v9, v0392; NOVLDEP-NEXT: vmv1r.v v0, v8393; NOVLDEP-NEXT: vmv.v.i v10, 0394; NOVLDEP-NEXT: csrr a0, vlenb395; NOVLDEP-NEXT: vmerge.vim v12, v10, 1, v0396; NOVLDEP-NEXT: vmv1r.v v0, v9397; NOVLDEP-NEXT: vmerge.vim v8, v10, 1, v0398; NOVLDEP-NEXT: slli a0, a0, 1399; NOVLDEP-NEXT: vslidedown.vi v8, v8, 31400; NOVLDEP-NEXT: addi a0, a0, -31401; NOVLDEP-NEXT: vslideup.vx v8, v12, a0402; NOVLDEP-NEXT: vand.vi v8, v8, 1403; NOVLDEP-NEXT: vmsne.vi v0, v8, 0404; NOVLDEP-NEXT: ret405;406; VLDEP-LABEL: splice_nxv16i1_offset_max:407; VLDEP: # %bb.0:408; VLDEP-NEXT: vsetvli a0, zero, e8, m2, ta, ma409; VLDEP-NEXT: vmv1r.v v9, v0410; VLDEP-NEXT: vmv1r.v v0, v8411; VLDEP-NEXT: vmv.v.i v10, 0412; VLDEP-NEXT: csrr a0, vlenb413; VLDEP-NEXT: vmerge.vim v12, v10, 1, v0414; VLDEP-NEXT: vmv1r.v v0, v9415; VLDEP-NEXT: vmerge.vim v8, v10, 1, v0416; VLDEP-NEXT: slli a0, a0, 1417; VLDEP-NEXT: addi a0, a0, -31418; VLDEP-NEXT: vsetvli zero, a0, e8, m2, ta, ma419; VLDEP-NEXT: vslidedown.vi v8, v8, 31420; VLDEP-NEXT: vsetvli a1, zero, e8, m2, ta, ma421; VLDEP-NEXT: vslideup.vx v8, v12, a0422; VLDEP-NEXT: vand.vi v8, v8, 1423; VLDEP-NEXT: vmsne.vi v0, v8, 0424; VLDEP-NEXT: ret425 %res = call <vscale x 16 x i1> @llvm.vector.splice.nxv16i1(<vscale x 16 x i1> %a, <vscale x 16 x i1> %b, i32 31)426 ret <vscale x 16 x i1> %res427}428 429define <vscale x 32 x i1> @splice_nxv32i1_offset_negone(<vscale x 32 x i1> %a, <vscale x 32 x i1> %b) #0 {430; NOVLDEP-LABEL: splice_nxv32i1_offset_negone:431; NOVLDEP: # %bb.0:432; NOVLDEP-NEXT: vsetvli a0, zero, e8, m4, ta, ma433; NOVLDEP-NEXT: vmv1r.v v9, v0434; NOVLDEP-NEXT: vmv1r.v v0, v8435; NOVLDEP-NEXT: vmv.v.i v12, 0436; NOVLDEP-NEXT: csrr a0, vlenb437; NOVLDEP-NEXT: vmerge.vim v16, v12, 1, v0438; NOVLDEP-NEXT: vmv1r.v v0, v9439; NOVLDEP-NEXT: vmerge.vim v8, v12, 1, v0440; NOVLDEP-NEXT: slli a0, a0, 2441; NOVLDEP-NEXT: addi a0, a0, -1442; NOVLDEP-NEXT: vslidedown.vx v8, v8, a0443; NOVLDEP-NEXT: vslideup.vi v8, v16, 1444; NOVLDEP-NEXT: vand.vi v8, v8, 1445; NOVLDEP-NEXT: vmsne.vi v0, v8, 0446; NOVLDEP-NEXT: ret447;448; VLDEP-LABEL: splice_nxv32i1_offset_negone:449; VLDEP: # %bb.0:450; VLDEP-NEXT: vsetvli a0, zero, e8, m4, ta, ma451; VLDEP-NEXT: vmv1r.v v9, v0452; VLDEP-NEXT: vmv1r.v v0, v8453; VLDEP-NEXT: vmv.v.i v12, 0454; VLDEP-NEXT: csrr a0, vlenb455; VLDEP-NEXT: vmerge.vim v16, v12, 1, v0456; VLDEP-NEXT: vmv1r.v v0, v9457; VLDEP-NEXT: vmerge.vim v8, v12, 1, v0458; VLDEP-NEXT: slli a0, a0, 2459; VLDEP-NEXT: addi a0, a0, -1460; VLDEP-NEXT: vsetivli zero, 1, e8, m4, ta, ma461; VLDEP-NEXT: vslidedown.vx v8, v8, a0462; VLDEP-NEXT: vsetvli a0, zero, e8, m4, ta, ma463; VLDEP-NEXT: vslideup.vi v8, v16, 1464; VLDEP-NEXT: vand.vi v8, v8, 1465; VLDEP-NEXT: vmsne.vi v0, v8, 0466; VLDEP-NEXT: ret467 %res = call <vscale x 32 x i1> @llvm.vector.splice.nxv32i1(<vscale x 32 x i1> %a, <vscale x 32 x i1> %b, i32 -1)468 ret <vscale x 32 x i1> %res469}470 471define <vscale x 32 x i1> @splice_nxv32i1_offset_max(<vscale x 32 x i1> %a, <vscale x 32 x i1> %b) #0 {472; NOVLDEP-LABEL: splice_nxv32i1_offset_max:473; NOVLDEP: # %bb.0:474; NOVLDEP-NEXT: vsetvli a0, zero, e8, m4, ta, ma475; NOVLDEP-NEXT: vmv1r.v v9, v0476; NOVLDEP-NEXT: vmv1r.v v0, v8477; NOVLDEP-NEXT: vmv.v.i v12, 0478; NOVLDEP-NEXT: li a0, 63479; NOVLDEP-NEXT: vmerge.vim v16, v12, 1, v0480; NOVLDEP-NEXT: vmv1r.v v0, v9481; NOVLDEP-NEXT: vmerge.vim v8, v12, 1, v0482; NOVLDEP-NEXT: vslidedown.vx v8, v8, a0483; NOVLDEP-NEXT: csrr a0, vlenb484; NOVLDEP-NEXT: slli a0, a0, 2485; NOVLDEP-NEXT: addi a0, a0, -63486; NOVLDEP-NEXT: vslideup.vx v8, v16, a0487; NOVLDEP-NEXT: vand.vi v8, v8, 1488; NOVLDEP-NEXT: vmsne.vi v0, v8, 0489; NOVLDEP-NEXT: ret490;491; VLDEP-LABEL: splice_nxv32i1_offset_max:492; VLDEP: # %bb.0:493; VLDEP-NEXT: vsetvli a0, zero, e8, m4, ta, ma494; VLDEP-NEXT: vmv.v.i v12, 0495; VLDEP-NEXT: csrr a0, vlenb496; VLDEP-NEXT: li a1, 63497; VLDEP-NEXT: vmerge.vim v16, v12, 1, v0498; VLDEP-NEXT: slli a0, a0, 2499; VLDEP-NEXT: addi a0, a0, -63500; VLDEP-NEXT: vsetvli zero, a0, e8, m4, ta, ma501; VLDEP-NEXT: vslidedown.vx v16, v16, a1502; VLDEP-NEXT: vmv1r.v v0, v8503; VLDEP-NEXT: vsetvli a1, zero, e8, m4, ta, ma504; VLDEP-NEXT: vmerge.vim v8, v12, 1, v0505; VLDEP-NEXT: vslideup.vx v16, v8, a0506; VLDEP-NEXT: vand.vi v8, v16, 1507; VLDEP-NEXT: vmsne.vi v0, v8, 0508; VLDEP-NEXT: ret509 %res = call <vscale x 32 x i1> @llvm.vector.splice.nxv32i1(<vscale x 32 x i1> %a, <vscale x 32 x i1> %b, i32 63)510 ret <vscale x 32 x i1> %res511}512 513define <vscale x 64 x i1> @splice_nxv64i1_offset_negone(<vscale x 64 x i1> %a, <vscale x 64 x i1> %b) #0 {514; NOVLDEP-LABEL: splice_nxv64i1_offset_negone:515; NOVLDEP: # %bb.0:516; NOVLDEP-NEXT: vsetvli a0, zero, e8, m8, ta, ma517; NOVLDEP-NEXT: vmv1r.v v9, v0518; NOVLDEP-NEXT: vmv1r.v v0, v8519; NOVLDEP-NEXT: vmv.v.i v24, 0520; NOVLDEP-NEXT: csrr a0, vlenb521; NOVLDEP-NEXT: vmerge.vim v16, v24, 1, v0522; NOVLDEP-NEXT: vmv1r.v v0, v9523; NOVLDEP-NEXT: vmerge.vim v8, v24, 1, v0524; NOVLDEP-NEXT: slli a0, a0, 3525; NOVLDEP-NEXT: addi a0, a0, -1526; NOVLDEP-NEXT: vslidedown.vx v8, v8, a0527; NOVLDEP-NEXT: vslideup.vi v8, v16, 1528; NOVLDEP-NEXT: vand.vi v8, v8, 1529; NOVLDEP-NEXT: vmsne.vi v0, v8, 0530; NOVLDEP-NEXT: ret531;532; VLDEP-LABEL: splice_nxv64i1_offset_negone:533; VLDEP: # %bb.0:534; VLDEP-NEXT: vsetvli a0, zero, e8, m8, ta, ma535; VLDEP-NEXT: vmv1r.v v9, v0536; VLDEP-NEXT: vmv1r.v v0, v8537; VLDEP-NEXT: vmv.v.i v24, 0538; VLDEP-NEXT: csrr a0, vlenb539; VLDEP-NEXT: vmerge.vim v16, v24, 1, v0540; VLDEP-NEXT: vmv1r.v v0, v9541; VLDEP-NEXT: vmerge.vim v8, v24, 1, v0542; VLDEP-NEXT: slli a0, a0, 3543; VLDEP-NEXT: addi a0, a0, -1544; VLDEP-NEXT: vsetivli zero, 1, e8, m8, ta, ma545; VLDEP-NEXT: vslidedown.vx v8, v8, a0546; VLDEP-NEXT: vsetvli a0, zero, e8, m8, ta, ma547; VLDEP-NEXT: vslideup.vi v8, v16, 1548; VLDEP-NEXT: vand.vi v8, v8, 1549; VLDEP-NEXT: vmsne.vi v0, v8, 0550; VLDEP-NEXT: ret551 %res = call <vscale x 64 x i1> @llvm.vector.splice.nxv64i1(<vscale x 64 x i1> %a, <vscale x 64 x i1> %b, i32 -1)552 ret <vscale x 64 x i1> %res553}554 555define <vscale x 64 x i1> @splice_nxv64i1_offset_max(<vscale x 64 x i1> %a, <vscale x 64 x i1> %b) #0 {556; NOVLDEP-LABEL: splice_nxv64i1_offset_max:557; NOVLDEP: # %bb.0:558; NOVLDEP-NEXT: vsetvli a0, zero, e8, m8, ta, ma559; NOVLDEP-NEXT: vmv1r.v v9, v0560; NOVLDEP-NEXT: vmv1r.v v0, v8561; NOVLDEP-NEXT: vmv.v.i v24, 0562; NOVLDEP-NEXT: li a0, 127563; NOVLDEP-NEXT: vmerge.vim v16, v24, 1, v0564; NOVLDEP-NEXT: vmv1r.v v0, v9565; NOVLDEP-NEXT: vmerge.vim v8, v24, 1, v0566; NOVLDEP-NEXT: vslidedown.vx v8, v8, a0567; NOVLDEP-NEXT: csrr a0, vlenb568; NOVLDEP-NEXT: slli a0, a0, 3569; NOVLDEP-NEXT: addi a0, a0, -127570; NOVLDEP-NEXT: vslideup.vx v8, v16, a0571; NOVLDEP-NEXT: vand.vi v8, v8, 1572; NOVLDEP-NEXT: vmsne.vi v0, v8, 0573; NOVLDEP-NEXT: ret574;575; VLDEP-LABEL: splice_nxv64i1_offset_max:576; VLDEP: # %bb.0:577; VLDEP-NEXT: vsetvli a0, zero, e8, m8, ta, ma578; VLDEP-NEXT: vmv.v.i v16, 0579; VLDEP-NEXT: csrr a0, vlenb580; VLDEP-NEXT: li a1, 127581; VLDEP-NEXT: vmerge.vim v24, v16, 1, v0582; VLDEP-NEXT: slli a0, a0, 3583; VLDEP-NEXT: addi a0, a0, -127584; VLDEP-NEXT: vsetvli zero, a0, e8, m8, ta, ma585; VLDEP-NEXT: vslidedown.vx v24, v24, a1586; VLDEP-NEXT: vmv1r.v v0, v8587; VLDEP-NEXT: vsetvli a1, zero, e8, m8, ta, ma588; VLDEP-NEXT: vmerge.vim v8, v16, 1, v0589; VLDEP-NEXT: vslideup.vx v24, v8, a0590; VLDEP-NEXT: vand.vi v8, v24, 1591; VLDEP-NEXT: vmsne.vi v0, v8, 0592; VLDEP-NEXT: ret593 %res = call <vscale x 64 x i1> @llvm.vector.splice.nxv64i1(<vscale x 64 x i1> %a, <vscale x 64 x i1> %b, i32 127)594 ret <vscale x 64 x i1> %res595}596 597define <vscale x 1 x i8> @splice_nxv1i8_offset_zero(<vscale x 1 x i8> %a, <vscale x 1 x i8> %b) #0 {598; CHECK-LABEL: splice_nxv1i8_offset_zero:599; CHECK: # %bb.0:600; CHECK-NEXT: ret601 %res = call <vscale x 1 x i8> @llvm.vector.splice.nxv1i8(<vscale x 1 x i8> %a, <vscale x 1 x i8> %b, i32 0)602 ret <vscale x 1 x i8> %res603}604 605define <vscale x 1 x i8> @splice_nxv1i8_offset_negone(<vscale x 1 x i8> %a, <vscale x 1 x i8> %b) #0 {606; NOVLDEP-LABEL: splice_nxv1i8_offset_negone:607; NOVLDEP: # %bb.0:608; NOVLDEP-NEXT: csrr a0, vlenb609; NOVLDEP-NEXT: srli a0, a0, 3610; NOVLDEP-NEXT: addi a0, a0, -1611; NOVLDEP-NEXT: vsetvli a1, zero, e8, mf8, ta, ma612; NOVLDEP-NEXT: vslidedown.vx v8, v8, a0613; NOVLDEP-NEXT: vslideup.vi v8, v9, 1614; NOVLDEP-NEXT: ret615;616; VLDEP-LABEL: splice_nxv1i8_offset_negone:617; VLDEP: # %bb.0:618; VLDEP-NEXT: csrr a0, vlenb619; VLDEP-NEXT: srli a0, a0, 3620; VLDEP-NEXT: addi a0, a0, -1621; VLDEP-NEXT: vsetivli zero, 1, e8, mf8, ta, ma622; VLDEP-NEXT: vslidedown.vx v8, v8, a0623; VLDEP-NEXT: vsetvli a0, zero, e8, mf8, ta, ma624; VLDEP-NEXT: vslideup.vi v8, v9, 1625; VLDEP-NEXT: ret626 %res = call <vscale x 1 x i8> @llvm.vector.splice.nxv1i8(<vscale x 1 x i8> %a, <vscale x 1 x i8> %b, i32 -1)627 ret <vscale x 1 x i8> %res628}629 630define <vscale x 1 x i8> @splice_nxv1i8_offset_min(<vscale x 1 x i8> %a, <vscale x 1 x i8> %b) #0 {631; NOVLDEP-LABEL: splice_nxv1i8_offset_min:632; NOVLDEP: # %bb.0:633; NOVLDEP-NEXT: csrr a0, vlenb634; NOVLDEP-NEXT: srli a0, a0, 3635; NOVLDEP-NEXT: addi a0, a0, -2636; NOVLDEP-NEXT: vsetvli a1, zero, e8, mf8, ta, ma637; NOVLDEP-NEXT: vslidedown.vx v8, v8, a0638; NOVLDEP-NEXT: vslideup.vi v8, v9, 2639; NOVLDEP-NEXT: ret640;641; VLDEP-LABEL: splice_nxv1i8_offset_min:642; VLDEP: # %bb.0:643; VLDEP-NEXT: csrr a0, vlenb644; VLDEP-NEXT: srli a0, a0, 3645; VLDEP-NEXT: addi a0, a0, -2646; VLDEP-NEXT: vsetivli zero, 2, e8, mf8, ta, ma647; VLDEP-NEXT: vslidedown.vx v8, v8, a0648; VLDEP-NEXT: vsetvli a0, zero, e8, mf8, ta, ma649; VLDEP-NEXT: vslideup.vi v8, v9, 2650; VLDEP-NEXT: ret651 %res = call <vscale x 1 x i8> @llvm.vector.splice.nxv1i8(<vscale x 1 x i8> %a, <vscale x 1 x i8> %b, i32 -2)652 ret <vscale x 1 x i8> %res653}654 655define <vscale x 1 x i8> @splice_nxv1i8_offset_max(<vscale x 1 x i8> %a, <vscale x 1 x i8> %b) #0 {656; NOVLDEP-LABEL: splice_nxv1i8_offset_max:657; NOVLDEP: # %bb.0:658; NOVLDEP-NEXT: vsetvli a0, zero, e8, mf8, ta, ma659; NOVLDEP-NEXT: vslidedown.vi v8, v8, 1660; NOVLDEP-NEXT: csrr a0, vlenb661; NOVLDEP-NEXT: srli a0, a0, 3662; NOVLDEP-NEXT: addi a0, a0, -1663; NOVLDEP-NEXT: vslideup.vx v8, v9, a0664; NOVLDEP-NEXT: ret665;666; VLDEP-LABEL: splice_nxv1i8_offset_max:667; VLDEP: # %bb.0:668; VLDEP-NEXT: csrr a0, vlenb669; VLDEP-NEXT: srli a0, a0, 3670; VLDEP-NEXT: addi a0, a0, -1671; VLDEP-NEXT: vsetvli zero, a0, e8, mf8, ta, ma672; VLDEP-NEXT: vslidedown.vi v8, v8, 1673; VLDEP-NEXT: vsetvli a1, zero, e8, mf8, ta, ma674; VLDEP-NEXT: vslideup.vx v8, v9, a0675; VLDEP-NEXT: ret676 %res = call <vscale x 1 x i8> @llvm.vector.splice.nxv1i8(<vscale x 1 x i8> %a, <vscale x 1 x i8> %b, i32 1)677 ret <vscale x 1 x i8> %res678}679 680define <vscale x 2 x i8> @splice_nxv2i8_offset_zero(<vscale x 2 x i8> %a, <vscale x 2 x i8> %b) #0 {681; CHECK-LABEL: splice_nxv2i8_offset_zero:682; CHECK: # %bb.0:683; CHECK-NEXT: ret684 %res = call <vscale x 2 x i8> @llvm.vector.splice.nxv2i8(<vscale x 2 x i8> %a, <vscale x 2 x i8> %b, i32 0)685 ret <vscale x 2 x i8> %res686}687 688define <vscale x 2 x i8> @splice_nxv2i8_offset_negone(<vscale x 2 x i8> %a, <vscale x 2 x i8> %b) #0 {689; NOVLDEP-LABEL: splice_nxv2i8_offset_negone:690; NOVLDEP: # %bb.0:691; NOVLDEP-NEXT: csrr a0, vlenb692; NOVLDEP-NEXT: srli a0, a0, 2693; NOVLDEP-NEXT: addi a0, a0, -1694; NOVLDEP-NEXT: vsetvli a1, zero, e8, mf4, ta, ma695; NOVLDEP-NEXT: vslidedown.vx v8, v8, a0696; NOVLDEP-NEXT: vslideup.vi v8, v9, 1697; NOVLDEP-NEXT: ret698;699; VLDEP-LABEL: splice_nxv2i8_offset_negone:700; VLDEP: # %bb.0:701; VLDEP-NEXT: csrr a0, vlenb702; VLDEP-NEXT: srli a0, a0, 2703; VLDEP-NEXT: addi a0, a0, -1704; VLDEP-NEXT: vsetivli zero, 1, e8, mf4, ta, ma705; VLDEP-NEXT: vslidedown.vx v8, v8, a0706; VLDEP-NEXT: vsetvli a0, zero, e8, mf4, ta, ma707; VLDEP-NEXT: vslideup.vi v8, v9, 1708; VLDEP-NEXT: ret709 %res = call <vscale x 2 x i8> @llvm.vector.splice.nxv2i8(<vscale x 2 x i8> %a, <vscale x 2 x i8> %b, i32 -1)710 ret <vscale x 2 x i8> %res711}712 713define <vscale x 2 x i8> @splice_nxv2i8_offset_min(<vscale x 2 x i8> %a, <vscale x 2 x i8> %b) #0 {714; NOVLDEP-LABEL: splice_nxv2i8_offset_min:715; NOVLDEP: # %bb.0:716; NOVLDEP-NEXT: csrr a0, vlenb717; NOVLDEP-NEXT: srli a0, a0, 2718; NOVLDEP-NEXT: addi a0, a0, -4719; NOVLDEP-NEXT: vsetvli a1, zero, e8, mf4, ta, ma720; NOVLDEP-NEXT: vslidedown.vx v8, v8, a0721; NOVLDEP-NEXT: vslideup.vi v8, v9, 4722; NOVLDEP-NEXT: ret723;724; VLDEP-LABEL: splice_nxv2i8_offset_min:725; VLDEP: # %bb.0:726; VLDEP-NEXT: csrr a0, vlenb727; VLDEP-NEXT: srli a0, a0, 2728; VLDEP-NEXT: addi a0, a0, -4729; VLDEP-NEXT: vsetivli zero, 4, e8, mf4, ta, ma730; VLDEP-NEXT: vslidedown.vx v8, v8, a0731; VLDEP-NEXT: vsetvli a0, zero, e8, mf4, ta, ma732; VLDEP-NEXT: vslideup.vi v8, v9, 4733; VLDEP-NEXT: ret734 %res = call <vscale x 2 x i8> @llvm.vector.splice.nxv2i8(<vscale x 2 x i8> %a, <vscale x 2 x i8> %b, i32 -4)735 ret <vscale x 2 x i8> %res736}737 738define <vscale x 2 x i8> @splice_nxv2i8_offset_max(<vscale x 2 x i8> %a, <vscale x 2 x i8> %b) #0 {739; NOVLDEP-LABEL: splice_nxv2i8_offset_max:740; NOVLDEP: # %bb.0:741; NOVLDEP-NEXT: vsetvli a0, zero, e8, mf4, ta, ma742; NOVLDEP-NEXT: vslidedown.vi v8, v8, 3743; NOVLDEP-NEXT: csrr a0, vlenb744; NOVLDEP-NEXT: srli a0, a0, 2745; NOVLDEP-NEXT: addi a0, a0, -3746; NOVLDEP-NEXT: vslideup.vx v8, v9, a0747; NOVLDEP-NEXT: ret748;749; VLDEP-LABEL: splice_nxv2i8_offset_max:750; VLDEP: # %bb.0:751; VLDEP-NEXT: csrr a0, vlenb752; VLDEP-NEXT: srli a0, a0, 2753; VLDEP-NEXT: addi a0, a0, -3754; VLDEP-NEXT: vsetvli zero, a0, e8, mf4, ta, ma755; VLDEP-NEXT: vslidedown.vi v8, v8, 3756; VLDEP-NEXT: vsetvli a1, zero, e8, mf4, ta, ma757; VLDEP-NEXT: vslideup.vx v8, v9, a0758; VLDEP-NEXT: ret759 %res = call <vscale x 2 x i8> @llvm.vector.splice.nxv2i8(<vscale x 2 x i8> %a, <vscale x 2 x i8> %b, i32 3)760 ret <vscale x 2 x i8> %res761}762 763define <vscale x 4 x i8> @splice_nxv4i8_offset_zero(<vscale x 4 x i8> %a, <vscale x 4 x i8> %b) #0 {764; CHECK-LABEL: splice_nxv4i8_offset_zero:765; CHECK: # %bb.0:766; CHECK-NEXT: ret767 %res = call <vscale x 4 x i8> @llvm.vector.splice.nxv4i8(<vscale x 4 x i8> %a, <vscale x 4 x i8> %b, i32 0)768 ret <vscale x 4 x i8> %res769}770 771define <vscale x 4 x i8> @splice_nxv4i8_offset_negone(<vscale x 4 x i8> %a, <vscale x 4 x i8> %b) #0 {772; NOVLDEP-LABEL: splice_nxv4i8_offset_negone:773; NOVLDEP: # %bb.0:774; NOVLDEP-NEXT: csrr a0, vlenb775; NOVLDEP-NEXT: srli a0, a0, 1776; NOVLDEP-NEXT: addi a0, a0, -1777; NOVLDEP-NEXT: vsetvli a1, zero, e8, mf2, ta, ma778; NOVLDEP-NEXT: vslidedown.vx v8, v8, a0779; NOVLDEP-NEXT: vslideup.vi v8, v9, 1780; NOVLDEP-NEXT: ret781;782; VLDEP-LABEL: splice_nxv4i8_offset_negone:783; VLDEP: # %bb.0:784; VLDEP-NEXT: csrr a0, vlenb785; VLDEP-NEXT: srli a0, a0, 1786; VLDEP-NEXT: addi a0, a0, -1787; VLDEP-NEXT: vsetivli zero, 1, e8, mf2, ta, ma788; VLDEP-NEXT: vslidedown.vx v8, v8, a0789; VLDEP-NEXT: vsetvli a0, zero, e8, mf2, ta, ma790; VLDEP-NEXT: vslideup.vi v8, v9, 1791; VLDEP-NEXT: ret792 %res = call <vscale x 4 x i8> @llvm.vector.splice.nxv4i8(<vscale x 4 x i8> %a, <vscale x 4 x i8> %b, i32 -1)793 ret <vscale x 4 x i8> %res794}795 796define <vscale x 4 x i8> @splice_nxv4i8_offset_min(<vscale x 4 x i8> %a, <vscale x 4 x i8> %b) #0 {797; NOVLDEP-LABEL: splice_nxv4i8_offset_min:798; NOVLDEP: # %bb.0:799; NOVLDEP-NEXT: csrr a0, vlenb800; NOVLDEP-NEXT: srli a0, a0, 1801; NOVLDEP-NEXT: addi a0, a0, -8802; NOVLDEP-NEXT: vsetvli a1, zero, e8, mf2, ta, ma803; NOVLDEP-NEXT: vslidedown.vx v8, v8, a0804; NOVLDEP-NEXT: vslideup.vi v8, v9, 8805; NOVLDEP-NEXT: ret806;807; VLDEP-LABEL: splice_nxv4i8_offset_min:808; VLDEP: # %bb.0:809; VLDEP-NEXT: csrr a0, vlenb810; VLDEP-NEXT: srli a0, a0, 1811; VLDEP-NEXT: addi a0, a0, -8812; VLDEP-NEXT: vsetivli zero, 8, e8, mf2, ta, ma813; VLDEP-NEXT: vslidedown.vx v8, v8, a0814; VLDEP-NEXT: vsetvli a0, zero, e8, mf2, ta, ma815; VLDEP-NEXT: vslideup.vi v8, v9, 8816; VLDEP-NEXT: ret817 %res = call <vscale x 4 x i8> @llvm.vector.splice.nxv4i8(<vscale x 4 x i8> %a, <vscale x 4 x i8> %b, i32 -8)818 ret <vscale x 4 x i8> %res819}820 821define <vscale x 4 x i8> @splice_nxv4i8_offset_max(<vscale x 4 x i8> %a, <vscale x 4 x i8> %b) #0 {822; NOVLDEP-LABEL: splice_nxv4i8_offset_max:823; NOVLDEP: # %bb.0:824; NOVLDEP-NEXT: vsetvli a0, zero, e8, mf2, ta, ma825; NOVLDEP-NEXT: vslidedown.vi v8, v8, 7826; NOVLDEP-NEXT: csrr a0, vlenb827; NOVLDEP-NEXT: srli a0, a0, 1828; NOVLDEP-NEXT: addi a0, a0, -7829; NOVLDEP-NEXT: vslideup.vx v8, v9, a0830; NOVLDEP-NEXT: ret831;832; VLDEP-LABEL: splice_nxv4i8_offset_max:833; VLDEP: # %bb.0:834; VLDEP-NEXT: csrr a0, vlenb835; VLDEP-NEXT: srli a0, a0, 1836; VLDEP-NEXT: addi a0, a0, -7837; VLDEP-NEXT: vsetvli zero, a0, e8, mf2, ta, ma838; VLDEP-NEXT: vslidedown.vi v8, v8, 7839; VLDEP-NEXT: vsetvli a1, zero, e8, mf2, ta, ma840; VLDEP-NEXT: vslideup.vx v8, v9, a0841; VLDEP-NEXT: ret842 %res = call <vscale x 4 x i8> @llvm.vector.splice.nxv4i8(<vscale x 4 x i8> %a, <vscale x 4 x i8> %b, i32 7)843 ret <vscale x 4 x i8> %res844}845 846define <vscale x 8 x i8> @splice_nxv8i8_offset_zero(<vscale x 8 x i8> %a, <vscale x 8 x i8> %b) #0 {847; CHECK-LABEL: splice_nxv8i8_offset_zero:848; CHECK: # %bb.0:849; CHECK-NEXT: ret850 %res = call <vscale x 8 x i8> @llvm.vector.splice.nxv8i8(<vscale x 8 x i8> %a, <vscale x 8 x i8> %b, i32 0)851 ret <vscale x 8 x i8> %res852}853 854define <vscale x 8 x i8> @splice_nxv8i8_offset_negone(<vscale x 8 x i8> %a, <vscale x 8 x i8> %b) #0 {855; NOVLDEP-LABEL: splice_nxv8i8_offset_negone:856; NOVLDEP: # %bb.0:857; NOVLDEP-NEXT: csrr a0, vlenb858; NOVLDEP-NEXT: addi a0, a0, -1859; NOVLDEP-NEXT: vsetvli a1, zero, e8, m1, ta, ma860; NOVLDEP-NEXT: vslidedown.vx v8, v8, a0861; NOVLDEP-NEXT: vslideup.vi v8, v9, 1862; NOVLDEP-NEXT: ret863;864; VLDEP-LABEL: splice_nxv8i8_offset_negone:865; VLDEP: # %bb.0:866; VLDEP-NEXT: csrr a0, vlenb867; VLDEP-NEXT: addi a0, a0, -1868; VLDEP-NEXT: vsetivli zero, 1, e8, m1, ta, ma869; VLDEP-NEXT: vslidedown.vx v8, v8, a0870; VLDEP-NEXT: vsetvli a0, zero, e8, m1, ta, ma871; VLDEP-NEXT: vslideup.vi v8, v9, 1872; VLDEP-NEXT: ret873 %res = call <vscale x 8 x i8> @llvm.vector.splice.nxv8i8(<vscale x 8 x i8> %a, <vscale x 8 x i8> %b, i32 -1)874 ret <vscale x 8 x i8> %res875}876 877define <vscale x 8 x i8> @splice_nxv8i8_offset_min(<vscale x 8 x i8> %a, <vscale x 8 x i8> %b) #0 {878; NOVLDEP-LABEL: splice_nxv8i8_offset_min:879; NOVLDEP: # %bb.0:880; NOVLDEP-NEXT: csrr a0, vlenb881; NOVLDEP-NEXT: addi a0, a0, -16882; NOVLDEP-NEXT: vsetvli a1, zero, e8, m1, ta, ma883; NOVLDEP-NEXT: vslidedown.vx v8, v8, a0884; NOVLDEP-NEXT: vslideup.vi v8, v9, 16885; NOVLDEP-NEXT: ret886;887; VLDEP-LABEL: splice_nxv8i8_offset_min:888; VLDEP: # %bb.0:889; VLDEP-NEXT: csrr a0, vlenb890; VLDEP-NEXT: addi a0, a0, -16891; VLDEP-NEXT: vsetivli zero, 16, e8, m1, ta, ma892; VLDEP-NEXT: vslidedown.vx v8, v8, a0893; VLDEP-NEXT: vsetvli a0, zero, e8, m1, ta, ma894; VLDEP-NEXT: vslideup.vi v8, v9, 16895; VLDEP-NEXT: ret896 %res = call <vscale x 8 x i8> @llvm.vector.splice.nxv8i8(<vscale x 8 x i8> %a, <vscale x 8 x i8> %b, i32 -16)897 ret <vscale x 8 x i8> %res898}899 900define <vscale x 8 x i8> @splice_nxv8i8_offset_max(<vscale x 8 x i8> %a, <vscale x 8 x i8> %b) #0 {901; NOVLDEP-LABEL: splice_nxv8i8_offset_max:902; NOVLDEP: # %bb.0:903; NOVLDEP-NEXT: csrr a0, vlenb904; NOVLDEP-NEXT: addi a0, a0, -15905; NOVLDEP-NEXT: vsetvli a1, zero, e8, m1, ta, ma906; NOVLDEP-NEXT: vslidedown.vi v8, v8, 15907; NOVLDEP-NEXT: vslideup.vx v8, v9, a0908; NOVLDEP-NEXT: ret909;910; VLDEP-LABEL: splice_nxv8i8_offset_max:911; VLDEP: # %bb.0:912; VLDEP-NEXT: csrr a0, vlenb913; VLDEP-NEXT: addi a0, a0, -15914; VLDEP-NEXT: vsetvli zero, a0, e8, m1, ta, ma915; VLDEP-NEXT: vslidedown.vi v8, v8, 15916; VLDEP-NEXT: vsetvli a1, zero, e8, m1, ta, ma917; VLDEP-NEXT: vslideup.vx v8, v9, a0918; VLDEP-NEXT: ret919 %res = call <vscale x 8 x i8> @llvm.vector.splice.nxv8i8(<vscale x 8 x i8> %a, <vscale x 8 x i8> %b, i32 15)920 ret <vscale x 8 x i8> %res921}922 923define <vscale x 16 x i8> @splice_nxv16i8_offset_zero(<vscale x 16 x i8> %a, <vscale x 16 x i8> %b) #0 {924; CHECK-LABEL: splice_nxv16i8_offset_zero:925; CHECK: # %bb.0:926; CHECK-NEXT: ret927 %res = call <vscale x 16 x i8> @llvm.vector.splice.nxv16i8(<vscale x 16 x i8> %a, <vscale x 16 x i8> %b, i32 0)928 ret <vscale x 16 x i8> %res929}930 931define <vscale x 16 x i8> @splice_nxv16i8_offset_negone(<vscale x 16 x i8> %a, <vscale x 16 x i8> %b) #0 {932; NOVLDEP-LABEL: splice_nxv16i8_offset_negone:933; NOVLDEP: # %bb.0:934; NOVLDEP-NEXT: csrr a0, vlenb935; NOVLDEP-NEXT: slli a0, a0, 1936; NOVLDEP-NEXT: addi a0, a0, -1937; NOVLDEP-NEXT: vsetvli a1, zero, e8, m2, ta, ma938; NOVLDEP-NEXT: vslidedown.vx v8, v8, a0939; NOVLDEP-NEXT: vslideup.vi v8, v10, 1940; NOVLDEP-NEXT: ret941;942; VLDEP-LABEL: splice_nxv16i8_offset_negone:943; VLDEP: # %bb.0:944; VLDEP-NEXT: csrr a0, vlenb945; VLDEP-NEXT: slli a0, a0, 1946; VLDEP-NEXT: addi a0, a0, -1947; VLDEP-NEXT: vsetivli zero, 1, e8, m2, ta, ma948; VLDEP-NEXT: vslidedown.vx v8, v8, a0949; VLDEP-NEXT: vsetvli a0, zero, e8, m2, ta, ma950; VLDEP-NEXT: vslideup.vi v8, v10, 1951; VLDEP-NEXT: ret952 %res = call <vscale x 16 x i8> @llvm.vector.splice.nxv16i8(<vscale x 16 x i8> %a, <vscale x 16 x i8> %b, i32 -1)953 ret <vscale x 16 x i8> %res954}955 956define <vscale x 16 x i8> @splice_nxv16i8_offset_min(<vscale x 16 x i8> %a, <vscale x 16 x i8> %b) #0 {957; NOVLDEP-LABEL: splice_nxv16i8_offset_min:958; NOVLDEP: # %bb.0:959; NOVLDEP-NEXT: csrr a0, vlenb960; NOVLDEP-NEXT: slli a0, a0, 1961; NOVLDEP-NEXT: addi a0, a0, -32962; NOVLDEP-NEXT: vsetvli a1, zero, e8, m2, ta, ma963; NOVLDEP-NEXT: vslidedown.vx v8, v8, a0964; NOVLDEP-NEXT: li a0, 32965; NOVLDEP-NEXT: vslideup.vx v8, v10, a0966; NOVLDEP-NEXT: ret967;968; VLDEP-LABEL: splice_nxv16i8_offset_min:969; VLDEP: # %bb.0:970; VLDEP-NEXT: csrr a0, vlenb971; VLDEP-NEXT: slli a0, a0, 1972; VLDEP-NEXT: addi a0, a0, -32973; VLDEP-NEXT: li a1, 32974; VLDEP-NEXT: vsetvli zero, a1, e8, m2, ta, ma975; VLDEP-NEXT: vslidedown.vx v8, v8, a0976; VLDEP-NEXT: vsetvli a0, zero, e8, m2, ta, ma977; VLDEP-NEXT: vslideup.vx v8, v10, a1978; VLDEP-NEXT: ret979 %res = call <vscale x 16 x i8> @llvm.vector.splice.nxv16i8(<vscale x 16 x i8> %a, <vscale x 16 x i8> %b, i32 -32)980 ret <vscale x 16 x i8> %res981}982 983define <vscale x 16 x i8> @splice_nxv16i8_offset_max(<vscale x 16 x i8> %a, <vscale x 16 x i8> %b) #0 {984; NOVLDEP-LABEL: splice_nxv16i8_offset_max:985; NOVLDEP: # %bb.0:986; NOVLDEP-NEXT: vsetvli a0, zero, e8, m2, ta, ma987; NOVLDEP-NEXT: vslidedown.vi v8, v8, 31988; NOVLDEP-NEXT: csrr a0, vlenb989; NOVLDEP-NEXT: slli a0, a0, 1990; NOVLDEP-NEXT: addi a0, a0, -31991; NOVLDEP-NEXT: vslideup.vx v8, v10, a0992; NOVLDEP-NEXT: ret993;994; VLDEP-LABEL: splice_nxv16i8_offset_max:995; VLDEP: # %bb.0:996; VLDEP-NEXT: csrr a0, vlenb997; VLDEP-NEXT: slli a0, a0, 1998; VLDEP-NEXT: addi a0, a0, -31999; VLDEP-NEXT: vsetvli zero, a0, e8, m2, ta, ma1000; VLDEP-NEXT: vslidedown.vi v8, v8, 311001; VLDEP-NEXT: vsetvli a1, zero, e8, m2, ta, ma1002; VLDEP-NEXT: vslideup.vx v8, v10, a01003; VLDEP-NEXT: ret1004 %res = call <vscale x 16 x i8> @llvm.vector.splice.nxv16i8(<vscale x 16 x i8> %a, <vscale x 16 x i8> %b, i32 31)1005 ret <vscale x 16 x i8> %res1006}1007 1008define <vscale x 32 x i8> @splice_nxv32i8_offset_zero(<vscale x 32 x i8> %a, <vscale x 32 x i8> %b) #0 {1009; CHECK-LABEL: splice_nxv32i8_offset_zero:1010; CHECK: # %bb.0:1011; CHECK-NEXT: ret1012 %res = call <vscale x 32 x i8> @llvm.vector.splice.nxv32i8(<vscale x 32 x i8> %a, <vscale x 32 x i8> %b, i32 0)1013 ret <vscale x 32 x i8> %res1014}1015 1016define <vscale x 32 x i8> @splice_nxv32i8_offset_negone(<vscale x 32 x i8> %a, <vscale x 32 x i8> %b) #0 {1017; NOVLDEP-LABEL: splice_nxv32i8_offset_negone:1018; NOVLDEP: # %bb.0:1019; NOVLDEP-NEXT: csrr a0, vlenb1020; NOVLDEP-NEXT: slli a0, a0, 21021; NOVLDEP-NEXT: addi a0, a0, -11022; NOVLDEP-NEXT: vsetvli a1, zero, e8, m4, ta, ma1023; NOVLDEP-NEXT: vslidedown.vx v8, v8, a01024; NOVLDEP-NEXT: vslideup.vi v8, v12, 11025; NOVLDEP-NEXT: ret1026;1027; VLDEP-LABEL: splice_nxv32i8_offset_negone:1028; VLDEP: # %bb.0:1029; VLDEP-NEXT: csrr a0, vlenb1030; VLDEP-NEXT: slli a0, a0, 21031; VLDEP-NEXT: addi a0, a0, -11032; VLDEP-NEXT: vsetivli zero, 1, e8, m4, ta, ma1033; VLDEP-NEXT: vslidedown.vx v8, v8, a01034; VLDEP-NEXT: vsetvli a0, zero, e8, m4, ta, ma1035; VLDEP-NEXT: vslideup.vi v8, v12, 11036; VLDEP-NEXT: ret1037 %res = call <vscale x 32 x i8> @llvm.vector.splice.nxv32i8(<vscale x 32 x i8> %a, <vscale x 32 x i8> %b, i32 -1)1038 ret <vscale x 32 x i8> %res1039}1040 1041define <vscale x 32 x i8> @splice_nxv32i8_offset_min(<vscale x 32 x i8> %a, <vscale x 32 x i8> %b) #0 {1042; NOVLDEP-LABEL: splice_nxv32i8_offset_min:1043; NOVLDEP: # %bb.0:1044; NOVLDEP-NEXT: csrr a0, vlenb1045; NOVLDEP-NEXT: slli a0, a0, 21046; NOVLDEP-NEXT: addi a0, a0, -641047; NOVLDEP-NEXT: vsetvli a1, zero, e8, m4, ta, ma1048; NOVLDEP-NEXT: vslidedown.vx v8, v8, a01049; NOVLDEP-NEXT: li a0, 641050; NOVLDEP-NEXT: vslideup.vx v8, v12, a01051; NOVLDEP-NEXT: ret1052;1053; VLDEP-LABEL: splice_nxv32i8_offset_min:1054; VLDEP: # %bb.0:1055; VLDEP-NEXT: csrr a0, vlenb1056; VLDEP-NEXT: slli a0, a0, 21057; VLDEP-NEXT: addi a0, a0, -641058; VLDEP-NEXT: li a1, 641059; VLDEP-NEXT: vsetvli zero, a1, e8, m4, ta, ma1060; VLDEP-NEXT: vslidedown.vx v8, v8, a01061; VLDEP-NEXT: vsetvli a0, zero, e8, m4, ta, ma1062; VLDEP-NEXT: vslideup.vx v8, v12, a11063; VLDEP-NEXT: ret1064 %res = call <vscale x 32 x i8> @llvm.vector.splice.nxv32i8(<vscale x 32 x i8> %a, <vscale x 32 x i8> %b, i32 -64)1065 ret <vscale x 32 x i8> %res1066}1067 1068define <vscale x 32 x i8> @splice_nxv32i8_offset_max(<vscale x 32 x i8> %a, <vscale x 32 x i8> %b) #0 {1069; NOVLDEP-LABEL: splice_nxv32i8_offset_max:1070; NOVLDEP: # %bb.0:1071; NOVLDEP-NEXT: li a0, 631072; NOVLDEP-NEXT: vsetvli a1, zero, e8, m4, ta, ma1073; NOVLDEP-NEXT: vslidedown.vx v8, v8, a01074; NOVLDEP-NEXT: csrr a0, vlenb1075; NOVLDEP-NEXT: slli a0, a0, 21076; NOVLDEP-NEXT: addi a0, a0, -631077; NOVLDEP-NEXT: vslideup.vx v8, v12, a01078; NOVLDEP-NEXT: ret1079;1080; VLDEP-LABEL: splice_nxv32i8_offset_max:1081; VLDEP: # %bb.0:1082; VLDEP-NEXT: csrr a0, vlenb1083; VLDEP-NEXT: slli a0, a0, 21084; VLDEP-NEXT: addi a0, a0, -631085; VLDEP-NEXT: li a1, 631086; VLDEP-NEXT: vsetvli zero, a0, e8, m4, ta, ma1087; VLDEP-NEXT: vslidedown.vx v8, v8, a11088; VLDEP-NEXT: vsetvli a1, zero, e8, m4, ta, ma1089; VLDEP-NEXT: vslideup.vx v8, v12, a01090; VLDEP-NEXT: ret1091 %res = call <vscale x 32 x i8> @llvm.vector.splice.nxv32i8(<vscale x 32 x i8> %a, <vscale x 32 x i8> %b, i32 63)1092 ret <vscale x 32 x i8> %res1093}1094 1095define <vscale x 64 x i8> @splice_nxv64i8_offset_zero(<vscale x 64 x i8> %a, <vscale x 64 x i8> %b) #0 {1096; CHECK-LABEL: splice_nxv64i8_offset_zero:1097; CHECK: # %bb.0:1098; CHECK-NEXT: ret1099 %res = call <vscale x 64 x i8> @llvm.vector.splice.nxv64i8(<vscale x 64 x i8> %a, <vscale x 64 x i8> %b, i32 0)1100 ret <vscale x 64 x i8> %res1101}1102 1103define <vscale x 64 x i8> @splice_nxv64i8_offset_negone(<vscale x 64 x i8> %a, <vscale x 64 x i8> %b) #0 {1104; NOVLDEP-LABEL: splice_nxv64i8_offset_negone:1105; NOVLDEP: # %bb.0:1106; NOVLDEP-NEXT: csrr a0, vlenb1107; NOVLDEP-NEXT: slli a0, a0, 31108; NOVLDEP-NEXT: addi a0, a0, -11109; NOVLDEP-NEXT: vsetvli a1, zero, e8, m8, ta, ma1110; NOVLDEP-NEXT: vslidedown.vx v8, v8, a01111; NOVLDEP-NEXT: vslideup.vi v8, v16, 11112; NOVLDEP-NEXT: ret1113;1114; VLDEP-LABEL: splice_nxv64i8_offset_negone:1115; VLDEP: # %bb.0:1116; VLDEP-NEXT: csrr a0, vlenb1117; VLDEP-NEXT: slli a0, a0, 31118; VLDEP-NEXT: addi a0, a0, -11119; VLDEP-NEXT: vsetivli zero, 1, e8, m8, ta, ma1120; VLDEP-NEXT: vslidedown.vx v8, v8, a01121; VLDEP-NEXT: vsetvli a0, zero, e8, m8, ta, ma1122; VLDEP-NEXT: vslideup.vi v8, v16, 11123; VLDEP-NEXT: ret1124 %res = call <vscale x 64 x i8> @llvm.vector.splice.nxv64i8(<vscale x 64 x i8> %a, <vscale x 64 x i8> %b, i32 -1)1125 ret <vscale x 64 x i8> %res1126}1127 1128define <vscale x 64 x i8> @splice_nxv64i8_offset_min(<vscale x 64 x i8> %a, <vscale x 64 x i8> %b) #0 {1129; NOVLDEP-LABEL: splice_nxv64i8_offset_min:1130; NOVLDEP: # %bb.0:1131; NOVLDEP-NEXT: csrr a0, vlenb1132; NOVLDEP-NEXT: slli a0, a0, 31133; NOVLDEP-NEXT: addi a0, a0, -1281134; NOVLDEP-NEXT: vsetvli a1, zero, e8, m8, ta, ma1135; NOVLDEP-NEXT: vslidedown.vx v8, v8, a01136; NOVLDEP-NEXT: li a0, 1281137; NOVLDEP-NEXT: vslideup.vx v8, v16, a01138; NOVLDEP-NEXT: ret1139;1140; VLDEP-LABEL: splice_nxv64i8_offset_min:1141; VLDEP: # %bb.0:1142; VLDEP-NEXT: csrr a0, vlenb1143; VLDEP-NEXT: slli a0, a0, 31144; VLDEP-NEXT: addi a0, a0, -1281145; VLDEP-NEXT: li a1, 1281146; VLDEP-NEXT: vsetvli zero, a1, e8, m8, ta, ma1147; VLDEP-NEXT: vslidedown.vx v8, v8, a01148; VLDEP-NEXT: vsetvli a0, zero, e8, m8, ta, ma1149; VLDEP-NEXT: vslideup.vx v8, v16, a11150; VLDEP-NEXT: ret1151 %res = call <vscale x 64 x i8> @llvm.vector.splice.nxv64i8(<vscale x 64 x i8> %a, <vscale x 64 x i8> %b, i32 -128)1152 ret <vscale x 64 x i8> %res1153}1154 1155define <vscale x 64 x i8> @splice_nxv64i8_offset_max(<vscale x 64 x i8> %a, <vscale x 64 x i8> %b) #0 {1156; NOVLDEP-LABEL: splice_nxv64i8_offset_max:1157; NOVLDEP: # %bb.0:1158; NOVLDEP-NEXT: li a0, 1271159; NOVLDEP-NEXT: vsetvli a1, zero, e8, m8, ta, ma1160; NOVLDEP-NEXT: vslidedown.vx v8, v8, a01161; NOVLDEP-NEXT: csrr a0, vlenb1162; NOVLDEP-NEXT: slli a0, a0, 31163; NOVLDEP-NEXT: addi a0, a0, -1271164; NOVLDEP-NEXT: vslideup.vx v8, v16, a01165; NOVLDEP-NEXT: ret1166;1167; VLDEP-LABEL: splice_nxv64i8_offset_max:1168; VLDEP: # %bb.0:1169; VLDEP-NEXT: csrr a0, vlenb1170; VLDEP-NEXT: slli a0, a0, 31171; VLDEP-NEXT: addi a0, a0, -1271172; VLDEP-NEXT: li a1, 1271173; VLDEP-NEXT: vsetvli zero, a0, e8, m8, ta, ma1174; VLDEP-NEXT: vslidedown.vx v8, v8, a11175; VLDEP-NEXT: vsetvli a1, zero, e8, m8, ta, ma1176; VLDEP-NEXT: vslideup.vx v8, v16, a01177; VLDEP-NEXT: ret1178 %res = call <vscale x 64 x i8> @llvm.vector.splice.nxv64i8(<vscale x 64 x i8> %a, <vscale x 64 x i8> %b, i32 127)1179 ret <vscale x 64 x i8> %res1180}1181 1182define <vscale x 1 x i16> @splice_nxv1i16_offset_zero(<vscale x 1 x i16> %a, <vscale x 1 x i16> %b) #0 {1183; CHECK-LABEL: splice_nxv1i16_offset_zero:1184; CHECK: # %bb.0:1185; CHECK-NEXT: ret1186 %res = call <vscale x 1 x i16> @llvm.vector.splice.nxv1i16(<vscale x 1 x i16> %a, <vscale x 1 x i16> %b, i32 0)1187 ret <vscale x 1 x i16> %res1188}1189 1190define <vscale x 1 x i16> @splice_nxv1i16_offset_negone(<vscale x 1 x i16> %a, <vscale x 1 x i16> %b) #0 {1191; NOVLDEP-LABEL: splice_nxv1i16_offset_negone:1192; NOVLDEP: # %bb.0:1193; NOVLDEP-NEXT: csrr a0, vlenb1194; NOVLDEP-NEXT: srli a0, a0, 31195; NOVLDEP-NEXT: addi a0, a0, -11196; NOVLDEP-NEXT: vsetvli a1, zero, e16, mf4, ta, ma1197; NOVLDEP-NEXT: vslidedown.vx v8, v8, a01198; NOVLDEP-NEXT: vslideup.vi v8, v9, 11199; NOVLDEP-NEXT: ret1200;1201; VLDEP-LABEL: splice_nxv1i16_offset_negone:1202; VLDEP: # %bb.0:1203; VLDEP-NEXT: csrr a0, vlenb1204; VLDEP-NEXT: srli a0, a0, 31205; VLDEP-NEXT: addi a0, a0, -11206; VLDEP-NEXT: vsetivli zero, 1, e16, mf4, ta, ma1207; VLDEP-NEXT: vslidedown.vx v8, v8, a01208; VLDEP-NEXT: vsetvli a0, zero, e16, mf4, ta, ma1209; VLDEP-NEXT: vslideup.vi v8, v9, 11210; VLDEP-NEXT: ret1211 %res = call <vscale x 1 x i16> @llvm.vector.splice.nxv1i16(<vscale x 1 x i16> %a, <vscale x 1 x i16> %b, i32 -1)1212 ret <vscale x 1 x i16> %res1213}1214 1215define <vscale x 1 x i16> @splice_nxv1i16_offset_min(<vscale x 1 x i16> %a, <vscale x 1 x i16> %b) #0 {1216; NOVLDEP-LABEL: splice_nxv1i16_offset_min:1217; NOVLDEP: # %bb.0:1218; NOVLDEP-NEXT: csrr a0, vlenb1219; NOVLDEP-NEXT: srli a0, a0, 31220; NOVLDEP-NEXT: addi a0, a0, -21221; NOVLDEP-NEXT: vsetvli a1, zero, e16, mf4, ta, ma1222; NOVLDEP-NEXT: vslidedown.vx v8, v8, a01223; NOVLDEP-NEXT: vslideup.vi v8, v9, 21224; NOVLDEP-NEXT: ret1225;1226; VLDEP-LABEL: splice_nxv1i16_offset_min:1227; VLDEP: # %bb.0:1228; VLDEP-NEXT: csrr a0, vlenb1229; VLDEP-NEXT: srli a0, a0, 31230; VLDEP-NEXT: addi a0, a0, -21231; VLDEP-NEXT: vsetivli zero, 2, e16, mf4, ta, ma1232; VLDEP-NEXT: vslidedown.vx v8, v8, a01233; VLDEP-NEXT: vsetvli a0, zero, e16, mf4, ta, ma1234; VLDEP-NEXT: vslideup.vi v8, v9, 21235; VLDEP-NEXT: ret1236 %res = call <vscale x 1 x i16> @llvm.vector.splice.nxv1i16(<vscale x 1 x i16> %a, <vscale x 1 x i16> %b, i32 -2)1237 ret <vscale x 1 x i16> %res1238}1239 1240define <vscale x 1 x i16> @splice_nxv1i16_offset_max(<vscale x 1 x i16> %a, <vscale x 1 x i16> %b) #0 {1241; NOVLDEP-LABEL: splice_nxv1i16_offset_max:1242; NOVLDEP: # %bb.0:1243; NOVLDEP-NEXT: vsetvli a0, zero, e16, mf4, ta, ma1244; NOVLDEP-NEXT: vslidedown.vi v8, v8, 11245; NOVLDEP-NEXT: csrr a0, vlenb1246; NOVLDEP-NEXT: srli a0, a0, 31247; NOVLDEP-NEXT: addi a0, a0, -11248; NOVLDEP-NEXT: vslideup.vx v8, v9, a01249; NOVLDEP-NEXT: ret1250;1251; VLDEP-LABEL: splice_nxv1i16_offset_max:1252; VLDEP: # %bb.0:1253; VLDEP-NEXT: csrr a0, vlenb1254; VLDEP-NEXT: srli a0, a0, 31255; VLDEP-NEXT: addi a0, a0, -11256; VLDEP-NEXT: vsetvli zero, a0, e16, mf4, ta, ma1257; VLDEP-NEXT: vslidedown.vi v8, v8, 11258; VLDEP-NEXT: vsetvli a1, zero, e16, mf4, ta, ma1259; VLDEP-NEXT: vslideup.vx v8, v9, a01260; VLDEP-NEXT: ret1261 %res = call <vscale x 1 x i16> @llvm.vector.splice.nxv1i16(<vscale x 1 x i16> %a, <vscale x 1 x i16> %b, i32 1)1262 ret <vscale x 1 x i16> %res1263}1264 1265define <vscale x 2 x i16> @splice_nxv2i16_offset_zero(<vscale x 2 x i16> %a, <vscale x 2 x i16> %b) #0 {1266; CHECK-LABEL: splice_nxv2i16_offset_zero:1267; CHECK: # %bb.0:1268; CHECK-NEXT: ret1269 %res = call <vscale x 2 x i16> @llvm.vector.splice.nxv2i16(<vscale x 2 x i16> %a, <vscale x 2 x i16> %b, i32 0)1270 ret <vscale x 2 x i16> %res1271}1272 1273define <vscale x 2 x i16> @splice_nxv2i16_offset_negone(<vscale x 2 x i16> %a, <vscale x 2 x i16> %b) #0 {1274; NOVLDEP-LABEL: splice_nxv2i16_offset_negone:1275; NOVLDEP: # %bb.0:1276; NOVLDEP-NEXT: csrr a0, vlenb1277; NOVLDEP-NEXT: srli a0, a0, 21278; NOVLDEP-NEXT: addi a0, a0, -11279; NOVLDEP-NEXT: vsetvli a1, zero, e16, mf2, ta, ma1280; NOVLDEP-NEXT: vslidedown.vx v8, v8, a01281; NOVLDEP-NEXT: vslideup.vi v8, v9, 11282; NOVLDEP-NEXT: ret1283;1284; VLDEP-LABEL: splice_nxv2i16_offset_negone:1285; VLDEP: # %bb.0:1286; VLDEP-NEXT: csrr a0, vlenb1287; VLDEP-NEXT: srli a0, a0, 21288; VLDEP-NEXT: addi a0, a0, -11289; VLDEP-NEXT: vsetivli zero, 1, e16, mf2, ta, ma1290; VLDEP-NEXT: vslidedown.vx v8, v8, a01291; VLDEP-NEXT: vsetvli a0, zero, e16, mf2, ta, ma1292; VLDEP-NEXT: vslideup.vi v8, v9, 11293; VLDEP-NEXT: ret1294 %res = call <vscale x 2 x i16> @llvm.vector.splice.nxv2i16(<vscale x 2 x i16> %a, <vscale x 2 x i16> %b, i32 -1)1295 ret <vscale x 2 x i16> %res1296}1297 1298define <vscale x 2 x i16> @splice_nxv2i16_offset_min(<vscale x 2 x i16> %a, <vscale x 2 x i16> %b) #0 {1299; NOVLDEP-LABEL: splice_nxv2i16_offset_min:1300; NOVLDEP: # %bb.0:1301; NOVLDEP-NEXT: csrr a0, vlenb1302; NOVLDEP-NEXT: srli a0, a0, 21303; NOVLDEP-NEXT: addi a0, a0, -41304; NOVLDEP-NEXT: vsetvli a1, zero, e16, mf2, ta, ma1305; NOVLDEP-NEXT: vslidedown.vx v8, v8, a01306; NOVLDEP-NEXT: vslideup.vi v8, v9, 41307; NOVLDEP-NEXT: ret1308;1309; VLDEP-LABEL: splice_nxv2i16_offset_min:1310; VLDEP: # %bb.0:1311; VLDEP-NEXT: csrr a0, vlenb1312; VLDEP-NEXT: srli a0, a0, 21313; VLDEP-NEXT: addi a0, a0, -41314; VLDEP-NEXT: vsetivli zero, 4, e16, mf2, ta, ma1315; VLDEP-NEXT: vslidedown.vx v8, v8, a01316; VLDEP-NEXT: vsetvli a0, zero, e16, mf2, ta, ma1317; VLDEP-NEXT: vslideup.vi v8, v9, 41318; VLDEP-NEXT: ret1319 %res = call <vscale x 2 x i16> @llvm.vector.splice.nxv2i16(<vscale x 2 x i16> %a, <vscale x 2 x i16> %b, i32 -4)1320 ret <vscale x 2 x i16> %res1321}1322 1323define <vscale x 2 x i16> @splice_nxv2i16_offset_max(<vscale x 2 x i16> %a, <vscale x 2 x i16> %b) #0 {1324; NOVLDEP-LABEL: splice_nxv2i16_offset_max:1325; NOVLDEP: # %bb.0:1326; NOVLDEP-NEXT: vsetvli a0, zero, e16, mf2, ta, ma1327; NOVLDEP-NEXT: vslidedown.vi v8, v8, 31328; NOVLDEP-NEXT: csrr a0, vlenb1329; NOVLDEP-NEXT: srli a0, a0, 21330; NOVLDEP-NEXT: addi a0, a0, -31331; NOVLDEP-NEXT: vslideup.vx v8, v9, a01332; NOVLDEP-NEXT: ret1333;1334; VLDEP-LABEL: splice_nxv2i16_offset_max:1335; VLDEP: # %bb.0:1336; VLDEP-NEXT: csrr a0, vlenb1337; VLDEP-NEXT: srli a0, a0, 21338; VLDEP-NEXT: addi a0, a0, -31339; VLDEP-NEXT: vsetvli zero, a0, e16, mf2, ta, ma1340; VLDEP-NEXT: vslidedown.vi v8, v8, 31341; VLDEP-NEXT: vsetvli a1, zero, e16, mf2, ta, ma1342; VLDEP-NEXT: vslideup.vx v8, v9, a01343; VLDEP-NEXT: ret1344 %res = call <vscale x 2 x i16> @llvm.vector.splice.nxv2i16(<vscale x 2 x i16> %a, <vscale x 2 x i16> %b, i32 3)1345 ret <vscale x 2 x i16> %res1346}1347 1348define <vscale x 4 x i16> @splice_nxv4i16_offset_zero(<vscale x 4 x i16> %a, <vscale x 4 x i16> %b) #0 {1349; CHECK-LABEL: splice_nxv4i16_offset_zero:1350; CHECK: # %bb.0:1351; CHECK-NEXT: ret1352 %res = call <vscale x 4 x i16> @llvm.vector.splice.nxv4i16(<vscale x 4 x i16> %a, <vscale x 4 x i16> %b, i32 0)1353 ret <vscale x 4 x i16> %res1354}1355 1356define <vscale x 4 x i16> @splice_nxv4i16_offset_negone(<vscale x 4 x i16> %a, <vscale x 4 x i16> %b) #0 {1357; NOVLDEP-LABEL: splice_nxv4i16_offset_negone:1358; NOVLDEP: # %bb.0:1359; NOVLDEP-NEXT: csrr a0, vlenb1360; NOVLDEP-NEXT: srli a0, a0, 11361; NOVLDEP-NEXT: addi a0, a0, -11362; NOVLDEP-NEXT: vsetvli a1, zero, e16, m1, ta, ma1363; NOVLDEP-NEXT: vslidedown.vx v8, v8, a01364; NOVLDEP-NEXT: vslideup.vi v8, v9, 11365; NOVLDEP-NEXT: ret1366;1367; VLDEP-LABEL: splice_nxv4i16_offset_negone:1368; VLDEP: # %bb.0:1369; VLDEP-NEXT: csrr a0, vlenb1370; VLDEP-NEXT: srli a0, a0, 11371; VLDEP-NEXT: addi a0, a0, -11372; VLDEP-NEXT: vsetivli zero, 1, e16, m1, ta, ma1373; VLDEP-NEXT: vslidedown.vx v8, v8, a01374; VLDEP-NEXT: vsetvli a0, zero, e16, m1, ta, ma1375; VLDEP-NEXT: vslideup.vi v8, v9, 11376; VLDEP-NEXT: ret1377 %res = call <vscale x 4 x i16> @llvm.vector.splice.nxv4i16(<vscale x 4 x i16> %a, <vscale x 4 x i16> %b, i32 -1)1378 ret <vscale x 4 x i16> %res1379}1380 1381define <vscale x 4 x i16> @splice_nxv4i16_offset_min(<vscale x 4 x i16> %a, <vscale x 4 x i16> %b) #0 {1382; NOVLDEP-LABEL: splice_nxv4i16_offset_min:1383; NOVLDEP: # %bb.0:1384; NOVLDEP-NEXT: csrr a0, vlenb1385; NOVLDEP-NEXT: srli a0, a0, 11386; NOVLDEP-NEXT: addi a0, a0, -81387; NOVLDEP-NEXT: vsetvli a1, zero, e16, m1, ta, ma1388; NOVLDEP-NEXT: vslidedown.vx v8, v8, a01389; NOVLDEP-NEXT: vslideup.vi v8, v9, 81390; NOVLDEP-NEXT: ret1391;1392; VLDEP-LABEL: splice_nxv4i16_offset_min:1393; VLDEP: # %bb.0:1394; VLDEP-NEXT: csrr a0, vlenb1395; VLDEP-NEXT: srli a0, a0, 11396; VLDEP-NEXT: addi a0, a0, -81397; VLDEP-NEXT: vsetivli zero, 8, e16, m1, ta, ma1398; VLDEP-NEXT: vslidedown.vx v8, v8, a01399; VLDEP-NEXT: vsetvli a0, zero, e16, m1, ta, ma1400; VLDEP-NEXT: vslideup.vi v8, v9, 81401; VLDEP-NEXT: ret1402 %res = call <vscale x 4 x i16> @llvm.vector.splice.nxv4i16(<vscale x 4 x i16> %a, <vscale x 4 x i16> %b, i32 -8)1403 ret <vscale x 4 x i16> %res1404}1405 1406define <vscale x 4 x i16> @splice_nxv4i16_offset_max(<vscale x 4 x i16> %a, <vscale x 4 x i16> %b) #0 {1407; NOVLDEP-LABEL: splice_nxv4i16_offset_max:1408; NOVLDEP: # %bb.0:1409; NOVLDEP-NEXT: vsetvli a0, zero, e16, m1, ta, ma1410; NOVLDEP-NEXT: vslidedown.vi v8, v8, 71411; NOVLDEP-NEXT: csrr a0, vlenb1412; NOVLDEP-NEXT: srli a0, a0, 11413; NOVLDEP-NEXT: addi a0, a0, -71414; NOVLDEP-NEXT: vslideup.vx v8, v9, a01415; NOVLDEP-NEXT: ret1416;1417; VLDEP-LABEL: splice_nxv4i16_offset_max:1418; VLDEP: # %bb.0:1419; VLDEP-NEXT: csrr a0, vlenb1420; VLDEP-NEXT: srli a0, a0, 11421; VLDEP-NEXT: addi a0, a0, -71422; VLDEP-NEXT: vsetvli zero, a0, e16, m1, ta, ma1423; VLDEP-NEXT: vslidedown.vi v8, v8, 71424; VLDEP-NEXT: vsetvli a1, zero, e16, m1, ta, ma1425; VLDEP-NEXT: vslideup.vx v8, v9, a01426; VLDEP-NEXT: ret1427 %res = call <vscale x 4 x i16> @llvm.vector.splice.nxv4i16(<vscale x 4 x i16> %a, <vscale x 4 x i16> %b, i32 7)1428 ret <vscale x 4 x i16> %res1429}1430 1431define <vscale x 8 x i16> @splice_nxv8i16_offset_zero(<vscale x 8 x i16> %a, <vscale x 8 x i16> %b) #0 {1432; CHECK-LABEL: splice_nxv8i16_offset_zero:1433; CHECK: # %bb.0:1434; CHECK-NEXT: ret1435 %res = call <vscale x 8 x i16> @llvm.vector.splice.nxv8i16(<vscale x 8 x i16> %a, <vscale x 8 x i16> %b, i32 0)1436 ret <vscale x 8 x i16> %res1437}1438 1439define <vscale x 8 x i16> @splice_nxv8i16_offset_negone(<vscale x 8 x i16> %a, <vscale x 8 x i16> %b) #0 {1440; NOVLDEP-LABEL: splice_nxv8i16_offset_negone:1441; NOVLDEP: # %bb.0:1442; NOVLDEP-NEXT: csrr a0, vlenb1443; NOVLDEP-NEXT: addi a0, a0, -11444; NOVLDEP-NEXT: vsetvli a1, zero, e16, m2, ta, ma1445; NOVLDEP-NEXT: vslidedown.vx v8, v8, a01446; NOVLDEP-NEXT: vslideup.vi v8, v10, 11447; NOVLDEP-NEXT: ret1448;1449; VLDEP-LABEL: splice_nxv8i16_offset_negone:1450; VLDEP: # %bb.0:1451; VLDEP-NEXT: csrr a0, vlenb1452; VLDEP-NEXT: addi a0, a0, -11453; VLDEP-NEXT: vsetivli zero, 1, e16, m2, ta, ma1454; VLDEP-NEXT: vslidedown.vx v8, v8, a01455; VLDEP-NEXT: vsetvli a0, zero, e16, m2, ta, ma1456; VLDEP-NEXT: vslideup.vi v8, v10, 11457; VLDEP-NEXT: ret1458 %res = call <vscale x 8 x i16> @llvm.vector.splice.nxv8i16(<vscale x 8 x i16> %a, <vscale x 8 x i16> %b, i32 -1)1459 ret <vscale x 8 x i16> %res1460}1461 1462define <vscale x 8 x i16> @splice_nxv8i16_offset_min(<vscale x 8 x i16> %a, <vscale x 8 x i16> %b) #0 {1463; NOVLDEP-LABEL: splice_nxv8i16_offset_min:1464; NOVLDEP: # %bb.0:1465; NOVLDEP-NEXT: csrr a0, vlenb1466; NOVLDEP-NEXT: addi a0, a0, -161467; NOVLDEP-NEXT: vsetvli a1, zero, e16, m2, ta, ma1468; NOVLDEP-NEXT: vslidedown.vx v8, v8, a01469; NOVLDEP-NEXT: vslideup.vi v8, v10, 161470; NOVLDEP-NEXT: ret1471;1472; VLDEP-LABEL: splice_nxv8i16_offset_min:1473; VLDEP: # %bb.0:1474; VLDEP-NEXT: csrr a0, vlenb1475; VLDEP-NEXT: addi a0, a0, -161476; VLDEP-NEXT: vsetivli zero, 16, e16, m2, ta, ma1477; VLDEP-NEXT: vslidedown.vx v8, v8, a01478; VLDEP-NEXT: vsetvli a0, zero, e16, m2, ta, ma1479; VLDEP-NEXT: vslideup.vi v8, v10, 161480; VLDEP-NEXT: ret1481 %res = call <vscale x 8 x i16> @llvm.vector.splice.nxv8i16(<vscale x 8 x i16> %a, <vscale x 8 x i16> %b, i32 -16)1482 ret <vscale x 8 x i16> %res1483}1484 1485define <vscale x 8 x i16> @splice_nxv8i16_offset_max(<vscale x 8 x i16> %a, <vscale x 8 x i16> %b) #0 {1486; NOVLDEP-LABEL: splice_nxv8i16_offset_max:1487; NOVLDEP: # %bb.0:1488; NOVLDEP-NEXT: csrr a0, vlenb1489; NOVLDEP-NEXT: addi a0, a0, -151490; NOVLDEP-NEXT: vsetvli a1, zero, e16, m2, ta, ma1491; NOVLDEP-NEXT: vslidedown.vi v8, v8, 151492; NOVLDEP-NEXT: vslideup.vx v8, v10, a01493; NOVLDEP-NEXT: ret1494;1495; VLDEP-LABEL: splice_nxv8i16_offset_max:1496; VLDEP: # %bb.0:1497; VLDEP-NEXT: csrr a0, vlenb1498; VLDEP-NEXT: addi a0, a0, -151499; VLDEP-NEXT: vsetvli zero, a0, e16, m2, ta, ma1500; VLDEP-NEXT: vslidedown.vi v8, v8, 151501; VLDEP-NEXT: vsetvli a1, zero, e16, m2, ta, ma1502; VLDEP-NEXT: vslideup.vx v8, v10, a01503; VLDEP-NEXT: ret1504 %res = call <vscale x 8 x i16> @llvm.vector.splice.nxv8i16(<vscale x 8 x i16> %a, <vscale x 8 x i16> %b, i32 15)1505 ret <vscale x 8 x i16> %res1506}1507 1508define <vscale x 16 x i16> @splice_nxv16i16_offset_zero(<vscale x 16 x i16> %a, <vscale x 16 x i16> %b) #0 {1509; CHECK-LABEL: splice_nxv16i16_offset_zero:1510; CHECK: # %bb.0:1511; CHECK-NEXT: ret1512 %res = call <vscale x 16 x i16> @llvm.vector.splice.nxv16i16(<vscale x 16 x i16> %a, <vscale x 16 x i16> %b, i32 0)1513 ret <vscale x 16 x i16> %res1514}1515 1516define <vscale x 16 x i16> @splice_nxv16i16_offset_negone(<vscale x 16 x i16> %a, <vscale x 16 x i16> %b) #0 {1517; NOVLDEP-LABEL: splice_nxv16i16_offset_negone:1518; NOVLDEP: # %bb.0:1519; NOVLDEP-NEXT: csrr a0, vlenb1520; NOVLDEP-NEXT: slli a0, a0, 11521; NOVLDEP-NEXT: addi a0, a0, -11522; NOVLDEP-NEXT: vsetvli a1, zero, e16, m4, ta, ma1523; NOVLDEP-NEXT: vslidedown.vx v8, v8, a01524; NOVLDEP-NEXT: vslideup.vi v8, v12, 11525; NOVLDEP-NEXT: ret1526;1527; VLDEP-LABEL: splice_nxv16i16_offset_negone:1528; VLDEP: # %bb.0:1529; VLDEP-NEXT: csrr a0, vlenb1530; VLDEP-NEXT: slli a0, a0, 11531; VLDEP-NEXT: addi a0, a0, -11532; VLDEP-NEXT: vsetivli zero, 1, e16, m4, ta, ma1533; VLDEP-NEXT: vslidedown.vx v8, v8, a01534; VLDEP-NEXT: vsetvli a0, zero, e16, m4, ta, ma1535; VLDEP-NEXT: vslideup.vi v8, v12, 11536; VLDEP-NEXT: ret1537 %res = call <vscale x 16 x i16> @llvm.vector.splice.nxv16i16(<vscale x 16 x i16> %a, <vscale x 16 x i16> %b, i32 -1)1538 ret <vscale x 16 x i16> %res1539}1540 1541define <vscale x 16 x i16> @splice_nxv16i16_offset_min(<vscale x 16 x i16> %a, <vscale x 16 x i16> %b) #0 {1542; NOVLDEP-LABEL: splice_nxv16i16_offset_min:1543; NOVLDEP: # %bb.0:1544; NOVLDEP-NEXT: csrr a0, vlenb1545; NOVLDEP-NEXT: slli a0, a0, 11546; NOVLDEP-NEXT: addi a0, a0, -321547; NOVLDEP-NEXT: vsetvli a1, zero, e16, m4, ta, ma1548; NOVLDEP-NEXT: vslidedown.vx v8, v8, a01549; NOVLDEP-NEXT: li a0, 321550; NOVLDEP-NEXT: vslideup.vx v8, v12, a01551; NOVLDEP-NEXT: ret1552;1553; VLDEP-LABEL: splice_nxv16i16_offset_min:1554; VLDEP: # %bb.0:1555; VLDEP-NEXT: csrr a0, vlenb1556; VLDEP-NEXT: slli a0, a0, 11557; VLDEP-NEXT: addi a0, a0, -321558; VLDEP-NEXT: li a1, 321559; VLDEP-NEXT: vsetvli zero, a1, e16, m4, ta, ma1560; VLDEP-NEXT: vslidedown.vx v8, v8, a01561; VLDEP-NEXT: vsetvli a0, zero, e16, m4, ta, ma1562; VLDEP-NEXT: vslideup.vx v8, v12, a11563; VLDEP-NEXT: ret1564 %res = call <vscale x 16 x i16> @llvm.vector.splice.nxv16i16(<vscale x 16 x i16> %a, <vscale x 16 x i16> %b, i32 -32)1565 ret <vscale x 16 x i16> %res1566}1567 1568define <vscale x 16 x i16> @splice_nxv16i16_offset_max(<vscale x 16 x i16> %a, <vscale x 16 x i16> %b) #0 {1569; NOVLDEP-LABEL: splice_nxv16i16_offset_max:1570; NOVLDEP: # %bb.0:1571; NOVLDEP-NEXT: vsetvli a0, zero, e16, m4, ta, ma1572; NOVLDEP-NEXT: vslidedown.vi v8, v8, 311573; NOVLDEP-NEXT: csrr a0, vlenb1574; NOVLDEP-NEXT: slli a0, a0, 11575; NOVLDEP-NEXT: addi a0, a0, -311576; NOVLDEP-NEXT: vslideup.vx v8, v12, a01577; NOVLDEP-NEXT: ret1578;1579; VLDEP-LABEL: splice_nxv16i16_offset_max:1580; VLDEP: # %bb.0:1581; VLDEP-NEXT: csrr a0, vlenb1582; VLDEP-NEXT: slli a0, a0, 11583; VLDEP-NEXT: addi a0, a0, -311584; VLDEP-NEXT: vsetvli zero, a0, e16, m4, ta, ma1585; VLDEP-NEXT: vslidedown.vi v8, v8, 311586; VLDEP-NEXT: vsetvli a1, zero, e16, m4, ta, ma1587; VLDEP-NEXT: vslideup.vx v8, v12, a01588; VLDEP-NEXT: ret1589 %res = call <vscale x 16 x i16> @llvm.vector.splice.nxv16i16(<vscale x 16 x i16> %a, <vscale x 16 x i16> %b, i32 31)1590 ret <vscale x 16 x i16> %res1591}1592 1593define <vscale x 32 x i16> @splice_nxv32i16_offset_zero(<vscale x 32 x i16> %a, <vscale x 32 x i16> %b) #0 {1594; CHECK-LABEL: splice_nxv32i16_offset_zero:1595; CHECK: # %bb.0:1596; CHECK-NEXT: ret1597 %res = call <vscale x 32 x i16> @llvm.vector.splice.nxv32i16(<vscale x 32 x i16> %a, <vscale x 32 x i16> %b, i32 0)1598 ret <vscale x 32 x i16> %res1599}1600 1601define <vscale x 32 x i16> @splice_nxv32i16_offset_negone(<vscale x 32 x i16> %a, <vscale x 32 x i16> %b) #0 {1602; NOVLDEP-LABEL: splice_nxv32i16_offset_negone:1603; NOVLDEP: # %bb.0:1604; NOVLDEP-NEXT: csrr a0, vlenb1605; NOVLDEP-NEXT: slli a0, a0, 21606; NOVLDEP-NEXT: addi a0, a0, -11607; NOVLDEP-NEXT: vsetvli a1, zero, e16, m8, ta, ma1608; NOVLDEP-NEXT: vslidedown.vx v8, v8, a01609; NOVLDEP-NEXT: vslideup.vi v8, v16, 11610; NOVLDEP-NEXT: ret1611;1612; VLDEP-LABEL: splice_nxv32i16_offset_negone:1613; VLDEP: # %bb.0:1614; VLDEP-NEXT: csrr a0, vlenb1615; VLDEP-NEXT: slli a0, a0, 21616; VLDEP-NEXT: addi a0, a0, -11617; VLDEP-NEXT: vsetivli zero, 1, e16, m8, ta, ma1618; VLDEP-NEXT: vslidedown.vx v8, v8, a01619; VLDEP-NEXT: vsetvli a0, zero, e16, m8, ta, ma1620; VLDEP-NEXT: vslideup.vi v8, v16, 11621; VLDEP-NEXT: ret1622 %res = call <vscale x 32 x i16> @llvm.vector.splice.nxv32i16(<vscale x 32 x i16> %a, <vscale x 32 x i16> %b, i32 -1)1623 ret <vscale x 32 x i16> %res1624}1625 1626define <vscale x 32 x i16> @splice_nxv32i16_offset_min(<vscale x 32 x i16> %a, <vscale x 32 x i16> %b) #0 {1627; NOVLDEP-LABEL: splice_nxv32i16_offset_min:1628; NOVLDEP: # %bb.0:1629; NOVLDEP-NEXT: csrr a0, vlenb1630; NOVLDEP-NEXT: slli a0, a0, 21631; NOVLDEP-NEXT: addi a0, a0, -641632; NOVLDEP-NEXT: vsetvli a1, zero, e16, m8, ta, ma1633; NOVLDEP-NEXT: vslidedown.vx v8, v8, a01634; NOVLDEP-NEXT: li a0, 641635; NOVLDEP-NEXT: vslideup.vx v8, v16, a01636; NOVLDEP-NEXT: ret1637;1638; VLDEP-LABEL: splice_nxv32i16_offset_min:1639; VLDEP: # %bb.0:1640; VLDEP-NEXT: csrr a0, vlenb1641; VLDEP-NEXT: slli a0, a0, 21642; VLDEP-NEXT: addi a0, a0, -641643; VLDEP-NEXT: li a1, 641644; VLDEP-NEXT: vsetvli zero, a1, e16, m8, ta, ma1645; VLDEP-NEXT: vslidedown.vx v8, v8, a01646; VLDEP-NEXT: vsetvli a0, zero, e16, m8, ta, ma1647; VLDEP-NEXT: vslideup.vx v8, v16, a11648; VLDEP-NEXT: ret1649 %res = call <vscale x 32 x i16> @llvm.vector.splice.nxv32i16(<vscale x 32 x i16> %a, <vscale x 32 x i16> %b, i32 -64)1650 ret <vscale x 32 x i16> %res1651}1652 1653define <vscale x 32 x i16> @splice_nxv32i16_offset_max(<vscale x 32 x i16> %a, <vscale x 32 x i16> %b) #0 {1654; NOVLDEP-LABEL: splice_nxv32i16_offset_max:1655; NOVLDEP: # %bb.0:1656; NOVLDEP-NEXT: li a0, 631657; NOVLDEP-NEXT: vsetvli a1, zero, e16, m8, ta, ma1658; NOVLDEP-NEXT: vslidedown.vx v8, v8, a01659; NOVLDEP-NEXT: csrr a0, vlenb1660; NOVLDEP-NEXT: slli a0, a0, 21661; NOVLDEP-NEXT: addi a0, a0, -631662; NOVLDEP-NEXT: vslideup.vx v8, v16, a01663; NOVLDEP-NEXT: ret1664;1665; VLDEP-LABEL: splice_nxv32i16_offset_max:1666; VLDEP: # %bb.0:1667; VLDEP-NEXT: csrr a0, vlenb1668; VLDEP-NEXT: slli a0, a0, 21669; VLDEP-NEXT: addi a0, a0, -631670; VLDEP-NEXT: li a1, 631671; VLDEP-NEXT: vsetvli zero, a0, e16, m8, ta, ma1672; VLDEP-NEXT: vslidedown.vx v8, v8, a11673; VLDEP-NEXT: vsetvli a1, zero, e16, m8, ta, ma1674; VLDEP-NEXT: vslideup.vx v8, v16, a01675; VLDEP-NEXT: ret1676 %res = call <vscale x 32 x i16> @llvm.vector.splice.nxv32i16(<vscale x 32 x i16> %a, <vscale x 32 x i16> %b, i32 63)1677 ret <vscale x 32 x i16> %res1678}1679 1680define <vscale x 1 x i32> @splice_nxv1i32_offset_zero(<vscale x 1 x i32> %a, <vscale x 1 x i32> %b) #0 {1681; CHECK-LABEL: splice_nxv1i32_offset_zero:1682; CHECK: # %bb.0:1683; CHECK-NEXT: ret1684 %res = call <vscale x 1 x i32> @llvm.vector.splice.nxv1i32(<vscale x 1 x i32> %a, <vscale x 1 x i32> %b, i32 0)1685 ret <vscale x 1 x i32> %res1686}1687 1688define <vscale x 1 x i32> @splice_nxv1i32_offset_negone(<vscale x 1 x i32> %a, <vscale x 1 x i32> %b) #0 {1689; NOVLDEP-LABEL: splice_nxv1i32_offset_negone:1690; NOVLDEP: # %bb.0:1691; NOVLDEP-NEXT: csrr a0, vlenb1692; NOVLDEP-NEXT: srli a0, a0, 31693; NOVLDEP-NEXT: addi a0, a0, -11694; NOVLDEP-NEXT: vsetvli a1, zero, e32, mf2, ta, ma1695; NOVLDEP-NEXT: vslidedown.vx v8, v8, a01696; NOVLDEP-NEXT: vslideup.vi v8, v9, 11697; NOVLDEP-NEXT: ret1698;1699; VLDEP-LABEL: splice_nxv1i32_offset_negone:1700; VLDEP: # %bb.0:1701; VLDEP-NEXT: csrr a0, vlenb1702; VLDEP-NEXT: srli a0, a0, 31703; VLDEP-NEXT: addi a0, a0, -11704; VLDEP-NEXT: vsetivli zero, 1, e32, mf2, ta, ma1705; VLDEP-NEXT: vslidedown.vx v8, v8, a01706; VLDEP-NEXT: vsetvli a0, zero, e32, mf2, ta, ma1707; VLDEP-NEXT: vslideup.vi v8, v9, 11708; VLDEP-NEXT: ret1709 %res = call <vscale x 1 x i32> @llvm.vector.splice.nxv1i32(<vscale x 1 x i32> %a, <vscale x 1 x i32> %b, i32 -1)1710 ret <vscale x 1 x i32> %res1711}1712 1713define <vscale x 1 x i32> @splice_nxv1i32_offset_min(<vscale x 1 x i32> %a, <vscale x 1 x i32> %b) #0 {1714; NOVLDEP-LABEL: splice_nxv1i32_offset_min:1715; NOVLDEP: # %bb.0:1716; NOVLDEP-NEXT: csrr a0, vlenb1717; NOVLDEP-NEXT: srli a0, a0, 31718; NOVLDEP-NEXT: addi a0, a0, -21719; NOVLDEP-NEXT: vsetvli a1, zero, e32, mf2, ta, ma1720; NOVLDEP-NEXT: vslidedown.vx v8, v8, a01721; NOVLDEP-NEXT: vslideup.vi v8, v9, 21722; NOVLDEP-NEXT: ret1723;1724; VLDEP-LABEL: splice_nxv1i32_offset_min:1725; VLDEP: # %bb.0:1726; VLDEP-NEXT: csrr a0, vlenb1727; VLDEP-NEXT: srli a0, a0, 31728; VLDEP-NEXT: addi a0, a0, -21729; VLDEP-NEXT: vsetivli zero, 2, e32, mf2, ta, ma1730; VLDEP-NEXT: vslidedown.vx v8, v8, a01731; VLDEP-NEXT: vsetvli a0, zero, e32, mf2, ta, ma1732; VLDEP-NEXT: vslideup.vi v8, v9, 21733; VLDEP-NEXT: ret1734 %res = call <vscale x 1 x i32> @llvm.vector.splice.nxv1i32(<vscale x 1 x i32> %a, <vscale x 1 x i32> %b, i32 -2)1735 ret <vscale x 1 x i32> %res1736}1737 1738define <vscale x 1 x i32> @splice_nxv1i32_offset_max(<vscale x 1 x i32> %a, <vscale x 1 x i32> %b) #0 {1739; NOVLDEP-LABEL: splice_nxv1i32_offset_max:1740; NOVLDEP: # %bb.0:1741; NOVLDEP-NEXT: vsetvli a0, zero, e32, mf2, ta, ma1742; NOVLDEP-NEXT: vslidedown.vi v8, v8, 11743; NOVLDEP-NEXT: csrr a0, vlenb1744; NOVLDEP-NEXT: srli a0, a0, 31745; NOVLDEP-NEXT: addi a0, a0, -11746; NOVLDEP-NEXT: vslideup.vx v8, v9, a01747; NOVLDEP-NEXT: ret1748;1749; VLDEP-LABEL: splice_nxv1i32_offset_max:1750; VLDEP: # %bb.0:1751; VLDEP-NEXT: csrr a0, vlenb1752; VLDEP-NEXT: srli a0, a0, 31753; VLDEP-NEXT: addi a0, a0, -11754; VLDEP-NEXT: vsetvli zero, a0, e32, mf2, ta, ma1755; VLDEP-NEXT: vslidedown.vi v8, v8, 11756; VLDEP-NEXT: vsetvli a1, zero, e32, mf2, ta, ma1757; VLDEP-NEXT: vslideup.vx v8, v9, a01758; VLDEP-NEXT: ret1759 %res = call <vscale x 1 x i32> @llvm.vector.splice.nxv1i32(<vscale x 1 x i32> %a, <vscale x 1 x i32> %b, i32 1)1760 ret <vscale x 1 x i32> %res1761}1762 1763define <vscale x 2 x i32> @splice_nxv2i32_offset_zero(<vscale x 2 x i32> %a, <vscale x 2 x i32> %b) #0 {1764; CHECK-LABEL: splice_nxv2i32_offset_zero:1765; CHECK: # %bb.0:1766; CHECK-NEXT: ret1767 %res = call <vscale x 2 x i32> @llvm.vector.splice.nxv2i32(<vscale x 2 x i32> %a, <vscale x 2 x i32> %b, i32 0)1768 ret <vscale x 2 x i32> %res1769}1770 1771define <vscale x 2 x i32> @splice_nxv2i32_offset_negone(<vscale x 2 x i32> %a, <vscale x 2 x i32> %b) #0 {1772; NOVLDEP-LABEL: splice_nxv2i32_offset_negone:1773; NOVLDEP: # %bb.0:1774; NOVLDEP-NEXT: csrr a0, vlenb1775; NOVLDEP-NEXT: srli a0, a0, 21776; NOVLDEP-NEXT: addi a0, a0, -11777; NOVLDEP-NEXT: vsetvli a1, zero, e32, m1, ta, ma1778; NOVLDEP-NEXT: vslidedown.vx v8, v8, a01779; NOVLDEP-NEXT: vslideup.vi v8, v9, 11780; NOVLDEP-NEXT: ret1781;1782; VLDEP-LABEL: splice_nxv2i32_offset_negone:1783; VLDEP: # %bb.0:1784; VLDEP-NEXT: csrr a0, vlenb1785; VLDEP-NEXT: srli a0, a0, 21786; VLDEP-NEXT: addi a0, a0, -11787; VLDEP-NEXT: vsetivli zero, 1, e32, m1, ta, ma1788; VLDEP-NEXT: vslidedown.vx v8, v8, a01789; VLDEP-NEXT: vsetvli a0, zero, e32, m1, ta, ma1790; VLDEP-NEXT: vslideup.vi v8, v9, 11791; VLDEP-NEXT: ret1792 %res = call <vscale x 2 x i32> @llvm.vector.splice.nxv2i32(<vscale x 2 x i32> %a, <vscale x 2 x i32> %b, i32 -1)1793 ret <vscale x 2 x i32> %res1794}1795 1796define <vscale x 2 x i32> @splice_nxv2i32_offset_min(<vscale x 2 x i32> %a, <vscale x 2 x i32> %b) #0 {1797; NOVLDEP-LABEL: splice_nxv2i32_offset_min:1798; NOVLDEP: # %bb.0:1799; NOVLDEP-NEXT: csrr a0, vlenb1800; NOVLDEP-NEXT: srli a0, a0, 21801; NOVLDEP-NEXT: addi a0, a0, -41802; NOVLDEP-NEXT: vsetvli a1, zero, e32, m1, ta, ma1803; NOVLDEP-NEXT: vslidedown.vx v8, v8, a01804; NOVLDEP-NEXT: vslideup.vi v8, v9, 41805; NOVLDEP-NEXT: ret1806;1807; VLDEP-LABEL: splice_nxv2i32_offset_min:1808; VLDEP: # %bb.0:1809; VLDEP-NEXT: csrr a0, vlenb1810; VLDEP-NEXT: srli a0, a0, 21811; VLDEP-NEXT: addi a0, a0, -41812; VLDEP-NEXT: vsetivli zero, 4, e32, m1, ta, ma1813; VLDEP-NEXT: vslidedown.vx v8, v8, a01814; VLDEP-NEXT: vsetvli a0, zero, e32, m1, ta, ma1815; VLDEP-NEXT: vslideup.vi v8, v9, 41816; VLDEP-NEXT: ret1817 %res = call <vscale x 2 x i32> @llvm.vector.splice.nxv2i32(<vscale x 2 x i32> %a, <vscale x 2 x i32> %b, i32 -4)1818 ret <vscale x 2 x i32> %res1819}1820 1821define <vscale x 2 x i32> @splice_nxv2i32_offset_max(<vscale x 2 x i32> %a, <vscale x 2 x i32> %b) #0 {1822; NOVLDEP-LABEL: splice_nxv2i32_offset_max:1823; NOVLDEP: # %bb.0:1824; NOVLDEP-NEXT: vsetvli a0, zero, e32, m1, ta, ma1825; NOVLDEP-NEXT: vslidedown.vi v8, v8, 31826; NOVLDEP-NEXT: csrr a0, vlenb1827; NOVLDEP-NEXT: srli a0, a0, 21828; NOVLDEP-NEXT: addi a0, a0, -31829; NOVLDEP-NEXT: vslideup.vx v8, v9, a01830; NOVLDEP-NEXT: ret1831;1832; VLDEP-LABEL: splice_nxv2i32_offset_max:1833; VLDEP: # %bb.0:1834; VLDEP-NEXT: csrr a0, vlenb1835; VLDEP-NEXT: srli a0, a0, 21836; VLDEP-NEXT: addi a0, a0, -31837; VLDEP-NEXT: vsetvli zero, a0, e32, m1, ta, ma1838; VLDEP-NEXT: vslidedown.vi v8, v8, 31839; VLDEP-NEXT: vsetvli a1, zero, e32, m1, ta, ma1840; VLDEP-NEXT: vslideup.vx v8, v9, a01841; VLDEP-NEXT: ret1842 %res = call <vscale x 2 x i32> @llvm.vector.splice.nxv2i32(<vscale x 2 x i32> %a, <vscale x 2 x i32> %b, i32 3)1843 ret <vscale x 2 x i32> %res1844}1845 1846define <vscale x 4 x i32> @splice_nxv4i32_offset_zero(<vscale x 4 x i32> %a, <vscale x 4 x i32> %b) #0 {1847; CHECK-LABEL: splice_nxv4i32_offset_zero:1848; CHECK: # %bb.0:1849; CHECK-NEXT: ret1850 %res = call <vscale x 4 x i32> @llvm.vector.splice.nxv4i32(<vscale x 4 x i32> %a, <vscale x 4 x i32> %b, i32 0)1851 ret <vscale x 4 x i32> %res1852}1853 1854define <vscale x 4 x i32> @splice_nxv4i32_offset_negone(<vscale x 4 x i32> %a, <vscale x 4 x i32> %b) #0 {1855; NOVLDEP-LABEL: splice_nxv4i32_offset_negone:1856; NOVLDEP: # %bb.0:1857; NOVLDEP-NEXT: csrr a0, vlenb1858; NOVLDEP-NEXT: srli a0, a0, 11859; NOVLDEP-NEXT: addi a0, a0, -11860; NOVLDEP-NEXT: vsetvli a1, zero, e32, m2, ta, ma1861; NOVLDEP-NEXT: vslidedown.vx v8, v8, a01862; NOVLDEP-NEXT: vslideup.vi v8, v10, 11863; NOVLDEP-NEXT: ret1864;1865; VLDEP-LABEL: splice_nxv4i32_offset_negone:1866; VLDEP: # %bb.0:1867; VLDEP-NEXT: csrr a0, vlenb1868; VLDEP-NEXT: srli a0, a0, 11869; VLDEP-NEXT: addi a0, a0, -11870; VLDEP-NEXT: vsetivli zero, 1, e32, m2, ta, ma1871; VLDEP-NEXT: vslidedown.vx v8, v8, a01872; VLDEP-NEXT: vsetvli a0, zero, e32, m2, ta, ma1873; VLDEP-NEXT: vslideup.vi v8, v10, 11874; VLDEP-NEXT: ret1875 %res = call <vscale x 4 x i32> @llvm.vector.splice.nxv4i32(<vscale x 4 x i32> %a, <vscale x 4 x i32> %b, i32 -1)1876 ret <vscale x 4 x i32> %res1877}1878 1879define <vscale x 4 x i32> @splice_nxv4i32_offset_min(<vscale x 4 x i32> %a, <vscale x 4 x i32> %b) #0 {1880; NOVLDEP-LABEL: splice_nxv4i32_offset_min:1881; NOVLDEP: # %bb.0:1882; NOVLDEP-NEXT: csrr a0, vlenb1883; NOVLDEP-NEXT: srli a0, a0, 11884; NOVLDEP-NEXT: addi a0, a0, -81885; NOVLDEP-NEXT: vsetvli a1, zero, e32, m2, ta, ma1886; NOVLDEP-NEXT: vslidedown.vx v8, v8, a01887; NOVLDEP-NEXT: vslideup.vi v8, v10, 81888; NOVLDEP-NEXT: ret1889;1890; VLDEP-LABEL: splice_nxv4i32_offset_min:1891; VLDEP: # %bb.0:1892; VLDEP-NEXT: csrr a0, vlenb1893; VLDEP-NEXT: srli a0, a0, 11894; VLDEP-NEXT: addi a0, a0, -81895; VLDEP-NEXT: vsetivli zero, 8, e32, m2, ta, ma1896; VLDEP-NEXT: vslidedown.vx v8, v8, a01897; VLDEP-NEXT: vsetvli a0, zero, e32, m2, ta, ma1898; VLDEP-NEXT: vslideup.vi v8, v10, 81899; VLDEP-NEXT: ret1900 %res = call <vscale x 4 x i32> @llvm.vector.splice.nxv4i32(<vscale x 4 x i32> %a, <vscale x 4 x i32> %b, i32 -8)1901 ret <vscale x 4 x i32> %res1902}1903 1904define <vscale x 4 x i32> @splice_nxv4i32_offset_max(<vscale x 4 x i32> %a, <vscale x 4 x i32> %b) #0 {1905; NOVLDEP-LABEL: splice_nxv4i32_offset_max:1906; NOVLDEP: # %bb.0:1907; NOVLDEP-NEXT: vsetvli a0, zero, e32, m2, ta, ma1908; NOVLDEP-NEXT: vslidedown.vi v8, v8, 71909; NOVLDEP-NEXT: csrr a0, vlenb1910; NOVLDEP-NEXT: srli a0, a0, 11911; NOVLDEP-NEXT: addi a0, a0, -71912; NOVLDEP-NEXT: vslideup.vx v8, v10, a01913; NOVLDEP-NEXT: ret1914;1915; VLDEP-LABEL: splice_nxv4i32_offset_max:1916; VLDEP: # %bb.0:1917; VLDEP-NEXT: csrr a0, vlenb1918; VLDEP-NEXT: srli a0, a0, 11919; VLDEP-NEXT: addi a0, a0, -71920; VLDEP-NEXT: vsetvli zero, a0, e32, m2, ta, ma1921; VLDEP-NEXT: vslidedown.vi v8, v8, 71922; VLDEP-NEXT: vsetvli a1, zero, e32, m2, ta, ma1923; VLDEP-NEXT: vslideup.vx v8, v10, a01924; VLDEP-NEXT: ret1925 %res = call <vscale x 4 x i32> @llvm.vector.splice.nxv4i32(<vscale x 4 x i32> %a, <vscale x 4 x i32> %b, i32 7)1926 ret <vscale x 4 x i32> %res1927}1928 1929define <vscale x 8 x i32> @splice_nxv8i32_offset_zero(<vscale x 8 x i32> %a, <vscale x 8 x i32> %b) #0 {1930; CHECK-LABEL: splice_nxv8i32_offset_zero:1931; CHECK: # %bb.0:1932; CHECK-NEXT: ret1933 %res = call <vscale x 8 x i32> @llvm.vector.splice.nxv8i32(<vscale x 8 x i32> %a, <vscale x 8 x i32> %b, i32 0)1934 ret <vscale x 8 x i32> %res1935}1936 1937define <vscale x 8 x i32> @splice_nxv8i32_offset_negone(<vscale x 8 x i32> %a, <vscale x 8 x i32> %b) #0 {1938; NOVLDEP-LABEL: splice_nxv8i32_offset_negone:1939; NOVLDEP: # %bb.0:1940; NOVLDEP-NEXT: csrr a0, vlenb1941; NOVLDEP-NEXT: addi a0, a0, -11942; NOVLDEP-NEXT: vsetvli a1, zero, e32, m4, ta, ma1943; NOVLDEP-NEXT: vslidedown.vx v8, v8, a01944; NOVLDEP-NEXT: vslideup.vi v8, v12, 11945; NOVLDEP-NEXT: ret1946;1947; VLDEP-LABEL: splice_nxv8i32_offset_negone:1948; VLDEP: # %bb.0:1949; VLDEP-NEXT: csrr a0, vlenb1950; VLDEP-NEXT: addi a0, a0, -11951; VLDEP-NEXT: vsetivli zero, 1, e32, m4, ta, ma1952; VLDEP-NEXT: vslidedown.vx v8, v8, a01953; VLDEP-NEXT: vsetvli a0, zero, e32, m4, ta, ma1954; VLDEP-NEXT: vslideup.vi v8, v12, 11955; VLDEP-NEXT: ret1956 %res = call <vscale x 8 x i32> @llvm.vector.splice.nxv8i32(<vscale x 8 x i32> %a, <vscale x 8 x i32> %b, i32 -1)1957 ret <vscale x 8 x i32> %res1958}1959 1960define <vscale x 8 x i32> @splice_nxv8i32_offset_min(<vscale x 8 x i32> %a, <vscale x 8 x i32> %b) #0 {1961; NOVLDEP-LABEL: splice_nxv8i32_offset_min:1962; NOVLDEP: # %bb.0:1963; NOVLDEP-NEXT: csrr a0, vlenb1964; NOVLDEP-NEXT: addi a0, a0, -161965; NOVLDEP-NEXT: vsetvli a1, zero, e32, m4, ta, ma1966; NOVLDEP-NEXT: vslidedown.vx v8, v8, a01967; NOVLDEP-NEXT: vslideup.vi v8, v12, 161968; NOVLDEP-NEXT: ret1969;1970; VLDEP-LABEL: splice_nxv8i32_offset_min:1971; VLDEP: # %bb.0:1972; VLDEP-NEXT: csrr a0, vlenb1973; VLDEP-NEXT: addi a0, a0, -161974; VLDEP-NEXT: vsetivli zero, 16, e32, m4, ta, ma1975; VLDEP-NEXT: vslidedown.vx v8, v8, a01976; VLDEP-NEXT: vsetvli a0, zero, e32, m4, ta, ma1977; VLDEP-NEXT: vslideup.vi v8, v12, 161978; VLDEP-NEXT: ret1979 %res = call <vscale x 8 x i32> @llvm.vector.splice.nxv8i32(<vscale x 8 x i32> %a, <vscale x 8 x i32> %b, i32 -16)1980 ret <vscale x 8 x i32> %res1981}1982 1983define <vscale x 8 x i32> @splice_nxv8i32_offset_max(<vscale x 8 x i32> %a, <vscale x 8 x i32> %b) #0 {1984; NOVLDEP-LABEL: splice_nxv8i32_offset_max:1985; NOVLDEP: # %bb.0:1986; NOVLDEP-NEXT: csrr a0, vlenb1987; NOVLDEP-NEXT: addi a0, a0, -151988; NOVLDEP-NEXT: vsetvli a1, zero, e32, m4, ta, ma1989; NOVLDEP-NEXT: vslidedown.vi v8, v8, 151990; NOVLDEP-NEXT: vslideup.vx v8, v12, a01991; NOVLDEP-NEXT: ret1992;1993; VLDEP-LABEL: splice_nxv8i32_offset_max:1994; VLDEP: # %bb.0:1995; VLDEP-NEXT: csrr a0, vlenb1996; VLDEP-NEXT: addi a0, a0, -151997; VLDEP-NEXT: vsetvli zero, a0, e32, m4, ta, ma1998; VLDEP-NEXT: vslidedown.vi v8, v8, 151999; VLDEP-NEXT: vsetvli a1, zero, e32, m4, ta, ma2000; VLDEP-NEXT: vslideup.vx v8, v12, a02001; VLDEP-NEXT: ret2002 %res = call <vscale x 8 x i32> @llvm.vector.splice.nxv8i32(<vscale x 8 x i32> %a, <vscale x 8 x i32> %b, i32 15)2003 ret <vscale x 8 x i32> %res2004}2005 2006define <vscale x 16 x i32> @splice_nxv16i32_offset_zero(<vscale x 16 x i32> %a, <vscale x 16 x i32> %b) #0 {2007; CHECK-LABEL: splice_nxv16i32_offset_zero:2008; CHECK: # %bb.0:2009; CHECK-NEXT: ret2010 %res = call <vscale x 16 x i32> @llvm.vector.splice.nxv16i32(<vscale x 16 x i32> %a, <vscale x 16 x i32> %b, i32 0)2011 ret <vscale x 16 x i32> %res2012}2013 2014define <vscale x 16 x i32> @splice_nxv16i32_offset_negone(<vscale x 16 x i32> %a, <vscale x 16 x i32> %b) #0 {2015; NOVLDEP-LABEL: splice_nxv16i32_offset_negone:2016; NOVLDEP: # %bb.0:2017; NOVLDEP-NEXT: csrr a0, vlenb2018; NOVLDEP-NEXT: slli a0, a0, 12019; NOVLDEP-NEXT: addi a0, a0, -12020; NOVLDEP-NEXT: vsetvli a1, zero, e32, m8, ta, ma2021; NOVLDEP-NEXT: vslidedown.vx v8, v8, a02022; NOVLDEP-NEXT: vslideup.vi v8, v16, 12023; NOVLDEP-NEXT: ret2024;2025; VLDEP-LABEL: splice_nxv16i32_offset_negone:2026; VLDEP: # %bb.0:2027; VLDEP-NEXT: csrr a0, vlenb2028; VLDEP-NEXT: slli a0, a0, 12029; VLDEP-NEXT: addi a0, a0, -12030; VLDEP-NEXT: vsetivli zero, 1, e32, m8, ta, ma2031; VLDEP-NEXT: vslidedown.vx v8, v8, a02032; VLDEP-NEXT: vsetvli a0, zero, e32, m8, ta, ma2033; VLDEP-NEXT: vslideup.vi v8, v16, 12034; VLDEP-NEXT: ret2035 %res = call <vscale x 16 x i32> @llvm.vector.splice.nxv16i32(<vscale x 16 x i32> %a, <vscale x 16 x i32> %b, i32 -1)2036 ret <vscale x 16 x i32> %res2037}2038 2039define <vscale x 16 x i32> @splice_nxv16i32_offset_min(<vscale x 16 x i32> %a, <vscale x 16 x i32> %b) #0 {2040; NOVLDEP-LABEL: splice_nxv16i32_offset_min:2041; NOVLDEP: # %bb.0:2042; NOVLDEP-NEXT: csrr a0, vlenb2043; NOVLDEP-NEXT: slli a0, a0, 12044; NOVLDEP-NEXT: addi a0, a0, -322045; NOVLDEP-NEXT: vsetvli a1, zero, e32, m8, ta, ma2046; NOVLDEP-NEXT: vslidedown.vx v8, v8, a02047; NOVLDEP-NEXT: li a0, 322048; NOVLDEP-NEXT: vslideup.vx v8, v16, a02049; NOVLDEP-NEXT: ret2050;2051; VLDEP-LABEL: splice_nxv16i32_offset_min:2052; VLDEP: # %bb.0:2053; VLDEP-NEXT: csrr a0, vlenb2054; VLDEP-NEXT: slli a0, a0, 12055; VLDEP-NEXT: addi a0, a0, -322056; VLDEP-NEXT: li a1, 322057; VLDEP-NEXT: vsetvli zero, a1, e32, m8, ta, ma2058; VLDEP-NEXT: vslidedown.vx v8, v8, a02059; VLDEP-NEXT: vsetvli a0, zero, e32, m8, ta, ma2060; VLDEP-NEXT: vslideup.vx v8, v16, a12061; VLDEP-NEXT: ret2062 %res = call <vscale x 16 x i32> @llvm.vector.splice.nxv16i32(<vscale x 16 x i32> %a, <vscale x 16 x i32> %b, i32 -32)2063 ret <vscale x 16 x i32> %res2064}2065 2066define <vscale x 16 x i32> @splice_nxv16i32_offset_max(<vscale x 16 x i32> %a, <vscale x 16 x i32> %b) #0 {2067; NOVLDEP-LABEL: splice_nxv16i32_offset_max:2068; NOVLDEP: # %bb.0:2069; NOVLDEP-NEXT: vsetvli a0, zero, e32, m8, ta, ma2070; NOVLDEP-NEXT: vslidedown.vi v8, v8, 312071; NOVLDEP-NEXT: csrr a0, vlenb2072; NOVLDEP-NEXT: slli a0, a0, 12073; NOVLDEP-NEXT: addi a0, a0, -312074; NOVLDEP-NEXT: vslideup.vx v8, v16, a02075; NOVLDEP-NEXT: ret2076;2077; VLDEP-LABEL: splice_nxv16i32_offset_max:2078; VLDEP: # %bb.0:2079; VLDEP-NEXT: csrr a0, vlenb2080; VLDEP-NEXT: slli a0, a0, 12081; VLDEP-NEXT: addi a0, a0, -312082; VLDEP-NEXT: vsetvli zero, a0, e32, m8, ta, ma2083; VLDEP-NEXT: vslidedown.vi v8, v8, 312084; VLDEP-NEXT: vsetvli a1, zero, e32, m8, ta, ma2085; VLDEP-NEXT: vslideup.vx v8, v16, a02086; VLDEP-NEXT: ret2087 %res = call <vscale x 16 x i32> @llvm.vector.splice.nxv16i32(<vscale x 16 x i32> %a, <vscale x 16 x i32> %b, i32 31)2088 ret <vscale x 16 x i32> %res2089}2090 2091define <vscale x 1 x i64> @splice_nxv1i64_offset_zero(<vscale x 1 x i64> %a, <vscale x 1 x i64> %b) #0 {2092; CHECK-LABEL: splice_nxv1i64_offset_zero:2093; CHECK: # %bb.0:2094; CHECK-NEXT: ret2095 %res = call <vscale x 1 x i64> @llvm.vector.splice.nxv1i64(<vscale x 1 x i64> %a, <vscale x 1 x i64> %b, i32 0)2096 ret <vscale x 1 x i64> %res2097}2098 2099define <vscale x 1 x i64> @splice_nxv1i64_offset_negone(<vscale x 1 x i64> %a, <vscale x 1 x i64> %b) #0 {2100; NOVLDEP-LABEL: splice_nxv1i64_offset_negone:2101; NOVLDEP: # %bb.0:2102; NOVLDEP-NEXT: csrr a0, vlenb2103; NOVLDEP-NEXT: srli a0, a0, 32104; NOVLDEP-NEXT: addi a0, a0, -12105; NOVLDEP-NEXT: vsetvli a1, zero, e64, m1, ta, ma2106; NOVLDEP-NEXT: vslidedown.vx v8, v8, a02107; NOVLDEP-NEXT: vslideup.vi v8, v9, 12108; NOVLDEP-NEXT: ret2109;2110; VLDEP-LABEL: splice_nxv1i64_offset_negone:2111; VLDEP: # %bb.0:2112; VLDEP-NEXT: csrr a0, vlenb2113; VLDEP-NEXT: srli a0, a0, 32114; VLDEP-NEXT: addi a0, a0, -12115; VLDEP-NEXT: vsetivli zero, 1, e64, m1, ta, ma2116; VLDEP-NEXT: vslidedown.vx v8, v8, a02117; VLDEP-NEXT: vsetvli a0, zero, e64, m1, ta, ma2118; VLDEP-NEXT: vslideup.vi v8, v9, 12119; VLDEP-NEXT: ret2120 %res = call <vscale x 1 x i64> @llvm.vector.splice.nxv1i64(<vscale x 1 x i64> %a, <vscale x 1 x i64> %b, i32 -1)2121 ret <vscale x 1 x i64> %res2122}2123 2124define <vscale x 1 x i64> @splice_nxv1i64_offset_min(<vscale x 1 x i64> %a, <vscale x 1 x i64> %b) #0 {2125; NOVLDEP-LABEL: splice_nxv1i64_offset_min:2126; NOVLDEP: # %bb.0:2127; NOVLDEP-NEXT: csrr a0, vlenb2128; NOVLDEP-NEXT: srli a0, a0, 32129; NOVLDEP-NEXT: addi a0, a0, -22130; NOVLDEP-NEXT: vsetvli a1, zero, e64, m1, ta, ma2131; NOVLDEP-NEXT: vslidedown.vx v8, v8, a02132; NOVLDEP-NEXT: vslideup.vi v8, v9, 22133; NOVLDEP-NEXT: ret2134;2135; VLDEP-LABEL: splice_nxv1i64_offset_min:2136; VLDEP: # %bb.0:2137; VLDEP-NEXT: csrr a0, vlenb2138; VLDEP-NEXT: srli a0, a0, 32139; VLDEP-NEXT: addi a0, a0, -22140; VLDEP-NEXT: vsetivli zero, 2, e64, m1, ta, ma2141; VLDEP-NEXT: vslidedown.vx v8, v8, a02142; VLDEP-NEXT: vsetvli a0, zero, e64, m1, ta, ma2143; VLDEP-NEXT: vslideup.vi v8, v9, 22144; VLDEP-NEXT: ret2145 %res = call <vscale x 1 x i64> @llvm.vector.splice.nxv1i64(<vscale x 1 x i64> %a, <vscale x 1 x i64> %b, i32 -2)2146 ret <vscale x 1 x i64> %res2147}2148 2149define <vscale x 1 x i64> @splice_nxv1i64_offset_max(<vscale x 1 x i64> %a, <vscale x 1 x i64> %b) #0 {2150; NOVLDEP-LABEL: splice_nxv1i64_offset_max:2151; NOVLDEP: # %bb.0:2152; NOVLDEP-NEXT: vsetvli a0, zero, e64, m1, ta, ma2153; NOVLDEP-NEXT: vslidedown.vi v8, v8, 12154; NOVLDEP-NEXT: csrr a0, vlenb2155; NOVLDEP-NEXT: srli a0, a0, 32156; NOVLDEP-NEXT: addi a0, a0, -12157; NOVLDEP-NEXT: vslideup.vx v8, v9, a02158; NOVLDEP-NEXT: ret2159;2160; VLDEP-LABEL: splice_nxv1i64_offset_max:2161; VLDEP: # %bb.0:2162; VLDEP-NEXT: csrr a0, vlenb2163; VLDEP-NEXT: srli a0, a0, 32164; VLDEP-NEXT: addi a0, a0, -12165; VLDEP-NEXT: vsetvli zero, a0, e64, m1, ta, ma2166; VLDEP-NEXT: vslidedown.vi v8, v8, 12167; VLDEP-NEXT: vsetvli a1, zero, e64, m1, ta, ma2168; VLDEP-NEXT: vslideup.vx v8, v9, a02169; VLDEP-NEXT: ret2170 %res = call <vscale x 1 x i64> @llvm.vector.splice.nxv1i64(<vscale x 1 x i64> %a, <vscale x 1 x i64> %b, i32 1)2171 ret <vscale x 1 x i64> %res2172}2173 2174define <vscale x 2 x i64> @splice_nxv2i64_offset_zero(<vscale x 2 x i64> %a, <vscale x 2 x i64> %b) #0 {2175; CHECK-LABEL: splice_nxv2i64_offset_zero:2176; CHECK: # %bb.0:2177; CHECK-NEXT: ret2178 %res = call <vscale x 2 x i64> @llvm.vector.splice.nxv2i64(<vscale x 2 x i64> %a, <vscale x 2 x i64> %b, i32 0)2179 ret <vscale x 2 x i64> %res2180}2181 2182define <vscale x 2 x i64> @splice_nxv2i64_offset_negone(<vscale x 2 x i64> %a, <vscale x 2 x i64> %b) #0 {2183; NOVLDEP-LABEL: splice_nxv2i64_offset_negone:2184; NOVLDEP: # %bb.0:2185; NOVLDEP-NEXT: csrr a0, vlenb2186; NOVLDEP-NEXT: srli a0, a0, 22187; NOVLDEP-NEXT: addi a0, a0, -12188; NOVLDEP-NEXT: vsetvli a1, zero, e64, m2, ta, ma2189; NOVLDEP-NEXT: vslidedown.vx v8, v8, a02190; NOVLDEP-NEXT: vslideup.vi v8, v10, 12191; NOVLDEP-NEXT: ret2192;2193; VLDEP-LABEL: splice_nxv2i64_offset_negone:2194; VLDEP: # %bb.0:2195; VLDEP-NEXT: csrr a0, vlenb2196; VLDEP-NEXT: srli a0, a0, 22197; VLDEP-NEXT: addi a0, a0, -12198; VLDEP-NEXT: vsetivli zero, 1, e64, m2, ta, ma2199; VLDEP-NEXT: vslidedown.vx v8, v8, a02200; VLDEP-NEXT: vsetvli a0, zero, e64, m2, ta, ma2201; VLDEP-NEXT: vslideup.vi v8, v10, 12202; VLDEP-NEXT: ret2203 %res = call <vscale x 2 x i64> @llvm.vector.splice.nxv2i64(<vscale x 2 x i64> %a, <vscale x 2 x i64> %b, i32 -1)2204 ret <vscale x 2 x i64> %res2205}2206 2207define <vscale x 2 x i64> @splice_nxv2i64_offset_min(<vscale x 2 x i64> %a, <vscale x 2 x i64> %b) #0 {2208; NOVLDEP-LABEL: splice_nxv2i64_offset_min:2209; NOVLDEP: # %bb.0:2210; NOVLDEP-NEXT: csrr a0, vlenb2211; NOVLDEP-NEXT: srli a0, a0, 22212; NOVLDEP-NEXT: addi a0, a0, -42213; NOVLDEP-NEXT: vsetvli a1, zero, e64, m2, ta, ma2214; NOVLDEP-NEXT: vslidedown.vx v8, v8, a02215; NOVLDEP-NEXT: vslideup.vi v8, v10, 42216; NOVLDEP-NEXT: ret2217;2218; VLDEP-LABEL: splice_nxv2i64_offset_min:2219; VLDEP: # %bb.0:2220; VLDEP-NEXT: csrr a0, vlenb2221; VLDEP-NEXT: srli a0, a0, 22222; VLDEP-NEXT: addi a0, a0, -42223; VLDEP-NEXT: vsetivli zero, 4, e64, m2, ta, ma2224; VLDEP-NEXT: vslidedown.vx v8, v8, a02225; VLDEP-NEXT: vsetvli a0, zero, e64, m2, ta, ma2226; VLDEP-NEXT: vslideup.vi v8, v10, 42227; VLDEP-NEXT: ret2228 %res = call <vscale x 2 x i64> @llvm.vector.splice.nxv2i64(<vscale x 2 x i64> %a, <vscale x 2 x i64> %b, i32 -4)2229 ret <vscale x 2 x i64> %res2230}2231 2232define <vscale x 2 x i64> @splice_nxv2i64_offset_max(<vscale x 2 x i64> %a, <vscale x 2 x i64> %b) #0 {2233; NOVLDEP-LABEL: splice_nxv2i64_offset_max:2234; NOVLDEP: # %bb.0:2235; NOVLDEP-NEXT: vsetvli a0, zero, e64, m2, ta, ma2236; NOVLDEP-NEXT: vslidedown.vi v8, v8, 32237; NOVLDEP-NEXT: csrr a0, vlenb2238; NOVLDEP-NEXT: srli a0, a0, 22239; NOVLDEP-NEXT: addi a0, a0, -32240; NOVLDEP-NEXT: vslideup.vx v8, v10, a02241; NOVLDEP-NEXT: ret2242;2243; VLDEP-LABEL: splice_nxv2i64_offset_max:2244; VLDEP: # %bb.0:2245; VLDEP-NEXT: csrr a0, vlenb2246; VLDEP-NEXT: srli a0, a0, 22247; VLDEP-NEXT: addi a0, a0, -32248; VLDEP-NEXT: vsetvli zero, a0, e64, m2, ta, ma2249; VLDEP-NEXT: vslidedown.vi v8, v8, 32250; VLDEP-NEXT: vsetvli a1, zero, e64, m2, ta, ma2251; VLDEP-NEXT: vslideup.vx v8, v10, a02252; VLDEP-NEXT: ret2253 %res = call <vscale x 2 x i64> @llvm.vector.splice.nxv2i64(<vscale x 2 x i64> %a, <vscale x 2 x i64> %b, i32 3)2254 ret <vscale x 2 x i64> %res2255}2256 2257define <vscale x 4 x i64> @splice_nxv4i64_offset_zero(<vscale x 4 x i64> %a, <vscale x 4 x i64> %b) #0 {2258; CHECK-LABEL: splice_nxv4i64_offset_zero:2259; CHECK: # %bb.0:2260; CHECK-NEXT: ret2261 %res = call <vscale x 4 x i64> @llvm.vector.splice.nxv4i64(<vscale x 4 x i64> %a, <vscale x 4 x i64> %b, i32 0)2262 ret <vscale x 4 x i64> %res2263}2264 2265define <vscale x 4 x i64> @splice_nxv4i64_offset_negone(<vscale x 4 x i64> %a, <vscale x 4 x i64> %b) #0 {2266; NOVLDEP-LABEL: splice_nxv4i64_offset_negone:2267; NOVLDEP: # %bb.0:2268; NOVLDEP-NEXT: csrr a0, vlenb2269; NOVLDEP-NEXT: srli a0, a0, 12270; NOVLDEP-NEXT: addi a0, a0, -12271; NOVLDEP-NEXT: vsetvli a1, zero, e64, m4, ta, ma2272; NOVLDEP-NEXT: vslidedown.vx v8, v8, a02273; NOVLDEP-NEXT: vslideup.vi v8, v12, 12274; NOVLDEP-NEXT: ret2275;2276; VLDEP-LABEL: splice_nxv4i64_offset_negone:2277; VLDEP: # %bb.0:2278; VLDEP-NEXT: csrr a0, vlenb2279; VLDEP-NEXT: srli a0, a0, 12280; VLDEP-NEXT: addi a0, a0, -12281; VLDEP-NEXT: vsetivli zero, 1, e64, m4, ta, ma2282; VLDEP-NEXT: vslidedown.vx v8, v8, a02283; VLDEP-NEXT: vsetvli a0, zero, e64, m4, ta, ma2284; VLDEP-NEXT: vslideup.vi v8, v12, 12285; VLDEP-NEXT: ret2286 %res = call <vscale x 4 x i64> @llvm.vector.splice.nxv4i64(<vscale x 4 x i64> %a, <vscale x 4 x i64> %b, i32 -1)2287 ret <vscale x 4 x i64> %res2288}2289 2290define <vscale x 4 x i64> @splice_nxv4i64_offset_min(<vscale x 4 x i64> %a, <vscale x 4 x i64> %b) #0 {2291; NOVLDEP-LABEL: splice_nxv4i64_offset_min:2292; NOVLDEP: # %bb.0:2293; NOVLDEP-NEXT: csrr a0, vlenb2294; NOVLDEP-NEXT: srli a0, a0, 12295; NOVLDEP-NEXT: addi a0, a0, -82296; NOVLDEP-NEXT: vsetvli a1, zero, e64, m4, ta, ma2297; NOVLDEP-NEXT: vslidedown.vx v8, v8, a02298; NOVLDEP-NEXT: vslideup.vi v8, v12, 82299; NOVLDEP-NEXT: ret2300;2301; VLDEP-LABEL: splice_nxv4i64_offset_min:2302; VLDEP: # %bb.0:2303; VLDEP-NEXT: csrr a0, vlenb2304; VLDEP-NEXT: srli a0, a0, 12305; VLDEP-NEXT: addi a0, a0, -82306; VLDEP-NEXT: vsetivli zero, 8, e64, m4, ta, ma2307; VLDEP-NEXT: vslidedown.vx v8, v8, a02308; VLDEP-NEXT: vsetvli a0, zero, e64, m4, ta, ma2309; VLDEP-NEXT: vslideup.vi v8, v12, 82310; VLDEP-NEXT: ret2311 %res = call <vscale x 4 x i64> @llvm.vector.splice.nxv4i64(<vscale x 4 x i64> %a, <vscale x 4 x i64> %b, i32 -8)2312 ret <vscale x 4 x i64> %res2313}2314 2315define <vscale x 4 x i64> @splice_nxv4i64_offset_max(<vscale x 4 x i64> %a, <vscale x 4 x i64> %b) #0 {2316; NOVLDEP-LABEL: splice_nxv4i64_offset_max:2317; NOVLDEP: # %bb.0:2318; NOVLDEP-NEXT: vsetvli a0, zero, e64, m4, ta, ma2319; NOVLDEP-NEXT: vslidedown.vi v8, v8, 72320; NOVLDEP-NEXT: csrr a0, vlenb2321; NOVLDEP-NEXT: srli a0, a0, 12322; NOVLDEP-NEXT: addi a0, a0, -72323; NOVLDEP-NEXT: vslideup.vx v8, v12, a02324; NOVLDEP-NEXT: ret2325;2326; VLDEP-LABEL: splice_nxv4i64_offset_max:2327; VLDEP: # %bb.0:2328; VLDEP-NEXT: csrr a0, vlenb2329; VLDEP-NEXT: srli a0, a0, 12330; VLDEP-NEXT: addi a0, a0, -72331; VLDEP-NEXT: vsetvli zero, a0, e64, m4, ta, ma2332; VLDEP-NEXT: vslidedown.vi v8, v8, 72333; VLDEP-NEXT: vsetvli a1, zero, e64, m4, ta, ma2334; VLDEP-NEXT: vslideup.vx v8, v12, a02335; VLDEP-NEXT: ret2336 %res = call <vscale x 4 x i64> @llvm.vector.splice.nxv4i64(<vscale x 4 x i64> %a, <vscale x 4 x i64> %b, i32 7)2337 ret <vscale x 4 x i64> %res2338}2339 2340define <vscale x 8 x i64> @splice_nxv8i64_offset_zero(<vscale x 8 x i64> %a, <vscale x 8 x i64> %b) #0 {2341; CHECK-LABEL: splice_nxv8i64_offset_zero:2342; CHECK: # %bb.0:2343; CHECK-NEXT: ret2344 %res = call <vscale x 8 x i64> @llvm.vector.splice.nxv8i64(<vscale x 8 x i64> %a, <vscale x 8 x i64> %b, i32 0)2345 ret <vscale x 8 x i64> %res2346}2347 2348define <vscale x 8 x i64> @splice_nxv8i64_offset_negone(<vscale x 8 x i64> %a, <vscale x 8 x i64> %b) #0 {2349; NOVLDEP-LABEL: splice_nxv8i64_offset_negone:2350; NOVLDEP: # %bb.0:2351; NOVLDEP-NEXT: csrr a0, vlenb2352; NOVLDEP-NEXT: addi a0, a0, -12353; NOVLDEP-NEXT: vsetvli a1, zero, e64, m8, ta, ma2354; NOVLDEP-NEXT: vslidedown.vx v8, v8, a02355; NOVLDEP-NEXT: vslideup.vi v8, v16, 12356; NOVLDEP-NEXT: ret2357;2358; VLDEP-LABEL: splice_nxv8i64_offset_negone:2359; VLDEP: # %bb.0:2360; VLDEP-NEXT: csrr a0, vlenb2361; VLDEP-NEXT: addi a0, a0, -12362; VLDEP-NEXT: vsetivli zero, 1, e64, m8, ta, ma2363; VLDEP-NEXT: vslidedown.vx v8, v8, a02364; VLDEP-NEXT: vsetvli a0, zero, e64, m8, ta, ma2365; VLDEP-NEXT: vslideup.vi v8, v16, 12366; VLDEP-NEXT: ret2367 %res = call <vscale x 8 x i64> @llvm.vector.splice.nxv8i64(<vscale x 8 x i64> %a, <vscale x 8 x i64> %b, i32 -1)2368 ret <vscale x 8 x i64> %res2369}2370 2371define <vscale x 8 x i64> @splice_nxv8i64_offset_min(<vscale x 8 x i64> %a, <vscale x 8 x i64> %b) #0 {2372; NOVLDEP-LABEL: splice_nxv8i64_offset_min:2373; NOVLDEP: # %bb.0:2374; NOVLDEP-NEXT: csrr a0, vlenb2375; NOVLDEP-NEXT: addi a0, a0, -162376; NOVLDEP-NEXT: vsetvli a1, zero, e64, m8, ta, ma2377; NOVLDEP-NEXT: vslidedown.vx v8, v8, a02378; NOVLDEP-NEXT: vslideup.vi v8, v16, 162379; NOVLDEP-NEXT: ret2380;2381; VLDEP-LABEL: splice_nxv8i64_offset_min:2382; VLDEP: # %bb.0:2383; VLDEP-NEXT: csrr a0, vlenb2384; VLDEP-NEXT: addi a0, a0, -162385; VLDEP-NEXT: vsetivli zero, 16, e64, m8, ta, ma2386; VLDEP-NEXT: vslidedown.vx v8, v8, a02387; VLDEP-NEXT: vsetvli a0, zero, e64, m8, ta, ma2388; VLDEP-NEXT: vslideup.vi v8, v16, 162389; VLDEP-NEXT: ret2390 %res = call <vscale x 8 x i64> @llvm.vector.splice.nxv8i64(<vscale x 8 x i64> %a, <vscale x 8 x i64> %b, i32 -16)2391 ret <vscale x 8 x i64> %res2392}2393 2394define <vscale x 8 x i64> @splice_nxv8i64_offset_max(<vscale x 8 x i64> %a, <vscale x 8 x i64> %b) #0 {2395; NOVLDEP-LABEL: splice_nxv8i64_offset_max:2396; NOVLDEP: # %bb.0:2397; NOVLDEP-NEXT: csrr a0, vlenb2398; NOVLDEP-NEXT: addi a0, a0, -152399; NOVLDEP-NEXT: vsetvli a1, zero, e64, m8, ta, ma2400; NOVLDEP-NEXT: vslidedown.vi v8, v8, 152401; NOVLDEP-NEXT: vslideup.vx v8, v16, a02402; NOVLDEP-NEXT: ret2403;2404; VLDEP-LABEL: splice_nxv8i64_offset_max:2405; VLDEP: # %bb.0:2406; VLDEP-NEXT: csrr a0, vlenb2407; VLDEP-NEXT: addi a0, a0, -152408; VLDEP-NEXT: vsetvli zero, a0, e64, m8, ta, ma2409; VLDEP-NEXT: vslidedown.vi v8, v8, 152410; VLDEP-NEXT: vsetvli a1, zero, e64, m8, ta, ma2411; VLDEP-NEXT: vslideup.vx v8, v16, a02412; VLDEP-NEXT: ret2413 %res = call <vscale x 8 x i64> @llvm.vector.splice.nxv8i64(<vscale x 8 x i64> %a, <vscale x 8 x i64> %b, i32 15)2414 ret <vscale x 8 x i64> %res2415}2416 2417define <vscale x 1 x bfloat> @splice_nxv1bf16_offset_zero(<vscale x 1 x bfloat> %a, <vscale x 1 x bfloat> %b) #0 {2418; CHECK-LABEL: splice_nxv1bf16_offset_zero:2419; CHECK: # %bb.0:2420; CHECK-NEXT: ret2421 %res = call <vscale x 1 x bfloat> @llvm.vector.splice.nxv1bf16(<vscale x 1 x bfloat> %a, <vscale x 1 x bfloat> %b, i32 0)2422 ret <vscale x 1 x bfloat> %res2423}2424 2425define <vscale x 1 x bfloat> @splice_nxv1bf16_offset_negone(<vscale x 1 x bfloat> %a, <vscale x 1 x bfloat> %b) #0 {2426; NOVLDEP-LABEL: splice_nxv1bf16_offset_negone:2427; NOVLDEP: # %bb.0:2428; NOVLDEP-NEXT: csrr a0, vlenb2429; NOVLDEP-NEXT: srli a0, a0, 32430; NOVLDEP-NEXT: addi a0, a0, -12431; NOVLDEP-NEXT: vsetvli a1, zero, e16, mf4, ta, ma2432; NOVLDEP-NEXT: vslidedown.vx v8, v8, a02433; NOVLDEP-NEXT: vslideup.vi v8, v9, 12434; NOVLDEP-NEXT: ret2435;2436; VLDEP-LABEL: splice_nxv1bf16_offset_negone:2437; VLDEP: # %bb.0:2438; VLDEP-NEXT: csrr a0, vlenb2439; VLDEP-NEXT: srli a0, a0, 32440; VLDEP-NEXT: addi a0, a0, -12441; VLDEP-NEXT: vsetivli zero, 1, e16, mf4, ta, ma2442; VLDEP-NEXT: vslidedown.vx v8, v8, a02443; VLDEP-NEXT: vsetvli a0, zero, e16, mf4, ta, ma2444; VLDEP-NEXT: vslideup.vi v8, v9, 12445; VLDEP-NEXT: ret2446 %res = call <vscale x 1 x bfloat> @llvm.vector.splice.nxv1bf16(<vscale x 1 x bfloat> %a, <vscale x 1 x bfloat> %b, i32 -1)2447 ret <vscale x 1 x bfloat> %res2448}2449 2450define <vscale x 1 x bfloat> @splice_nxv1bf16_offset_min(<vscale x 1 x bfloat> %a, <vscale x 1 x bfloat> %b) #0 {2451; NOVLDEP-LABEL: splice_nxv1bf16_offset_min:2452; NOVLDEP: # %bb.0:2453; NOVLDEP-NEXT: csrr a0, vlenb2454; NOVLDEP-NEXT: srli a0, a0, 32455; NOVLDEP-NEXT: addi a0, a0, -22456; NOVLDEP-NEXT: vsetvli a1, zero, e16, mf4, ta, ma2457; NOVLDEP-NEXT: vslidedown.vx v8, v8, a02458; NOVLDEP-NEXT: vslideup.vi v8, v9, 22459; NOVLDEP-NEXT: ret2460;2461; VLDEP-LABEL: splice_nxv1bf16_offset_min:2462; VLDEP: # %bb.0:2463; VLDEP-NEXT: csrr a0, vlenb2464; VLDEP-NEXT: srli a0, a0, 32465; VLDEP-NEXT: addi a0, a0, -22466; VLDEP-NEXT: vsetivli zero, 2, e16, mf4, ta, ma2467; VLDEP-NEXT: vslidedown.vx v8, v8, a02468; VLDEP-NEXT: vsetvli a0, zero, e16, mf4, ta, ma2469; VLDEP-NEXT: vslideup.vi v8, v9, 22470; VLDEP-NEXT: ret2471 %res = call <vscale x 1 x bfloat> @llvm.vector.splice.nxv1bf16(<vscale x 1 x bfloat> %a, <vscale x 1 x bfloat> %b, i32 -2)2472 ret <vscale x 1 x bfloat> %res2473}2474 2475define <vscale x 1 x bfloat> @splice_nxv1bf16_offset_max(<vscale x 1 x bfloat> %a, <vscale x 1 x bfloat> %b) #0 {2476; NOVLDEP-LABEL: splice_nxv1bf16_offset_max:2477; NOVLDEP: # %bb.0:2478; NOVLDEP-NEXT: vsetvli a0, zero, e16, mf4, ta, ma2479; NOVLDEP-NEXT: vslidedown.vi v8, v8, 12480; NOVLDEP-NEXT: csrr a0, vlenb2481; NOVLDEP-NEXT: srli a0, a0, 32482; NOVLDEP-NEXT: addi a0, a0, -12483; NOVLDEP-NEXT: vslideup.vx v8, v9, a02484; NOVLDEP-NEXT: ret2485;2486; VLDEP-LABEL: splice_nxv1bf16_offset_max:2487; VLDEP: # %bb.0:2488; VLDEP-NEXT: csrr a0, vlenb2489; VLDEP-NEXT: srli a0, a0, 32490; VLDEP-NEXT: addi a0, a0, -12491; VLDEP-NEXT: vsetvli zero, a0, e16, mf4, ta, ma2492; VLDEP-NEXT: vslidedown.vi v8, v8, 12493; VLDEP-NEXT: vsetvli a1, zero, e16, mf4, ta, ma2494; VLDEP-NEXT: vslideup.vx v8, v9, a02495; VLDEP-NEXT: ret2496 %res = call <vscale x 1 x bfloat> @llvm.vector.splice.nxv1bf16(<vscale x 1 x bfloat> %a, <vscale x 1 x bfloat> %b, i32 1)2497 ret <vscale x 1 x bfloat> %res2498}2499 2500define <vscale x 2 x bfloat> @splice_nxv2bf16_offset_zero(<vscale x 2 x bfloat> %a, <vscale x 2 x bfloat> %b) #0 {2501; CHECK-LABEL: splice_nxv2bf16_offset_zero:2502; CHECK: # %bb.0:2503; CHECK-NEXT: ret2504 %res = call <vscale x 2 x bfloat> @llvm.vector.splice.nxv2bf16(<vscale x 2 x bfloat> %a, <vscale x 2 x bfloat> %b, i32 0)2505 ret <vscale x 2 x bfloat> %res2506}2507 2508define <vscale x 2 x bfloat> @splice_nxv2bf16_offset_negone(<vscale x 2 x bfloat> %a, <vscale x 2 x bfloat> %b) #0 {2509; NOVLDEP-LABEL: splice_nxv2bf16_offset_negone:2510; NOVLDEP: # %bb.0:2511; NOVLDEP-NEXT: csrr a0, vlenb2512; NOVLDEP-NEXT: srli a0, a0, 22513; NOVLDEP-NEXT: addi a0, a0, -12514; NOVLDEP-NEXT: vsetvli a1, zero, e16, mf2, ta, ma2515; NOVLDEP-NEXT: vslidedown.vx v8, v8, a02516; NOVLDEP-NEXT: vslideup.vi v8, v9, 12517; NOVLDEP-NEXT: ret2518;2519; VLDEP-LABEL: splice_nxv2bf16_offset_negone:2520; VLDEP: # %bb.0:2521; VLDEP-NEXT: csrr a0, vlenb2522; VLDEP-NEXT: srli a0, a0, 22523; VLDEP-NEXT: addi a0, a0, -12524; VLDEP-NEXT: vsetivli zero, 1, e16, mf2, ta, ma2525; VLDEP-NEXT: vslidedown.vx v8, v8, a02526; VLDEP-NEXT: vsetvli a0, zero, e16, mf2, ta, ma2527; VLDEP-NEXT: vslideup.vi v8, v9, 12528; VLDEP-NEXT: ret2529 %res = call <vscale x 2 x bfloat> @llvm.vector.splice.nxv2bf16(<vscale x 2 x bfloat> %a, <vscale x 2 x bfloat> %b, i32 -1)2530 ret <vscale x 2 x bfloat> %res2531}2532 2533define <vscale x 2 x bfloat> @splice_nxv2bf16_offset_min(<vscale x 2 x bfloat> %a, <vscale x 2 x bfloat> %b) #0 {2534; NOVLDEP-LABEL: splice_nxv2bf16_offset_min:2535; NOVLDEP: # %bb.0:2536; NOVLDEP-NEXT: csrr a0, vlenb2537; NOVLDEP-NEXT: srli a0, a0, 22538; NOVLDEP-NEXT: addi a0, a0, -42539; NOVLDEP-NEXT: vsetvli a1, zero, e16, mf2, ta, ma2540; NOVLDEP-NEXT: vslidedown.vx v8, v8, a02541; NOVLDEP-NEXT: vslideup.vi v8, v9, 42542; NOVLDEP-NEXT: ret2543;2544; VLDEP-LABEL: splice_nxv2bf16_offset_min:2545; VLDEP: # %bb.0:2546; VLDEP-NEXT: csrr a0, vlenb2547; VLDEP-NEXT: srli a0, a0, 22548; VLDEP-NEXT: addi a0, a0, -42549; VLDEP-NEXT: vsetivli zero, 4, e16, mf2, ta, ma2550; VLDEP-NEXT: vslidedown.vx v8, v8, a02551; VLDEP-NEXT: vsetvli a0, zero, e16, mf2, ta, ma2552; VLDEP-NEXT: vslideup.vi v8, v9, 42553; VLDEP-NEXT: ret2554 %res = call <vscale x 2 x bfloat> @llvm.vector.splice.nxv2bf16(<vscale x 2 x bfloat> %a, <vscale x 2 x bfloat> %b, i32 -4)2555 ret <vscale x 2 x bfloat> %res2556}2557 2558define <vscale x 2 x bfloat> @splice_nxv2bf16_offset_max(<vscale x 2 x bfloat> %a, <vscale x 2 x bfloat> %b) #0 {2559; NOVLDEP-LABEL: splice_nxv2bf16_offset_max:2560; NOVLDEP: # %bb.0:2561; NOVLDEP-NEXT: vsetvli a0, zero, e16, mf2, ta, ma2562; NOVLDEP-NEXT: vslidedown.vi v8, v8, 32563; NOVLDEP-NEXT: csrr a0, vlenb2564; NOVLDEP-NEXT: srli a0, a0, 22565; NOVLDEP-NEXT: addi a0, a0, -32566; NOVLDEP-NEXT: vslideup.vx v8, v9, a02567; NOVLDEP-NEXT: ret2568;2569; VLDEP-LABEL: splice_nxv2bf16_offset_max:2570; VLDEP: # %bb.0:2571; VLDEP-NEXT: csrr a0, vlenb2572; VLDEP-NEXT: srli a0, a0, 22573; VLDEP-NEXT: addi a0, a0, -32574; VLDEP-NEXT: vsetvli zero, a0, e16, mf2, ta, ma2575; VLDEP-NEXT: vslidedown.vi v8, v8, 32576; VLDEP-NEXT: vsetvli a1, zero, e16, mf2, ta, ma2577; VLDEP-NEXT: vslideup.vx v8, v9, a02578; VLDEP-NEXT: ret2579 %res = call <vscale x 2 x bfloat> @llvm.vector.splice.nxv2bf16(<vscale x 2 x bfloat> %a, <vscale x 2 x bfloat> %b, i32 3)2580 ret <vscale x 2 x bfloat> %res2581}2582 2583define <vscale x 4 x bfloat> @splice_nxv4bf16_offset_zero(<vscale x 4 x bfloat> %a, <vscale x 4 x bfloat> %b) #0 {2584; CHECK-LABEL: splice_nxv4bf16_offset_zero:2585; CHECK: # %bb.0:2586; CHECK-NEXT: ret2587 %res = call <vscale x 4 x bfloat> @llvm.vector.splice.nxv4bf16(<vscale x 4 x bfloat> %a, <vscale x 4 x bfloat> %b, i32 0)2588 ret <vscale x 4 x bfloat> %res2589}2590 2591define <vscale x 4 x bfloat> @splice_nxv4bf16_offset_negone(<vscale x 4 x bfloat> %a, <vscale x 4 x bfloat> %b) #0 {2592; NOVLDEP-LABEL: splice_nxv4bf16_offset_negone:2593; NOVLDEP: # %bb.0:2594; NOVLDEP-NEXT: csrr a0, vlenb2595; NOVLDEP-NEXT: srli a0, a0, 12596; NOVLDEP-NEXT: addi a0, a0, -12597; NOVLDEP-NEXT: vsetvli a1, zero, e16, m1, ta, ma2598; NOVLDEP-NEXT: vslidedown.vx v8, v8, a02599; NOVLDEP-NEXT: vslideup.vi v8, v9, 12600; NOVLDEP-NEXT: ret2601;2602; VLDEP-LABEL: splice_nxv4bf16_offset_negone:2603; VLDEP: # %bb.0:2604; VLDEP-NEXT: csrr a0, vlenb2605; VLDEP-NEXT: srli a0, a0, 12606; VLDEP-NEXT: addi a0, a0, -12607; VLDEP-NEXT: vsetivli zero, 1, e16, m1, ta, ma2608; VLDEP-NEXT: vslidedown.vx v8, v8, a02609; VLDEP-NEXT: vsetvli a0, zero, e16, m1, ta, ma2610; VLDEP-NEXT: vslideup.vi v8, v9, 12611; VLDEP-NEXT: ret2612 %res = call <vscale x 4 x bfloat> @llvm.vector.splice.nxv4bf16(<vscale x 4 x bfloat> %a, <vscale x 4 x bfloat> %b, i32 -1)2613 ret <vscale x 4 x bfloat> %res2614}2615 2616define <vscale x 4 x bfloat> @splice_nxv4bf16_offset_min(<vscale x 4 x bfloat> %a, <vscale x 4 x bfloat> %b) #0 {2617; NOVLDEP-LABEL: splice_nxv4bf16_offset_min:2618; NOVLDEP: # %bb.0:2619; NOVLDEP-NEXT: csrr a0, vlenb2620; NOVLDEP-NEXT: srli a0, a0, 12621; NOVLDEP-NEXT: addi a0, a0, -82622; NOVLDEP-NEXT: vsetvli a1, zero, e16, m1, ta, ma2623; NOVLDEP-NEXT: vslidedown.vx v8, v8, a02624; NOVLDEP-NEXT: vslideup.vi v8, v9, 82625; NOVLDEP-NEXT: ret2626;2627; VLDEP-LABEL: splice_nxv4bf16_offset_min:2628; VLDEP: # %bb.0:2629; VLDEP-NEXT: csrr a0, vlenb2630; VLDEP-NEXT: srli a0, a0, 12631; VLDEP-NEXT: addi a0, a0, -82632; VLDEP-NEXT: vsetivli zero, 8, e16, m1, ta, ma2633; VLDEP-NEXT: vslidedown.vx v8, v8, a02634; VLDEP-NEXT: vsetvli a0, zero, e16, m1, ta, ma2635; VLDEP-NEXT: vslideup.vi v8, v9, 82636; VLDEP-NEXT: ret2637 %res = call <vscale x 4 x bfloat> @llvm.vector.splice.nxv4bf16(<vscale x 4 x bfloat> %a, <vscale x 4 x bfloat> %b, i32 -8)2638 ret <vscale x 4 x bfloat> %res2639}2640 2641define <vscale x 4 x bfloat> @splice_nxv4bf16_offset_max(<vscale x 4 x bfloat> %a, <vscale x 4 x bfloat> %b) #0 {2642; NOVLDEP-LABEL: splice_nxv4bf16_offset_max:2643; NOVLDEP: # %bb.0:2644; NOVLDEP-NEXT: vsetvli a0, zero, e16, m1, ta, ma2645; NOVLDEP-NEXT: vslidedown.vi v8, v8, 72646; NOVLDEP-NEXT: csrr a0, vlenb2647; NOVLDEP-NEXT: srli a0, a0, 12648; NOVLDEP-NEXT: addi a0, a0, -72649; NOVLDEP-NEXT: vslideup.vx v8, v9, a02650; NOVLDEP-NEXT: ret2651;2652; VLDEP-LABEL: splice_nxv4bf16_offset_max:2653; VLDEP: # %bb.0:2654; VLDEP-NEXT: csrr a0, vlenb2655; VLDEP-NEXT: srli a0, a0, 12656; VLDEP-NEXT: addi a0, a0, -72657; VLDEP-NEXT: vsetvli zero, a0, e16, m1, ta, ma2658; VLDEP-NEXT: vslidedown.vi v8, v8, 72659; VLDEP-NEXT: vsetvli a1, zero, e16, m1, ta, ma2660; VLDEP-NEXT: vslideup.vx v8, v9, a02661; VLDEP-NEXT: ret2662 %res = call <vscale x 4 x bfloat> @llvm.vector.splice.nxv4bf16(<vscale x 4 x bfloat> %a, <vscale x 4 x bfloat> %b, i32 7)2663 ret <vscale x 4 x bfloat> %res2664}2665 2666define <vscale x 8 x bfloat> @splice_nxv8bf16_offset_zero(<vscale x 8 x bfloat> %a, <vscale x 8 x bfloat> %b) #0 {2667; CHECK-LABEL: splice_nxv8bf16_offset_zero:2668; CHECK: # %bb.0:2669; CHECK-NEXT: ret2670 %res = call <vscale x 8 x bfloat> @llvm.vector.splice.nxv8bf16(<vscale x 8 x bfloat> %a, <vscale x 8 x bfloat> %b, i32 0)2671 ret <vscale x 8 x bfloat> %res2672}2673 2674define <vscale x 8 x bfloat> @splice_nxv8bf16_offset_negone(<vscale x 8 x bfloat> %a, <vscale x 8 x bfloat> %b) #0 {2675; NOVLDEP-LABEL: splice_nxv8bf16_offset_negone:2676; NOVLDEP: # %bb.0:2677; NOVLDEP-NEXT: csrr a0, vlenb2678; NOVLDEP-NEXT: addi a0, a0, -12679; NOVLDEP-NEXT: vsetvli a1, zero, e16, m2, ta, ma2680; NOVLDEP-NEXT: vslidedown.vx v8, v8, a02681; NOVLDEP-NEXT: vslideup.vi v8, v10, 12682; NOVLDEP-NEXT: ret2683;2684; VLDEP-LABEL: splice_nxv8bf16_offset_negone:2685; VLDEP: # %bb.0:2686; VLDEP-NEXT: csrr a0, vlenb2687; VLDEP-NEXT: addi a0, a0, -12688; VLDEP-NEXT: vsetivli zero, 1, e16, m2, ta, ma2689; VLDEP-NEXT: vslidedown.vx v8, v8, a02690; VLDEP-NEXT: vsetvli a0, zero, e16, m2, ta, ma2691; VLDEP-NEXT: vslideup.vi v8, v10, 12692; VLDEP-NEXT: ret2693 %res = call <vscale x 8 x bfloat> @llvm.vector.splice.nxv8bf16(<vscale x 8 x bfloat> %a, <vscale x 8 x bfloat> %b, i32 -1)2694 ret <vscale x 8 x bfloat> %res2695}2696 2697define <vscale x 8 x bfloat> @splice_nxv8bf16_offset_min(<vscale x 8 x bfloat> %a, <vscale x 8 x bfloat> %b) #0 {2698; NOVLDEP-LABEL: splice_nxv8bf16_offset_min:2699; NOVLDEP: # %bb.0:2700; NOVLDEP-NEXT: csrr a0, vlenb2701; NOVLDEP-NEXT: addi a0, a0, -162702; NOVLDEP-NEXT: vsetvli a1, zero, e16, m2, ta, ma2703; NOVLDEP-NEXT: vslidedown.vx v8, v8, a02704; NOVLDEP-NEXT: vslideup.vi v8, v10, 162705; NOVLDEP-NEXT: ret2706;2707; VLDEP-LABEL: splice_nxv8bf16_offset_min:2708; VLDEP: # %bb.0:2709; VLDEP-NEXT: csrr a0, vlenb2710; VLDEP-NEXT: addi a0, a0, -162711; VLDEP-NEXT: vsetivli zero, 16, e16, m2, ta, ma2712; VLDEP-NEXT: vslidedown.vx v8, v8, a02713; VLDEP-NEXT: vsetvli a0, zero, e16, m2, ta, ma2714; VLDEP-NEXT: vslideup.vi v8, v10, 162715; VLDEP-NEXT: ret2716 %res = call <vscale x 8 x bfloat> @llvm.vector.splice.nxv8bf16(<vscale x 8 x bfloat> %a, <vscale x 8 x bfloat> %b, i32 -16)2717 ret <vscale x 8 x bfloat> %res2718}2719 2720define <vscale x 8 x bfloat> @splice_nxv8bf16_offset_max(<vscale x 8 x bfloat> %a, <vscale x 8 x bfloat> %b) #0 {2721; NOVLDEP-LABEL: splice_nxv8bf16_offset_max:2722; NOVLDEP: # %bb.0:2723; NOVLDEP-NEXT: csrr a0, vlenb2724; NOVLDEP-NEXT: addi a0, a0, -152725; NOVLDEP-NEXT: vsetvli a1, zero, e16, m2, ta, ma2726; NOVLDEP-NEXT: vslidedown.vi v8, v8, 152727; NOVLDEP-NEXT: vslideup.vx v8, v10, a02728; NOVLDEP-NEXT: ret2729;2730; VLDEP-LABEL: splice_nxv8bf16_offset_max:2731; VLDEP: # %bb.0:2732; VLDEP-NEXT: csrr a0, vlenb2733; VLDEP-NEXT: addi a0, a0, -152734; VLDEP-NEXT: vsetvli zero, a0, e16, m2, ta, ma2735; VLDEP-NEXT: vslidedown.vi v8, v8, 152736; VLDEP-NEXT: vsetvli a1, zero, e16, m2, ta, ma2737; VLDEP-NEXT: vslideup.vx v8, v10, a02738; VLDEP-NEXT: ret2739 %res = call <vscale x 8 x bfloat> @llvm.vector.splice.nxv8bf16(<vscale x 8 x bfloat> %a, <vscale x 8 x bfloat> %b, i32 15)2740 ret <vscale x 8 x bfloat> %res2741}2742 2743define <vscale x 16 x bfloat> @splice_nxv16bf16_offset_zero(<vscale x 16 x bfloat> %a, <vscale x 16 x bfloat> %b) #0 {2744; CHECK-LABEL: splice_nxv16bf16_offset_zero:2745; CHECK: # %bb.0:2746; CHECK-NEXT: ret2747 %res = call <vscale x 16 x bfloat> @llvm.vector.splice.nxv16bf16(<vscale x 16 x bfloat> %a, <vscale x 16 x bfloat> %b, i32 0)2748 ret <vscale x 16 x bfloat> %res2749}2750 2751define <vscale x 16 x bfloat> @splice_nxv16bf16_offset_negone(<vscale x 16 x bfloat> %a, <vscale x 16 x bfloat> %b) #0 {2752; NOVLDEP-LABEL: splice_nxv16bf16_offset_negone:2753; NOVLDEP: # %bb.0:2754; NOVLDEP-NEXT: csrr a0, vlenb2755; NOVLDEP-NEXT: slli a0, a0, 12756; NOVLDEP-NEXT: addi a0, a0, -12757; NOVLDEP-NEXT: vsetvli a1, zero, e16, m4, ta, ma2758; NOVLDEP-NEXT: vslidedown.vx v8, v8, a02759; NOVLDEP-NEXT: vslideup.vi v8, v12, 12760; NOVLDEP-NEXT: ret2761;2762; VLDEP-LABEL: splice_nxv16bf16_offset_negone:2763; VLDEP: # %bb.0:2764; VLDEP-NEXT: csrr a0, vlenb2765; VLDEP-NEXT: slli a0, a0, 12766; VLDEP-NEXT: addi a0, a0, -12767; VLDEP-NEXT: vsetivli zero, 1, e16, m4, ta, ma2768; VLDEP-NEXT: vslidedown.vx v8, v8, a02769; VLDEP-NEXT: vsetvli a0, zero, e16, m4, ta, ma2770; VLDEP-NEXT: vslideup.vi v8, v12, 12771; VLDEP-NEXT: ret2772 %res = call <vscale x 16 x bfloat> @llvm.vector.splice.nxv16bf16(<vscale x 16 x bfloat> %a, <vscale x 16 x bfloat> %b, i32 -1)2773 ret <vscale x 16 x bfloat> %res2774}2775 2776define <vscale x 16 x bfloat> @splice_nxv16bf16_offset_min(<vscale x 16 x bfloat> %a, <vscale x 16 x bfloat> %b) #0 {2777; NOVLDEP-LABEL: splice_nxv16bf16_offset_min:2778; NOVLDEP: # %bb.0:2779; NOVLDEP-NEXT: csrr a0, vlenb2780; NOVLDEP-NEXT: slli a0, a0, 12781; NOVLDEP-NEXT: addi a0, a0, -322782; NOVLDEP-NEXT: vsetvli a1, zero, e16, m4, ta, ma2783; NOVLDEP-NEXT: vslidedown.vx v8, v8, a02784; NOVLDEP-NEXT: li a0, 322785; NOVLDEP-NEXT: vslideup.vx v8, v12, a02786; NOVLDEP-NEXT: ret2787;2788; VLDEP-LABEL: splice_nxv16bf16_offset_min:2789; VLDEP: # %bb.0:2790; VLDEP-NEXT: csrr a0, vlenb2791; VLDEP-NEXT: slli a0, a0, 12792; VLDEP-NEXT: addi a0, a0, -322793; VLDEP-NEXT: li a1, 322794; VLDEP-NEXT: vsetvli zero, a1, e16, m4, ta, ma2795; VLDEP-NEXT: vslidedown.vx v8, v8, a02796; VLDEP-NEXT: vsetvli a0, zero, e16, m4, ta, ma2797; VLDEP-NEXT: vslideup.vx v8, v12, a12798; VLDEP-NEXT: ret2799 %res = call <vscale x 16 x bfloat> @llvm.vector.splice.nxv16bf16(<vscale x 16 x bfloat> %a, <vscale x 16 x bfloat> %b, i32 -32)2800 ret <vscale x 16 x bfloat> %res2801}2802 2803define <vscale x 16 x bfloat> @splice_nxv16bf16_offset_max(<vscale x 16 x bfloat> %a, <vscale x 16 x bfloat> %b) #0 {2804; NOVLDEP-LABEL: splice_nxv16bf16_offset_max:2805; NOVLDEP: # %bb.0:2806; NOVLDEP-NEXT: vsetvli a0, zero, e16, m4, ta, ma2807; NOVLDEP-NEXT: vslidedown.vi v8, v8, 312808; NOVLDEP-NEXT: csrr a0, vlenb2809; NOVLDEP-NEXT: slli a0, a0, 12810; NOVLDEP-NEXT: addi a0, a0, -312811; NOVLDEP-NEXT: vslideup.vx v8, v12, a02812; NOVLDEP-NEXT: ret2813;2814; VLDEP-LABEL: splice_nxv16bf16_offset_max:2815; VLDEP: # %bb.0:2816; VLDEP-NEXT: csrr a0, vlenb2817; VLDEP-NEXT: slli a0, a0, 12818; VLDEP-NEXT: addi a0, a0, -312819; VLDEP-NEXT: vsetvli zero, a0, e16, m4, ta, ma2820; VLDEP-NEXT: vslidedown.vi v8, v8, 312821; VLDEP-NEXT: vsetvli a1, zero, e16, m4, ta, ma2822; VLDEP-NEXT: vslideup.vx v8, v12, a02823; VLDEP-NEXT: ret2824 %res = call <vscale x 16 x bfloat> @llvm.vector.splice.nxv16bf16(<vscale x 16 x bfloat> %a, <vscale x 16 x bfloat> %b, i32 31)2825 ret <vscale x 16 x bfloat> %res2826}2827 2828define <vscale x 32 x bfloat> @splice_nxv32bf16_offset_zero(<vscale x 32 x bfloat> %a, <vscale x 32 x bfloat> %b) #0 {2829; CHECK-LABEL: splice_nxv32bf16_offset_zero:2830; CHECK: # %bb.0:2831; CHECK-NEXT: ret2832 %res = call <vscale x 32 x bfloat> @llvm.vector.splice.nxv32bf16(<vscale x 32 x bfloat> %a, <vscale x 32 x bfloat> %b, i32 0)2833 ret <vscale x 32 x bfloat> %res2834}2835 2836define <vscale x 32 x bfloat> @splice_nxv32bf16_offset_negone(<vscale x 32 x bfloat> %a, <vscale x 32 x bfloat> %b) #0 {2837; NOVLDEP-LABEL: splice_nxv32bf16_offset_negone:2838; NOVLDEP: # %bb.0:2839; NOVLDEP-NEXT: csrr a0, vlenb2840; NOVLDEP-NEXT: slli a0, a0, 22841; NOVLDEP-NEXT: addi a0, a0, -12842; NOVLDEP-NEXT: vsetvli a1, zero, e16, m8, ta, ma2843; NOVLDEP-NEXT: vslidedown.vx v8, v8, a02844; NOVLDEP-NEXT: vslideup.vi v8, v16, 12845; NOVLDEP-NEXT: ret2846;2847; VLDEP-LABEL: splice_nxv32bf16_offset_negone:2848; VLDEP: # %bb.0:2849; VLDEP-NEXT: csrr a0, vlenb2850; VLDEP-NEXT: slli a0, a0, 22851; VLDEP-NEXT: addi a0, a0, -12852; VLDEP-NEXT: vsetivli zero, 1, e16, m8, ta, ma2853; VLDEP-NEXT: vslidedown.vx v8, v8, a02854; VLDEP-NEXT: vsetvli a0, zero, e16, m8, ta, ma2855; VLDEP-NEXT: vslideup.vi v8, v16, 12856; VLDEP-NEXT: ret2857 %res = call <vscale x 32 x bfloat> @llvm.vector.splice.nxv32bf16(<vscale x 32 x bfloat> %a, <vscale x 32 x bfloat> %b, i32 -1)2858 ret <vscale x 32 x bfloat> %res2859}2860 2861define <vscale x 32 x bfloat> @splice_nxv32bf16_offset_min(<vscale x 32 x bfloat> %a, <vscale x 32 x bfloat> %b) #0 {2862; NOVLDEP-LABEL: splice_nxv32bf16_offset_min:2863; NOVLDEP: # %bb.0:2864; NOVLDEP-NEXT: csrr a0, vlenb2865; NOVLDEP-NEXT: slli a0, a0, 22866; NOVLDEP-NEXT: addi a0, a0, -642867; NOVLDEP-NEXT: vsetvli a1, zero, e16, m8, ta, ma2868; NOVLDEP-NEXT: vslidedown.vx v8, v8, a02869; NOVLDEP-NEXT: li a0, 642870; NOVLDEP-NEXT: vslideup.vx v8, v16, a02871; NOVLDEP-NEXT: ret2872;2873; VLDEP-LABEL: splice_nxv32bf16_offset_min:2874; VLDEP: # %bb.0:2875; VLDEP-NEXT: csrr a0, vlenb2876; VLDEP-NEXT: slli a0, a0, 22877; VLDEP-NEXT: addi a0, a0, -642878; VLDEP-NEXT: li a1, 642879; VLDEP-NEXT: vsetvli zero, a1, e16, m8, ta, ma2880; VLDEP-NEXT: vslidedown.vx v8, v8, a02881; VLDEP-NEXT: vsetvli a0, zero, e16, m8, ta, ma2882; VLDEP-NEXT: vslideup.vx v8, v16, a12883; VLDEP-NEXT: ret2884 %res = call <vscale x 32 x bfloat> @llvm.vector.splice.nxv32bf16(<vscale x 32 x bfloat> %a, <vscale x 32 x bfloat> %b, i32 -64)2885 ret <vscale x 32 x bfloat> %res2886}2887 2888define <vscale x 32 x bfloat> @splice_nxv32bf16_offset_max(<vscale x 32 x bfloat> %a, <vscale x 32 x bfloat> %b) #0 {2889; NOVLDEP-LABEL: splice_nxv32bf16_offset_max:2890; NOVLDEP: # %bb.0:2891; NOVLDEP-NEXT: li a0, 632892; NOVLDEP-NEXT: vsetvli a1, zero, e16, m8, ta, ma2893; NOVLDEP-NEXT: vslidedown.vx v8, v8, a02894; NOVLDEP-NEXT: csrr a0, vlenb2895; NOVLDEP-NEXT: slli a0, a0, 22896; NOVLDEP-NEXT: addi a0, a0, -632897; NOVLDEP-NEXT: vslideup.vx v8, v16, a02898; NOVLDEP-NEXT: ret2899;2900; VLDEP-LABEL: splice_nxv32bf16_offset_max:2901; VLDEP: # %bb.0:2902; VLDEP-NEXT: csrr a0, vlenb2903; VLDEP-NEXT: slli a0, a0, 22904; VLDEP-NEXT: addi a0, a0, -632905; VLDEP-NEXT: li a1, 632906; VLDEP-NEXT: vsetvli zero, a0, e16, m8, ta, ma2907; VLDEP-NEXT: vslidedown.vx v8, v8, a12908; VLDEP-NEXT: vsetvli a1, zero, e16, m8, ta, ma2909; VLDEP-NEXT: vslideup.vx v8, v16, a02910; VLDEP-NEXT: ret2911 %res = call <vscale x 32 x bfloat> @llvm.vector.splice.nxv32bf16(<vscale x 32 x bfloat> %a, <vscale x 32 x bfloat> %b, i32 63)2912 ret <vscale x 32 x bfloat> %res2913}2914 2915define <vscale x 1 x half> @splice_nxv1f16_offset_zero(<vscale x 1 x half> %a, <vscale x 1 x half> %b) #0 {2916; CHECK-LABEL: splice_nxv1f16_offset_zero:2917; CHECK: # %bb.0:2918; CHECK-NEXT: ret2919 %res = call <vscale x 1 x half> @llvm.vector.splice.nxv1f16(<vscale x 1 x half> %a, <vscale x 1 x half> %b, i32 0)2920 ret <vscale x 1 x half> %res2921}2922 2923define <vscale x 1 x half> @splice_nxv1f16_offset_negone(<vscale x 1 x half> %a, <vscale x 1 x half> %b) #0 {2924; NOVLDEP-LABEL: splice_nxv1f16_offset_negone:2925; NOVLDEP: # %bb.0:2926; NOVLDEP-NEXT: csrr a0, vlenb2927; NOVLDEP-NEXT: srli a0, a0, 32928; NOVLDEP-NEXT: addi a0, a0, -12929; NOVLDEP-NEXT: vsetvli a1, zero, e16, mf4, ta, ma2930; NOVLDEP-NEXT: vslidedown.vx v8, v8, a02931; NOVLDEP-NEXT: vslideup.vi v8, v9, 12932; NOVLDEP-NEXT: ret2933;2934; VLDEP-LABEL: splice_nxv1f16_offset_negone:2935; VLDEP: # %bb.0:2936; VLDEP-NEXT: csrr a0, vlenb2937; VLDEP-NEXT: srli a0, a0, 32938; VLDEP-NEXT: addi a0, a0, -12939; VLDEP-NEXT: vsetivli zero, 1, e16, mf4, ta, ma2940; VLDEP-NEXT: vslidedown.vx v8, v8, a02941; VLDEP-NEXT: vsetvli a0, zero, e16, mf4, ta, ma2942; VLDEP-NEXT: vslideup.vi v8, v9, 12943; VLDEP-NEXT: ret2944 %res = call <vscale x 1 x half> @llvm.vector.splice.nxv1f16(<vscale x 1 x half> %a, <vscale x 1 x half> %b, i32 -1)2945 ret <vscale x 1 x half> %res2946}2947 2948define <vscale x 1 x half> @splice_nxv1f16_offset_min(<vscale x 1 x half> %a, <vscale x 1 x half> %b) #0 {2949; NOVLDEP-LABEL: splice_nxv1f16_offset_min:2950; NOVLDEP: # %bb.0:2951; NOVLDEP-NEXT: csrr a0, vlenb2952; NOVLDEP-NEXT: srli a0, a0, 32953; NOVLDEP-NEXT: addi a0, a0, -22954; NOVLDEP-NEXT: vsetvli a1, zero, e16, mf4, ta, ma2955; NOVLDEP-NEXT: vslidedown.vx v8, v8, a02956; NOVLDEP-NEXT: vslideup.vi v8, v9, 22957; NOVLDEP-NEXT: ret2958;2959; VLDEP-LABEL: splice_nxv1f16_offset_min:2960; VLDEP: # %bb.0:2961; VLDEP-NEXT: csrr a0, vlenb2962; VLDEP-NEXT: srli a0, a0, 32963; VLDEP-NEXT: addi a0, a0, -22964; VLDEP-NEXT: vsetivli zero, 2, e16, mf4, ta, ma2965; VLDEP-NEXT: vslidedown.vx v8, v8, a02966; VLDEP-NEXT: vsetvli a0, zero, e16, mf4, ta, ma2967; VLDEP-NEXT: vslideup.vi v8, v9, 22968; VLDEP-NEXT: ret2969 %res = call <vscale x 1 x half> @llvm.vector.splice.nxv1f16(<vscale x 1 x half> %a, <vscale x 1 x half> %b, i32 -2)2970 ret <vscale x 1 x half> %res2971}2972 2973define <vscale x 1 x half> @splice_nxv1f16_offset_max(<vscale x 1 x half> %a, <vscale x 1 x half> %b) #0 {2974; NOVLDEP-LABEL: splice_nxv1f16_offset_max:2975; NOVLDEP: # %bb.0:2976; NOVLDEP-NEXT: vsetvli a0, zero, e16, mf4, ta, ma2977; NOVLDEP-NEXT: vslidedown.vi v8, v8, 12978; NOVLDEP-NEXT: csrr a0, vlenb2979; NOVLDEP-NEXT: srli a0, a0, 32980; NOVLDEP-NEXT: addi a0, a0, -12981; NOVLDEP-NEXT: vslideup.vx v8, v9, a02982; NOVLDEP-NEXT: ret2983;2984; VLDEP-LABEL: splice_nxv1f16_offset_max:2985; VLDEP: # %bb.0:2986; VLDEP-NEXT: csrr a0, vlenb2987; VLDEP-NEXT: srli a0, a0, 32988; VLDEP-NEXT: addi a0, a0, -12989; VLDEP-NEXT: vsetvli zero, a0, e16, mf4, ta, ma2990; VLDEP-NEXT: vslidedown.vi v8, v8, 12991; VLDEP-NEXT: vsetvli a1, zero, e16, mf4, ta, ma2992; VLDEP-NEXT: vslideup.vx v8, v9, a02993; VLDEP-NEXT: ret2994 %res = call <vscale x 1 x half> @llvm.vector.splice.nxv1f16(<vscale x 1 x half> %a, <vscale x 1 x half> %b, i32 1)2995 ret <vscale x 1 x half> %res2996}2997 2998define <vscale x 2 x half> @splice_nxv2f16_offset_zero(<vscale x 2 x half> %a, <vscale x 2 x half> %b) #0 {2999; CHECK-LABEL: splice_nxv2f16_offset_zero:3000; CHECK: # %bb.0:3001; CHECK-NEXT: ret3002 %res = call <vscale x 2 x half> @llvm.vector.splice.nxv2f16(<vscale x 2 x half> %a, <vscale x 2 x half> %b, i32 0)3003 ret <vscale x 2 x half> %res3004}3005 3006define <vscale x 2 x half> @splice_nxv2f16_offset_negone(<vscale x 2 x half> %a, <vscale x 2 x half> %b) #0 {3007; NOVLDEP-LABEL: splice_nxv2f16_offset_negone:3008; NOVLDEP: # %bb.0:3009; NOVLDEP-NEXT: csrr a0, vlenb3010; NOVLDEP-NEXT: srli a0, a0, 23011; NOVLDEP-NEXT: addi a0, a0, -13012; NOVLDEP-NEXT: vsetvli a1, zero, e16, mf2, ta, ma3013; NOVLDEP-NEXT: vslidedown.vx v8, v8, a03014; NOVLDEP-NEXT: vslideup.vi v8, v9, 13015; NOVLDEP-NEXT: ret3016;3017; VLDEP-LABEL: splice_nxv2f16_offset_negone:3018; VLDEP: # %bb.0:3019; VLDEP-NEXT: csrr a0, vlenb3020; VLDEP-NEXT: srli a0, a0, 23021; VLDEP-NEXT: addi a0, a0, -13022; VLDEP-NEXT: vsetivli zero, 1, e16, mf2, ta, ma3023; VLDEP-NEXT: vslidedown.vx v8, v8, a03024; VLDEP-NEXT: vsetvli a0, zero, e16, mf2, ta, ma3025; VLDEP-NEXT: vslideup.vi v8, v9, 13026; VLDEP-NEXT: ret3027 %res = call <vscale x 2 x half> @llvm.vector.splice.nxv2f16(<vscale x 2 x half> %a, <vscale x 2 x half> %b, i32 -1)3028 ret <vscale x 2 x half> %res3029}3030 3031define <vscale x 2 x half> @splice_nxv2f16_offset_min(<vscale x 2 x half> %a, <vscale x 2 x half> %b) #0 {3032; NOVLDEP-LABEL: splice_nxv2f16_offset_min:3033; NOVLDEP: # %bb.0:3034; NOVLDEP-NEXT: csrr a0, vlenb3035; NOVLDEP-NEXT: srli a0, a0, 23036; NOVLDEP-NEXT: addi a0, a0, -43037; NOVLDEP-NEXT: vsetvli a1, zero, e16, mf2, ta, ma3038; NOVLDEP-NEXT: vslidedown.vx v8, v8, a03039; NOVLDEP-NEXT: vslideup.vi v8, v9, 43040; NOVLDEP-NEXT: ret3041;3042; VLDEP-LABEL: splice_nxv2f16_offset_min:3043; VLDEP: # %bb.0:3044; VLDEP-NEXT: csrr a0, vlenb3045; VLDEP-NEXT: srli a0, a0, 23046; VLDEP-NEXT: addi a0, a0, -43047; VLDEP-NEXT: vsetivli zero, 4, e16, mf2, ta, ma3048; VLDEP-NEXT: vslidedown.vx v8, v8, a03049; VLDEP-NEXT: vsetvli a0, zero, e16, mf2, ta, ma3050; VLDEP-NEXT: vslideup.vi v8, v9, 43051; VLDEP-NEXT: ret3052 %res = call <vscale x 2 x half> @llvm.vector.splice.nxv2f16(<vscale x 2 x half> %a, <vscale x 2 x half> %b, i32 -4)3053 ret <vscale x 2 x half> %res3054}3055 3056define <vscale x 2 x half> @splice_nxv2f16_offset_max(<vscale x 2 x half> %a, <vscale x 2 x half> %b) #0 {3057; NOVLDEP-LABEL: splice_nxv2f16_offset_max:3058; NOVLDEP: # %bb.0:3059; NOVLDEP-NEXT: vsetvli a0, zero, e16, mf2, ta, ma3060; NOVLDEP-NEXT: vslidedown.vi v8, v8, 33061; NOVLDEP-NEXT: csrr a0, vlenb3062; NOVLDEP-NEXT: srli a0, a0, 23063; NOVLDEP-NEXT: addi a0, a0, -33064; NOVLDEP-NEXT: vslideup.vx v8, v9, a03065; NOVLDEP-NEXT: ret3066;3067; VLDEP-LABEL: splice_nxv2f16_offset_max:3068; VLDEP: # %bb.0:3069; VLDEP-NEXT: csrr a0, vlenb3070; VLDEP-NEXT: srli a0, a0, 23071; VLDEP-NEXT: addi a0, a0, -33072; VLDEP-NEXT: vsetvli zero, a0, e16, mf2, ta, ma3073; VLDEP-NEXT: vslidedown.vi v8, v8, 33074; VLDEP-NEXT: vsetvli a1, zero, e16, mf2, ta, ma3075; VLDEP-NEXT: vslideup.vx v8, v9, a03076; VLDEP-NEXT: ret3077 %res = call <vscale x 2 x half> @llvm.vector.splice.nxv2f16(<vscale x 2 x half> %a, <vscale x 2 x half> %b, i32 3)3078 ret <vscale x 2 x half> %res3079}3080 3081define <vscale x 4 x half> @splice_nxv4f16_offset_zero(<vscale x 4 x half> %a, <vscale x 4 x half> %b) #0 {3082; CHECK-LABEL: splice_nxv4f16_offset_zero:3083; CHECK: # %bb.0:3084; CHECK-NEXT: ret3085 %res = call <vscale x 4 x half> @llvm.vector.splice.nxv4f16(<vscale x 4 x half> %a, <vscale x 4 x half> %b, i32 0)3086 ret <vscale x 4 x half> %res3087}3088 3089define <vscale x 4 x half> @splice_nxv4f16_offset_negone(<vscale x 4 x half> %a, <vscale x 4 x half> %b) #0 {3090; NOVLDEP-LABEL: splice_nxv4f16_offset_negone:3091; NOVLDEP: # %bb.0:3092; NOVLDEP-NEXT: csrr a0, vlenb3093; NOVLDEP-NEXT: srli a0, a0, 13094; NOVLDEP-NEXT: addi a0, a0, -13095; NOVLDEP-NEXT: vsetvli a1, zero, e16, m1, ta, ma3096; NOVLDEP-NEXT: vslidedown.vx v8, v8, a03097; NOVLDEP-NEXT: vslideup.vi v8, v9, 13098; NOVLDEP-NEXT: ret3099;3100; VLDEP-LABEL: splice_nxv4f16_offset_negone:3101; VLDEP: # %bb.0:3102; VLDEP-NEXT: csrr a0, vlenb3103; VLDEP-NEXT: srli a0, a0, 13104; VLDEP-NEXT: addi a0, a0, -13105; VLDEP-NEXT: vsetivli zero, 1, e16, m1, ta, ma3106; VLDEP-NEXT: vslidedown.vx v8, v8, a03107; VLDEP-NEXT: vsetvli a0, zero, e16, m1, ta, ma3108; VLDEP-NEXT: vslideup.vi v8, v9, 13109; VLDEP-NEXT: ret3110 %res = call <vscale x 4 x half> @llvm.vector.splice.nxv4f16(<vscale x 4 x half> %a, <vscale x 4 x half> %b, i32 -1)3111 ret <vscale x 4 x half> %res3112}3113 3114define <vscale x 4 x half> @splice_nxv4f16_offset_min(<vscale x 4 x half> %a, <vscale x 4 x half> %b) #0 {3115; NOVLDEP-LABEL: splice_nxv4f16_offset_min:3116; NOVLDEP: # %bb.0:3117; NOVLDEP-NEXT: csrr a0, vlenb3118; NOVLDEP-NEXT: srli a0, a0, 13119; NOVLDEP-NEXT: addi a0, a0, -83120; NOVLDEP-NEXT: vsetvli a1, zero, e16, m1, ta, ma3121; NOVLDEP-NEXT: vslidedown.vx v8, v8, a03122; NOVLDEP-NEXT: vslideup.vi v8, v9, 83123; NOVLDEP-NEXT: ret3124;3125; VLDEP-LABEL: splice_nxv4f16_offset_min:3126; VLDEP: # %bb.0:3127; VLDEP-NEXT: csrr a0, vlenb3128; VLDEP-NEXT: srli a0, a0, 13129; VLDEP-NEXT: addi a0, a0, -83130; VLDEP-NEXT: vsetivli zero, 8, e16, m1, ta, ma3131; VLDEP-NEXT: vslidedown.vx v8, v8, a03132; VLDEP-NEXT: vsetvli a0, zero, e16, m1, ta, ma3133; VLDEP-NEXT: vslideup.vi v8, v9, 83134; VLDEP-NEXT: ret3135 %res = call <vscale x 4 x half> @llvm.vector.splice.nxv4f16(<vscale x 4 x half> %a, <vscale x 4 x half> %b, i32 -8)3136 ret <vscale x 4 x half> %res3137}3138 3139define <vscale x 4 x half> @splice_nxv4f16_offset_max(<vscale x 4 x half> %a, <vscale x 4 x half> %b) #0 {3140; NOVLDEP-LABEL: splice_nxv4f16_offset_max:3141; NOVLDEP: # %bb.0:3142; NOVLDEP-NEXT: vsetvli a0, zero, e16, m1, ta, ma3143; NOVLDEP-NEXT: vslidedown.vi v8, v8, 73144; NOVLDEP-NEXT: csrr a0, vlenb3145; NOVLDEP-NEXT: srli a0, a0, 13146; NOVLDEP-NEXT: addi a0, a0, -73147; NOVLDEP-NEXT: vslideup.vx v8, v9, a03148; NOVLDEP-NEXT: ret3149;3150; VLDEP-LABEL: splice_nxv4f16_offset_max:3151; VLDEP: # %bb.0:3152; VLDEP-NEXT: csrr a0, vlenb3153; VLDEP-NEXT: srli a0, a0, 13154; VLDEP-NEXT: addi a0, a0, -73155; VLDEP-NEXT: vsetvli zero, a0, e16, m1, ta, ma3156; VLDEP-NEXT: vslidedown.vi v8, v8, 73157; VLDEP-NEXT: vsetvli a1, zero, e16, m1, ta, ma3158; VLDEP-NEXT: vslideup.vx v8, v9, a03159; VLDEP-NEXT: ret3160 %res = call <vscale x 4 x half> @llvm.vector.splice.nxv4f16(<vscale x 4 x half> %a, <vscale x 4 x half> %b, i32 7)3161 ret <vscale x 4 x half> %res3162}3163 3164define <vscale x 8 x half> @splice_nxv8f16_offset_zero(<vscale x 8 x half> %a, <vscale x 8 x half> %b) #0 {3165; CHECK-LABEL: splice_nxv8f16_offset_zero:3166; CHECK: # %bb.0:3167; CHECK-NEXT: ret3168 %res = call <vscale x 8 x half> @llvm.vector.splice.nxv8f16(<vscale x 8 x half> %a, <vscale x 8 x half> %b, i32 0)3169 ret <vscale x 8 x half> %res3170}3171 3172define <vscale x 8 x half> @splice_nxv8f16_offset_negone(<vscale x 8 x half> %a, <vscale x 8 x half> %b) #0 {3173; NOVLDEP-LABEL: splice_nxv8f16_offset_negone:3174; NOVLDEP: # %bb.0:3175; NOVLDEP-NEXT: csrr a0, vlenb3176; NOVLDEP-NEXT: addi a0, a0, -13177; NOVLDEP-NEXT: vsetvli a1, zero, e16, m2, ta, ma3178; NOVLDEP-NEXT: vslidedown.vx v8, v8, a03179; NOVLDEP-NEXT: vslideup.vi v8, v10, 13180; NOVLDEP-NEXT: ret3181;3182; VLDEP-LABEL: splice_nxv8f16_offset_negone:3183; VLDEP: # %bb.0:3184; VLDEP-NEXT: csrr a0, vlenb3185; VLDEP-NEXT: addi a0, a0, -13186; VLDEP-NEXT: vsetivli zero, 1, e16, m2, ta, ma3187; VLDEP-NEXT: vslidedown.vx v8, v8, a03188; VLDEP-NEXT: vsetvli a0, zero, e16, m2, ta, ma3189; VLDEP-NEXT: vslideup.vi v8, v10, 13190; VLDEP-NEXT: ret3191 %res = call <vscale x 8 x half> @llvm.vector.splice.nxv8f16(<vscale x 8 x half> %a, <vscale x 8 x half> %b, i32 -1)3192 ret <vscale x 8 x half> %res3193}3194 3195define <vscale x 8 x half> @splice_nxv8f16_offset_min(<vscale x 8 x half> %a, <vscale x 8 x half> %b) #0 {3196; NOVLDEP-LABEL: splice_nxv8f16_offset_min:3197; NOVLDEP: # %bb.0:3198; NOVLDEP-NEXT: csrr a0, vlenb3199; NOVLDEP-NEXT: addi a0, a0, -163200; NOVLDEP-NEXT: vsetvli a1, zero, e16, m2, ta, ma3201; NOVLDEP-NEXT: vslidedown.vx v8, v8, a03202; NOVLDEP-NEXT: vslideup.vi v8, v10, 163203; NOVLDEP-NEXT: ret3204;3205; VLDEP-LABEL: splice_nxv8f16_offset_min:3206; VLDEP: # %bb.0:3207; VLDEP-NEXT: csrr a0, vlenb3208; VLDEP-NEXT: addi a0, a0, -163209; VLDEP-NEXT: vsetivli zero, 16, e16, m2, ta, ma3210; VLDEP-NEXT: vslidedown.vx v8, v8, a03211; VLDEP-NEXT: vsetvli a0, zero, e16, m2, ta, ma3212; VLDEP-NEXT: vslideup.vi v8, v10, 163213; VLDEP-NEXT: ret3214 %res = call <vscale x 8 x half> @llvm.vector.splice.nxv8f16(<vscale x 8 x half> %a, <vscale x 8 x half> %b, i32 -16)3215 ret <vscale x 8 x half> %res3216}3217 3218define <vscale x 8 x half> @splice_nxv8f16_offset_max(<vscale x 8 x half> %a, <vscale x 8 x half> %b) #0 {3219; NOVLDEP-LABEL: splice_nxv8f16_offset_max:3220; NOVLDEP: # %bb.0:3221; NOVLDEP-NEXT: csrr a0, vlenb3222; NOVLDEP-NEXT: addi a0, a0, -153223; NOVLDEP-NEXT: vsetvli a1, zero, e16, m2, ta, ma3224; NOVLDEP-NEXT: vslidedown.vi v8, v8, 153225; NOVLDEP-NEXT: vslideup.vx v8, v10, a03226; NOVLDEP-NEXT: ret3227;3228; VLDEP-LABEL: splice_nxv8f16_offset_max:3229; VLDEP: # %bb.0:3230; VLDEP-NEXT: csrr a0, vlenb3231; VLDEP-NEXT: addi a0, a0, -153232; VLDEP-NEXT: vsetvli zero, a0, e16, m2, ta, ma3233; VLDEP-NEXT: vslidedown.vi v8, v8, 153234; VLDEP-NEXT: vsetvli a1, zero, e16, m2, ta, ma3235; VLDEP-NEXT: vslideup.vx v8, v10, a03236; VLDEP-NEXT: ret3237 %res = call <vscale x 8 x half> @llvm.vector.splice.nxv8f16(<vscale x 8 x half> %a, <vscale x 8 x half> %b, i32 15)3238 ret <vscale x 8 x half> %res3239}3240 3241define <vscale x 16 x half> @splice_nxv16f16_offset_zero(<vscale x 16 x half> %a, <vscale x 16 x half> %b) #0 {3242; CHECK-LABEL: splice_nxv16f16_offset_zero:3243; CHECK: # %bb.0:3244; CHECK-NEXT: ret3245 %res = call <vscale x 16 x half> @llvm.vector.splice.nxv16f16(<vscale x 16 x half> %a, <vscale x 16 x half> %b, i32 0)3246 ret <vscale x 16 x half> %res3247}3248 3249define <vscale x 16 x half> @splice_nxv16f16_offset_negone(<vscale x 16 x half> %a, <vscale x 16 x half> %b) #0 {3250; NOVLDEP-LABEL: splice_nxv16f16_offset_negone:3251; NOVLDEP: # %bb.0:3252; NOVLDEP-NEXT: csrr a0, vlenb3253; NOVLDEP-NEXT: slli a0, a0, 13254; NOVLDEP-NEXT: addi a0, a0, -13255; NOVLDEP-NEXT: vsetvli a1, zero, e16, m4, ta, ma3256; NOVLDEP-NEXT: vslidedown.vx v8, v8, a03257; NOVLDEP-NEXT: vslideup.vi v8, v12, 13258; NOVLDEP-NEXT: ret3259;3260; VLDEP-LABEL: splice_nxv16f16_offset_negone:3261; VLDEP: # %bb.0:3262; VLDEP-NEXT: csrr a0, vlenb3263; VLDEP-NEXT: slli a0, a0, 13264; VLDEP-NEXT: addi a0, a0, -13265; VLDEP-NEXT: vsetivli zero, 1, e16, m4, ta, ma3266; VLDEP-NEXT: vslidedown.vx v8, v8, a03267; VLDEP-NEXT: vsetvli a0, zero, e16, m4, ta, ma3268; VLDEP-NEXT: vslideup.vi v8, v12, 13269; VLDEP-NEXT: ret3270 %res = call <vscale x 16 x half> @llvm.vector.splice.nxv16f16(<vscale x 16 x half> %a, <vscale x 16 x half> %b, i32 -1)3271 ret <vscale x 16 x half> %res3272}3273 3274define <vscale x 16 x half> @splice_nxv16f16_offset_min(<vscale x 16 x half> %a, <vscale x 16 x half> %b) #0 {3275; NOVLDEP-LABEL: splice_nxv16f16_offset_min:3276; NOVLDEP: # %bb.0:3277; NOVLDEP-NEXT: csrr a0, vlenb3278; NOVLDEP-NEXT: slli a0, a0, 13279; NOVLDEP-NEXT: addi a0, a0, -323280; NOVLDEP-NEXT: vsetvli a1, zero, e16, m4, ta, ma3281; NOVLDEP-NEXT: vslidedown.vx v8, v8, a03282; NOVLDEP-NEXT: li a0, 323283; NOVLDEP-NEXT: vslideup.vx v8, v12, a03284; NOVLDEP-NEXT: ret3285;3286; VLDEP-LABEL: splice_nxv16f16_offset_min:3287; VLDEP: # %bb.0:3288; VLDEP-NEXT: csrr a0, vlenb3289; VLDEP-NEXT: slli a0, a0, 13290; VLDEP-NEXT: addi a0, a0, -323291; VLDEP-NEXT: li a1, 323292; VLDEP-NEXT: vsetvli zero, a1, e16, m4, ta, ma3293; VLDEP-NEXT: vslidedown.vx v8, v8, a03294; VLDEP-NEXT: vsetvli a0, zero, e16, m4, ta, ma3295; VLDEP-NEXT: vslideup.vx v8, v12, a13296; VLDEP-NEXT: ret3297 %res = call <vscale x 16 x half> @llvm.vector.splice.nxv16f16(<vscale x 16 x half> %a, <vscale x 16 x half> %b, i32 -32)3298 ret <vscale x 16 x half> %res3299}3300 3301define <vscale x 16 x half> @splice_nxv16f16_offset_max(<vscale x 16 x half> %a, <vscale x 16 x half> %b) #0 {3302; NOVLDEP-LABEL: splice_nxv16f16_offset_max:3303; NOVLDEP: # %bb.0:3304; NOVLDEP-NEXT: vsetvli a0, zero, e16, m4, ta, ma3305; NOVLDEP-NEXT: vslidedown.vi v8, v8, 313306; NOVLDEP-NEXT: csrr a0, vlenb3307; NOVLDEP-NEXT: slli a0, a0, 13308; NOVLDEP-NEXT: addi a0, a0, -313309; NOVLDEP-NEXT: vslideup.vx v8, v12, a03310; NOVLDEP-NEXT: ret3311;3312; VLDEP-LABEL: splice_nxv16f16_offset_max:3313; VLDEP: # %bb.0:3314; VLDEP-NEXT: csrr a0, vlenb3315; VLDEP-NEXT: slli a0, a0, 13316; VLDEP-NEXT: addi a0, a0, -313317; VLDEP-NEXT: vsetvli zero, a0, e16, m4, ta, ma3318; VLDEP-NEXT: vslidedown.vi v8, v8, 313319; VLDEP-NEXT: vsetvli a1, zero, e16, m4, ta, ma3320; VLDEP-NEXT: vslideup.vx v8, v12, a03321; VLDEP-NEXT: ret3322 %res = call <vscale x 16 x half> @llvm.vector.splice.nxv16f16(<vscale x 16 x half> %a, <vscale x 16 x half> %b, i32 31)3323 ret <vscale x 16 x half> %res3324}3325 3326define <vscale x 32 x half> @splice_nxv32f16_offset_zero(<vscale x 32 x half> %a, <vscale x 32 x half> %b) #0 {3327; CHECK-LABEL: splice_nxv32f16_offset_zero:3328; CHECK: # %bb.0:3329; CHECK-NEXT: ret3330 %res = call <vscale x 32 x half> @llvm.vector.splice.nxv32f16(<vscale x 32 x half> %a, <vscale x 32 x half> %b, i32 0)3331 ret <vscale x 32 x half> %res3332}3333 3334define <vscale x 32 x half> @splice_nxv32f16_offset_negone(<vscale x 32 x half> %a, <vscale x 32 x half> %b) #0 {3335; NOVLDEP-LABEL: splice_nxv32f16_offset_negone:3336; NOVLDEP: # %bb.0:3337; NOVLDEP-NEXT: csrr a0, vlenb3338; NOVLDEP-NEXT: slli a0, a0, 23339; NOVLDEP-NEXT: addi a0, a0, -13340; NOVLDEP-NEXT: vsetvli a1, zero, e16, m8, ta, ma3341; NOVLDEP-NEXT: vslidedown.vx v8, v8, a03342; NOVLDEP-NEXT: vslideup.vi v8, v16, 13343; NOVLDEP-NEXT: ret3344;3345; VLDEP-LABEL: splice_nxv32f16_offset_negone:3346; VLDEP: # %bb.0:3347; VLDEP-NEXT: csrr a0, vlenb3348; VLDEP-NEXT: slli a0, a0, 23349; VLDEP-NEXT: addi a0, a0, -13350; VLDEP-NEXT: vsetivli zero, 1, e16, m8, ta, ma3351; VLDEP-NEXT: vslidedown.vx v8, v8, a03352; VLDEP-NEXT: vsetvli a0, zero, e16, m8, ta, ma3353; VLDEP-NEXT: vslideup.vi v8, v16, 13354; VLDEP-NEXT: ret3355 %res = call <vscale x 32 x half> @llvm.vector.splice.nxv32f16(<vscale x 32 x half> %a, <vscale x 32 x half> %b, i32 -1)3356 ret <vscale x 32 x half> %res3357}3358 3359define <vscale x 32 x half> @splice_nxv32f16_offset_min(<vscale x 32 x half> %a, <vscale x 32 x half> %b) #0 {3360; NOVLDEP-LABEL: splice_nxv32f16_offset_min:3361; NOVLDEP: # %bb.0:3362; NOVLDEP-NEXT: csrr a0, vlenb3363; NOVLDEP-NEXT: slli a0, a0, 23364; NOVLDEP-NEXT: addi a0, a0, -643365; NOVLDEP-NEXT: vsetvli a1, zero, e16, m8, ta, ma3366; NOVLDEP-NEXT: vslidedown.vx v8, v8, a03367; NOVLDEP-NEXT: li a0, 643368; NOVLDEP-NEXT: vslideup.vx v8, v16, a03369; NOVLDEP-NEXT: ret3370;3371; VLDEP-LABEL: splice_nxv32f16_offset_min:3372; VLDEP: # %bb.0:3373; VLDEP-NEXT: csrr a0, vlenb3374; VLDEP-NEXT: slli a0, a0, 23375; VLDEP-NEXT: addi a0, a0, -643376; VLDEP-NEXT: li a1, 643377; VLDEP-NEXT: vsetvli zero, a1, e16, m8, ta, ma3378; VLDEP-NEXT: vslidedown.vx v8, v8, a03379; VLDEP-NEXT: vsetvli a0, zero, e16, m8, ta, ma3380; VLDEP-NEXT: vslideup.vx v8, v16, a13381; VLDEP-NEXT: ret3382 %res = call <vscale x 32 x half> @llvm.vector.splice.nxv32f16(<vscale x 32 x half> %a, <vscale x 32 x half> %b, i32 -64)3383 ret <vscale x 32 x half> %res3384}3385 3386define <vscale x 32 x half> @splice_nxv32f16_offset_max(<vscale x 32 x half> %a, <vscale x 32 x half> %b) #0 {3387; NOVLDEP-LABEL: splice_nxv32f16_offset_max:3388; NOVLDEP: # %bb.0:3389; NOVLDEP-NEXT: li a0, 633390; NOVLDEP-NEXT: vsetvli a1, zero, e16, m8, ta, ma3391; NOVLDEP-NEXT: vslidedown.vx v8, v8, a03392; NOVLDEP-NEXT: csrr a0, vlenb3393; NOVLDEP-NEXT: slli a0, a0, 23394; NOVLDEP-NEXT: addi a0, a0, -633395; NOVLDEP-NEXT: vslideup.vx v8, v16, a03396; NOVLDEP-NEXT: ret3397;3398; VLDEP-LABEL: splice_nxv32f16_offset_max:3399; VLDEP: # %bb.0:3400; VLDEP-NEXT: csrr a0, vlenb3401; VLDEP-NEXT: slli a0, a0, 23402; VLDEP-NEXT: addi a0, a0, -633403; VLDEP-NEXT: li a1, 633404; VLDEP-NEXT: vsetvli zero, a0, e16, m8, ta, ma3405; VLDEP-NEXT: vslidedown.vx v8, v8, a13406; VLDEP-NEXT: vsetvli a1, zero, e16, m8, ta, ma3407; VLDEP-NEXT: vslideup.vx v8, v16, a03408; VLDEP-NEXT: ret3409 %res = call <vscale x 32 x half> @llvm.vector.splice.nxv32f16(<vscale x 32 x half> %a, <vscale x 32 x half> %b, i32 63)3410 ret <vscale x 32 x half> %res3411}3412 3413define <vscale x 1 x float> @splice_nxv1f32_offset_zero(<vscale x 1 x float> %a, <vscale x 1 x float> %b) #0 {3414; CHECK-LABEL: splice_nxv1f32_offset_zero:3415; CHECK: # %bb.0:3416; CHECK-NEXT: ret3417 %res = call <vscale x 1 x float> @llvm.vector.splice.nxv1f32(<vscale x 1 x float> %a, <vscale x 1 x float> %b, i32 0)3418 ret <vscale x 1 x float> %res3419}3420 3421define <vscale x 1 x float> @splice_nxv1f32_offset_negone(<vscale x 1 x float> %a, <vscale x 1 x float> %b) #0 {3422; NOVLDEP-LABEL: splice_nxv1f32_offset_negone:3423; NOVLDEP: # %bb.0:3424; NOVLDEP-NEXT: csrr a0, vlenb3425; NOVLDEP-NEXT: srli a0, a0, 33426; NOVLDEP-NEXT: addi a0, a0, -13427; NOVLDEP-NEXT: vsetvli a1, zero, e32, mf2, ta, ma3428; NOVLDEP-NEXT: vslidedown.vx v8, v8, a03429; NOVLDEP-NEXT: vslideup.vi v8, v9, 13430; NOVLDEP-NEXT: ret3431;3432; VLDEP-LABEL: splice_nxv1f32_offset_negone:3433; VLDEP: # %bb.0:3434; VLDEP-NEXT: csrr a0, vlenb3435; VLDEP-NEXT: srli a0, a0, 33436; VLDEP-NEXT: addi a0, a0, -13437; VLDEP-NEXT: vsetivli zero, 1, e32, mf2, ta, ma3438; VLDEP-NEXT: vslidedown.vx v8, v8, a03439; VLDEP-NEXT: vsetvli a0, zero, e32, mf2, ta, ma3440; VLDEP-NEXT: vslideup.vi v8, v9, 13441; VLDEP-NEXT: ret3442 %res = call <vscale x 1 x float> @llvm.vector.splice.nxv1f32(<vscale x 1 x float> %a, <vscale x 1 x float> %b, i32 -1)3443 ret <vscale x 1 x float> %res3444}3445 3446define <vscale x 1 x float> @splice_nxv1f32_offset_min(<vscale x 1 x float> %a, <vscale x 1 x float> %b) #0 {3447; NOVLDEP-LABEL: splice_nxv1f32_offset_min:3448; NOVLDEP: # %bb.0:3449; NOVLDEP-NEXT: csrr a0, vlenb3450; NOVLDEP-NEXT: srli a0, a0, 33451; NOVLDEP-NEXT: addi a0, a0, -23452; NOVLDEP-NEXT: vsetvli a1, zero, e32, mf2, ta, ma3453; NOVLDEP-NEXT: vslidedown.vx v8, v8, a03454; NOVLDEP-NEXT: vslideup.vi v8, v9, 23455; NOVLDEP-NEXT: ret3456;3457; VLDEP-LABEL: splice_nxv1f32_offset_min:3458; VLDEP: # %bb.0:3459; VLDEP-NEXT: csrr a0, vlenb3460; VLDEP-NEXT: srli a0, a0, 33461; VLDEP-NEXT: addi a0, a0, -23462; VLDEP-NEXT: vsetivli zero, 2, e32, mf2, ta, ma3463; VLDEP-NEXT: vslidedown.vx v8, v8, a03464; VLDEP-NEXT: vsetvli a0, zero, e32, mf2, ta, ma3465; VLDEP-NEXT: vslideup.vi v8, v9, 23466; VLDEP-NEXT: ret3467 %res = call <vscale x 1 x float> @llvm.vector.splice.nxv1f32(<vscale x 1 x float> %a, <vscale x 1 x float> %b, i32 -2)3468 ret <vscale x 1 x float> %res3469}3470 3471define <vscale x 1 x float> @splice_nxv1f32_offset_max(<vscale x 1 x float> %a, <vscale x 1 x float> %b) #0 {3472; NOVLDEP-LABEL: splice_nxv1f32_offset_max:3473; NOVLDEP: # %bb.0:3474; NOVLDEP-NEXT: vsetvli a0, zero, e32, mf2, ta, ma3475; NOVLDEP-NEXT: vslidedown.vi v8, v8, 13476; NOVLDEP-NEXT: csrr a0, vlenb3477; NOVLDEP-NEXT: srli a0, a0, 33478; NOVLDEP-NEXT: addi a0, a0, -13479; NOVLDEP-NEXT: vslideup.vx v8, v9, a03480; NOVLDEP-NEXT: ret3481;3482; VLDEP-LABEL: splice_nxv1f32_offset_max:3483; VLDEP: # %bb.0:3484; VLDEP-NEXT: csrr a0, vlenb3485; VLDEP-NEXT: srli a0, a0, 33486; VLDEP-NEXT: addi a0, a0, -13487; VLDEP-NEXT: vsetvli zero, a0, e32, mf2, ta, ma3488; VLDEP-NEXT: vslidedown.vi v8, v8, 13489; VLDEP-NEXT: vsetvli a1, zero, e32, mf2, ta, ma3490; VLDEP-NEXT: vslideup.vx v8, v9, a03491; VLDEP-NEXT: ret3492 %res = call <vscale x 1 x float> @llvm.vector.splice.nxv1f32(<vscale x 1 x float> %a, <vscale x 1 x float> %b, i32 1)3493 ret <vscale x 1 x float> %res3494}3495 3496define <vscale x 2 x float> @splice_nxv2f32_offset_zero(<vscale x 2 x float> %a, <vscale x 2 x float> %b) #0 {3497; CHECK-LABEL: splice_nxv2f32_offset_zero:3498; CHECK: # %bb.0:3499; CHECK-NEXT: ret3500 %res = call <vscale x 2 x float> @llvm.vector.splice.nxv2f32(<vscale x 2 x float> %a, <vscale x 2 x float> %b, i32 0)3501 ret <vscale x 2 x float> %res3502}3503 3504define <vscale x 2 x float> @splice_nxv2f32_offset_negone(<vscale x 2 x float> %a, <vscale x 2 x float> %b) #0 {3505; NOVLDEP-LABEL: splice_nxv2f32_offset_negone:3506; NOVLDEP: # %bb.0:3507; NOVLDEP-NEXT: csrr a0, vlenb3508; NOVLDEP-NEXT: srli a0, a0, 23509; NOVLDEP-NEXT: addi a0, a0, -13510; NOVLDEP-NEXT: vsetvli a1, zero, e32, m1, ta, ma3511; NOVLDEP-NEXT: vslidedown.vx v8, v8, a03512; NOVLDEP-NEXT: vslideup.vi v8, v9, 13513; NOVLDEP-NEXT: ret3514;3515; VLDEP-LABEL: splice_nxv2f32_offset_negone:3516; VLDEP: # %bb.0:3517; VLDEP-NEXT: csrr a0, vlenb3518; VLDEP-NEXT: srli a0, a0, 23519; VLDEP-NEXT: addi a0, a0, -13520; VLDEP-NEXT: vsetivli zero, 1, e32, m1, ta, ma3521; VLDEP-NEXT: vslidedown.vx v8, v8, a03522; VLDEP-NEXT: vsetvli a0, zero, e32, m1, ta, ma3523; VLDEP-NEXT: vslideup.vi v8, v9, 13524; VLDEP-NEXT: ret3525 %res = call <vscale x 2 x float> @llvm.vector.splice.nxv2f32(<vscale x 2 x float> %a, <vscale x 2 x float> %b, i32 -1)3526 ret <vscale x 2 x float> %res3527}3528 3529define <vscale x 2 x float> @splice_nxv2f32_offset_min(<vscale x 2 x float> %a, <vscale x 2 x float> %b) #0 {3530; NOVLDEP-LABEL: splice_nxv2f32_offset_min:3531; NOVLDEP: # %bb.0:3532; NOVLDEP-NEXT: csrr a0, vlenb3533; NOVLDEP-NEXT: srli a0, a0, 23534; NOVLDEP-NEXT: addi a0, a0, -43535; NOVLDEP-NEXT: vsetvli a1, zero, e32, m1, ta, ma3536; NOVLDEP-NEXT: vslidedown.vx v8, v8, a03537; NOVLDEP-NEXT: vslideup.vi v8, v9, 43538; NOVLDEP-NEXT: ret3539;3540; VLDEP-LABEL: splice_nxv2f32_offset_min:3541; VLDEP: # %bb.0:3542; VLDEP-NEXT: csrr a0, vlenb3543; VLDEP-NEXT: srli a0, a0, 23544; VLDEP-NEXT: addi a0, a0, -43545; VLDEP-NEXT: vsetivli zero, 4, e32, m1, ta, ma3546; VLDEP-NEXT: vslidedown.vx v8, v8, a03547; VLDEP-NEXT: vsetvli a0, zero, e32, m1, ta, ma3548; VLDEP-NEXT: vslideup.vi v8, v9, 43549; VLDEP-NEXT: ret3550 %res = call <vscale x 2 x float> @llvm.vector.splice.nxv2f32(<vscale x 2 x float> %a, <vscale x 2 x float> %b, i32 -4)3551 ret <vscale x 2 x float> %res3552}3553 3554define <vscale x 2 x float> @splice_nxv2f32_offset_max(<vscale x 2 x float> %a, <vscale x 2 x float> %b) #0 {3555; NOVLDEP-LABEL: splice_nxv2f32_offset_max:3556; NOVLDEP: # %bb.0:3557; NOVLDEP-NEXT: vsetvli a0, zero, e32, m1, ta, ma3558; NOVLDEP-NEXT: vslidedown.vi v8, v8, 33559; NOVLDEP-NEXT: csrr a0, vlenb3560; NOVLDEP-NEXT: srli a0, a0, 23561; NOVLDEP-NEXT: addi a0, a0, -33562; NOVLDEP-NEXT: vslideup.vx v8, v9, a03563; NOVLDEP-NEXT: ret3564;3565; VLDEP-LABEL: splice_nxv2f32_offset_max:3566; VLDEP: # %bb.0:3567; VLDEP-NEXT: csrr a0, vlenb3568; VLDEP-NEXT: srli a0, a0, 23569; VLDEP-NEXT: addi a0, a0, -33570; VLDEP-NEXT: vsetvli zero, a0, e32, m1, ta, ma3571; VLDEP-NEXT: vslidedown.vi v8, v8, 33572; VLDEP-NEXT: vsetvli a1, zero, e32, m1, ta, ma3573; VLDEP-NEXT: vslideup.vx v8, v9, a03574; VLDEP-NEXT: ret3575 %res = call <vscale x 2 x float> @llvm.vector.splice.nxv2f32(<vscale x 2 x float> %a, <vscale x 2 x float> %b, i32 3)3576 ret <vscale x 2 x float> %res3577}3578 3579define <vscale x 4 x float> @splice_nxv4f32_offset_zero(<vscale x 4 x float> %a, <vscale x 4 x float> %b) #0 {3580; CHECK-LABEL: splice_nxv4f32_offset_zero:3581; CHECK: # %bb.0:3582; CHECK-NEXT: ret3583 %res = call <vscale x 4 x float> @llvm.vector.splice.nxv4f32(<vscale x 4 x float> %a, <vscale x 4 x float> %b, i32 0)3584 ret <vscale x 4 x float> %res3585}3586 3587define <vscale x 4 x float> @splice_nxv4f32_offset_negone(<vscale x 4 x float> %a, <vscale x 4 x float> %b) #0 {3588; NOVLDEP-LABEL: splice_nxv4f32_offset_negone:3589; NOVLDEP: # %bb.0:3590; NOVLDEP-NEXT: csrr a0, vlenb3591; NOVLDEP-NEXT: srli a0, a0, 13592; NOVLDEP-NEXT: addi a0, a0, -13593; NOVLDEP-NEXT: vsetvli a1, zero, e32, m2, ta, ma3594; NOVLDEP-NEXT: vslidedown.vx v8, v8, a03595; NOVLDEP-NEXT: vslideup.vi v8, v10, 13596; NOVLDEP-NEXT: ret3597;3598; VLDEP-LABEL: splice_nxv4f32_offset_negone:3599; VLDEP: # %bb.0:3600; VLDEP-NEXT: csrr a0, vlenb3601; VLDEP-NEXT: srli a0, a0, 13602; VLDEP-NEXT: addi a0, a0, -13603; VLDEP-NEXT: vsetivli zero, 1, e32, m2, ta, ma3604; VLDEP-NEXT: vslidedown.vx v8, v8, a03605; VLDEP-NEXT: vsetvli a0, zero, e32, m2, ta, ma3606; VLDEP-NEXT: vslideup.vi v8, v10, 13607; VLDEP-NEXT: ret3608 %res = call <vscale x 4 x float> @llvm.vector.splice.nxv4f32(<vscale x 4 x float> %a, <vscale x 4 x float> %b, i32 -1)3609 ret <vscale x 4 x float> %res3610}3611 3612define <vscale x 4 x float> @splice_nxv4f32_offset_min(<vscale x 4 x float> %a, <vscale x 4 x float> %b) #0 {3613; NOVLDEP-LABEL: splice_nxv4f32_offset_min:3614; NOVLDEP: # %bb.0:3615; NOVLDEP-NEXT: csrr a0, vlenb3616; NOVLDEP-NEXT: srli a0, a0, 13617; NOVLDEP-NEXT: addi a0, a0, -83618; NOVLDEP-NEXT: vsetvli a1, zero, e32, m2, ta, ma3619; NOVLDEP-NEXT: vslidedown.vx v8, v8, a03620; NOVLDEP-NEXT: vslideup.vi v8, v10, 83621; NOVLDEP-NEXT: ret3622;3623; VLDEP-LABEL: splice_nxv4f32_offset_min:3624; VLDEP: # %bb.0:3625; VLDEP-NEXT: csrr a0, vlenb3626; VLDEP-NEXT: srli a0, a0, 13627; VLDEP-NEXT: addi a0, a0, -83628; VLDEP-NEXT: vsetivli zero, 8, e32, m2, ta, ma3629; VLDEP-NEXT: vslidedown.vx v8, v8, a03630; VLDEP-NEXT: vsetvli a0, zero, e32, m2, ta, ma3631; VLDEP-NEXT: vslideup.vi v8, v10, 83632; VLDEP-NEXT: ret3633 %res = call <vscale x 4 x float> @llvm.vector.splice.nxv4f32(<vscale x 4 x float> %a, <vscale x 4 x float> %b, i32 -8)3634 ret <vscale x 4 x float> %res3635}3636 3637define <vscale x 4 x float> @splice_nxv4f32_offset_max(<vscale x 4 x float> %a, <vscale x 4 x float> %b) #0 {3638; NOVLDEP-LABEL: splice_nxv4f32_offset_max:3639; NOVLDEP: # %bb.0:3640; NOVLDEP-NEXT: vsetvli a0, zero, e32, m2, ta, ma3641; NOVLDEP-NEXT: vslidedown.vi v8, v8, 73642; NOVLDEP-NEXT: csrr a0, vlenb3643; NOVLDEP-NEXT: srli a0, a0, 13644; NOVLDEP-NEXT: addi a0, a0, -73645; NOVLDEP-NEXT: vslideup.vx v8, v10, a03646; NOVLDEP-NEXT: ret3647;3648; VLDEP-LABEL: splice_nxv4f32_offset_max:3649; VLDEP: # %bb.0:3650; VLDEP-NEXT: csrr a0, vlenb3651; VLDEP-NEXT: srli a0, a0, 13652; VLDEP-NEXT: addi a0, a0, -73653; VLDEP-NEXT: vsetvli zero, a0, e32, m2, ta, ma3654; VLDEP-NEXT: vslidedown.vi v8, v8, 73655; VLDEP-NEXT: vsetvli a1, zero, e32, m2, ta, ma3656; VLDEP-NEXT: vslideup.vx v8, v10, a03657; VLDEP-NEXT: ret3658 %res = call <vscale x 4 x float> @llvm.vector.splice.nxv4f32(<vscale x 4 x float> %a, <vscale x 4 x float> %b, i32 7)3659 ret <vscale x 4 x float> %res3660}3661 3662define <vscale x 8 x float> @splice_nxv8f32_offset_zero(<vscale x 8 x float> %a, <vscale x 8 x float> %b) #0 {3663; CHECK-LABEL: splice_nxv8f32_offset_zero:3664; CHECK: # %bb.0:3665; CHECK-NEXT: ret3666 %res = call <vscale x 8 x float> @llvm.vector.splice.nxv8f32(<vscale x 8 x float> %a, <vscale x 8 x float> %b, i32 0)3667 ret <vscale x 8 x float> %res3668}3669 3670define <vscale x 8 x float> @splice_nxv8f32_offset_negone(<vscale x 8 x float> %a, <vscale x 8 x float> %b) #0 {3671; NOVLDEP-LABEL: splice_nxv8f32_offset_negone:3672; NOVLDEP: # %bb.0:3673; NOVLDEP-NEXT: csrr a0, vlenb3674; NOVLDEP-NEXT: addi a0, a0, -13675; NOVLDEP-NEXT: vsetvli a1, zero, e32, m4, ta, ma3676; NOVLDEP-NEXT: vslidedown.vx v8, v8, a03677; NOVLDEP-NEXT: vslideup.vi v8, v12, 13678; NOVLDEP-NEXT: ret3679;3680; VLDEP-LABEL: splice_nxv8f32_offset_negone:3681; VLDEP: # %bb.0:3682; VLDEP-NEXT: csrr a0, vlenb3683; VLDEP-NEXT: addi a0, a0, -13684; VLDEP-NEXT: vsetivli zero, 1, e32, m4, ta, ma3685; VLDEP-NEXT: vslidedown.vx v8, v8, a03686; VLDEP-NEXT: vsetvli a0, zero, e32, m4, ta, ma3687; VLDEP-NEXT: vslideup.vi v8, v12, 13688; VLDEP-NEXT: ret3689 %res = call <vscale x 8 x float> @llvm.vector.splice.nxv8f32(<vscale x 8 x float> %a, <vscale x 8 x float> %b, i32 -1)3690 ret <vscale x 8 x float> %res3691}3692 3693define <vscale x 8 x float> @splice_nxv8f32_offset_min(<vscale x 8 x float> %a, <vscale x 8 x float> %b) #0 {3694; NOVLDEP-LABEL: splice_nxv8f32_offset_min:3695; NOVLDEP: # %bb.0:3696; NOVLDEP-NEXT: csrr a0, vlenb3697; NOVLDEP-NEXT: addi a0, a0, -163698; NOVLDEP-NEXT: vsetvli a1, zero, e32, m4, ta, ma3699; NOVLDEP-NEXT: vslidedown.vx v8, v8, a03700; NOVLDEP-NEXT: vslideup.vi v8, v12, 163701; NOVLDEP-NEXT: ret3702;3703; VLDEP-LABEL: splice_nxv8f32_offset_min:3704; VLDEP: # %bb.0:3705; VLDEP-NEXT: csrr a0, vlenb3706; VLDEP-NEXT: addi a0, a0, -163707; VLDEP-NEXT: vsetivli zero, 16, e32, m4, ta, ma3708; VLDEP-NEXT: vslidedown.vx v8, v8, a03709; VLDEP-NEXT: vsetvli a0, zero, e32, m4, ta, ma3710; VLDEP-NEXT: vslideup.vi v8, v12, 163711; VLDEP-NEXT: ret3712 %res = call <vscale x 8 x float> @llvm.vector.splice.nxv8f32(<vscale x 8 x float> %a, <vscale x 8 x float> %b, i32 -16)3713 ret <vscale x 8 x float> %res3714}3715 3716define <vscale x 8 x float> @splice_nxv8f32_offset_max(<vscale x 8 x float> %a, <vscale x 8 x float> %b) #0 {3717; NOVLDEP-LABEL: splice_nxv8f32_offset_max:3718; NOVLDEP: # %bb.0:3719; NOVLDEP-NEXT: csrr a0, vlenb3720; NOVLDEP-NEXT: addi a0, a0, -153721; NOVLDEP-NEXT: vsetvli a1, zero, e32, m4, ta, ma3722; NOVLDEP-NEXT: vslidedown.vi v8, v8, 153723; NOVLDEP-NEXT: vslideup.vx v8, v12, a03724; NOVLDEP-NEXT: ret3725;3726; VLDEP-LABEL: splice_nxv8f32_offset_max:3727; VLDEP: # %bb.0:3728; VLDEP-NEXT: csrr a0, vlenb3729; VLDEP-NEXT: addi a0, a0, -153730; VLDEP-NEXT: vsetvli zero, a0, e32, m4, ta, ma3731; VLDEP-NEXT: vslidedown.vi v8, v8, 153732; VLDEP-NEXT: vsetvli a1, zero, e32, m4, ta, ma3733; VLDEP-NEXT: vslideup.vx v8, v12, a03734; VLDEP-NEXT: ret3735 %res = call <vscale x 8 x float> @llvm.vector.splice.nxv8f32(<vscale x 8 x float> %a, <vscale x 8 x float> %b, i32 15)3736 ret <vscale x 8 x float> %res3737}3738 3739define <vscale x 16 x float> @splice_nxv16f32_offset_zero(<vscale x 16 x float> %a, <vscale x 16 x float> %b) #0 {3740; CHECK-LABEL: splice_nxv16f32_offset_zero:3741; CHECK: # %bb.0:3742; CHECK-NEXT: ret3743 %res = call <vscale x 16 x float> @llvm.vector.splice.nxv16f32(<vscale x 16 x float> %a, <vscale x 16 x float> %b, i32 0)3744 ret <vscale x 16 x float> %res3745}3746 3747define <vscale x 16 x float> @splice_nxv16f32_offset_negone(<vscale x 16 x float> %a, <vscale x 16 x float> %b) #0 {3748; NOVLDEP-LABEL: splice_nxv16f32_offset_negone:3749; NOVLDEP: # %bb.0:3750; NOVLDEP-NEXT: csrr a0, vlenb3751; NOVLDEP-NEXT: slli a0, a0, 13752; NOVLDEP-NEXT: addi a0, a0, -13753; NOVLDEP-NEXT: vsetvli a1, zero, e32, m8, ta, ma3754; NOVLDEP-NEXT: vslidedown.vx v8, v8, a03755; NOVLDEP-NEXT: vslideup.vi v8, v16, 13756; NOVLDEP-NEXT: ret3757;3758; VLDEP-LABEL: splice_nxv16f32_offset_negone:3759; VLDEP: # %bb.0:3760; VLDEP-NEXT: csrr a0, vlenb3761; VLDEP-NEXT: slli a0, a0, 13762; VLDEP-NEXT: addi a0, a0, -13763; VLDEP-NEXT: vsetivli zero, 1, e32, m8, ta, ma3764; VLDEP-NEXT: vslidedown.vx v8, v8, a03765; VLDEP-NEXT: vsetvli a0, zero, e32, m8, ta, ma3766; VLDEP-NEXT: vslideup.vi v8, v16, 13767; VLDEP-NEXT: ret3768 %res = call <vscale x 16 x float> @llvm.vector.splice.nxv16f32(<vscale x 16 x float> %a, <vscale x 16 x float> %b, i32 -1)3769 ret <vscale x 16 x float> %res3770}3771 3772define <vscale x 16 x float> @splice_nxv16f32_offset_min(<vscale x 16 x float> %a, <vscale x 16 x float> %b) #0 {3773; NOVLDEP-LABEL: splice_nxv16f32_offset_min:3774; NOVLDEP: # %bb.0:3775; NOVLDEP-NEXT: csrr a0, vlenb3776; NOVLDEP-NEXT: slli a0, a0, 13777; NOVLDEP-NEXT: addi a0, a0, -323778; NOVLDEP-NEXT: vsetvli a1, zero, e32, m8, ta, ma3779; NOVLDEP-NEXT: vslidedown.vx v8, v8, a03780; NOVLDEP-NEXT: li a0, 323781; NOVLDEP-NEXT: vslideup.vx v8, v16, a03782; NOVLDEP-NEXT: ret3783;3784; VLDEP-LABEL: splice_nxv16f32_offset_min:3785; VLDEP: # %bb.0:3786; VLDEP-NEXT: csrr a0, vlenb3787; VLDEP-NEXT: slli a0, a0, 13788; VLDEP-NEXT: addi a0, a0, -323789; VLDEP-NEXT: li a1, 323790; VLDEP-NEXT: vsetvli zero, a1, e32, m8, ta, ma3791; VLDEP-NEXT: vslidedown.vx v8, v8, a03792; VLDEP-NEXT: vsetvli a0, zero, e32, m8, ta, ma3793; VLDEP-NEXT: vslideup.vx v8, v16, a13794; VLDEP-NEXT: ret3795 %res = call <vscale x 16 x float> @llvm.vector.splice.nxv16f32(<vscale x 16 x float> %a, <vscale x 16 x float> %b, i32 -32)3796 ret <vscale x 16 x float> %res3797}3798 3799define <vscale x 16 x float> @splice_nxv16f32_offset_max(<vscale x 16 x float> %a, <vscale x 16 x float> %b) #0 {3800; NOVLDEP-LABEL: splice_nxv16f32_offset_max:3801; NOVLDEP: # %bb.0:3802; NOVLDEP-NEXT: vsetvli a0, zero, e32, m8, ta, ma3803; NOVLDEP-NEXT: vslidedown.vi v8, v8, 313804; NOVLDEP-NEXT: csrr a0, vlenb3805; NOVLDEP-NEXT: slli a0, a0, 13806; NOVLDEP-NEXT: addi a0, a0, -313807; NOVLDEP-NEXT: vslideup.vx v8, v16, a03808; NOVLDEP-NEXT: ret3809;3810; VLDEP-LABEL: splice_nxv16f32_offset_max:3811; VLDEP: # %bb.0:3812; VLDEP-NEXT: csrr a0, vlenb3813; VLDEP-NEXT: slli a0, a0, 13814; VLDEP-NEXT: addi a0, a0, -313815; VLDEP-NEXT: vsetvli zero, a0, e32, m8, ta, ma3816; VLDEP-NEXT: vslidedown.vi v8, v8, 313817; VLDEP-NEXT: vsetvli a1, zero, e32, m8, ta, ma3818; VLDEP-NEXT: vslideup.vx v8, v16, a03819; VLDEP-NEXT: ret3820 %res = call <vscale x 16 x float> @llvm.vector.splice.nxv16f32(<vscale x 16 x float> %a, <vscale x 16 x float> %b, i32 31)3821 ret <vscale x 16 x float> %res3822}3823 3824define <vscale x 1 x double> @splice_nxv1f64_offset_zero(<vscale x 1 x double> %a, <vscale x 1 x double> %b) #0 {3825; CHECK-LABEL: splice_nxv1f64_offset_zero:3826; CHECK: # %bb.0:3827; CHECK-NEXT: ret3828 %res = call <vscale x 1 x double> @llvm.vector.splice.nxv1f64(<vscale x 1 x double> %a, <vscale x 1 x double> %b, i32 0)3829 ret <vscale x 1 x double> %res3830}3831 3832define <vscale x 1 x double> @splice_nxv1f64_offset_negone(<vscale x 1 x double> %a, <vscale x 1 x double> %b) #0 {3833; NOVLDEP-LABEL: splice_nxv1f64_offset_negone:3834; NOVLDEP: # %bb.0:3835; NOVLDEP-NEXT: csrr a0, vlenb3836; NOVLDEP-NEXT: srli a0, a0, 33837; NOVLDEP-NEXT: addi a0, a0, -13838; NOVLDEP-NEXT: vsetvli a1, zero, e64, m1, ta, ma3839; NOVLDEP-NEXT: vslidedown.vx v8, v8, a03840; NOVLDEP-NEXT: vslideup.vi v8, v9, 13841; NOVLDEP-NEXT: ret3842;3843; VLDEP-LABEL: splice_nxv1f64_offset_negone:3844; VLDEP: # %bb.0:3845; VLDEP-NEXT: csrr a0, vlenb3846; VLDEP-NEXT: srli a0, a0, 33847; VLDEP-NEXT: addi a0, a0, -13848; VLDEP-NEXT: vsetivli zero, 1, e64, m1, ta, ma3849; VLDEP-NEXT: vslidedown.vx v8, v8, a03850; VLDEP-NEXT: vsetvli a0, zero, e64, m1, ta, ma3851; VLDEP-NEXT: vslideup.vi v8, v9, 13852; VLDEP-NEXT: ret3853 %res = call <vscale x 1 x double> @llvm.vector.splice.nxv1f64(<vscale x 1 x double> %a, <vscale x 1 x double> %b, i32 -1)3854 ret <vscale x 1 x double> %res3855}3856 3857define <vscale x 1 x double> @splice_nxv1f64_offset_min(<vscale x 1 x double> %a, <vscale x 1 x double> %b) #0 {3858; NOVLDEP-LABEL: splice_nxv1f64_offset_min:3859; NOVLDEP: # %bb.0:3860; NOVLDEP-NEXT: csrr a0, vlenb3861; NOVLDEP-NEXT: srli a0, a0, 33862; NOVLDEP-NEXT: addi a0, a0, -23863; NOVLDEP-NEXT: vsetvli a1, zero, e64, m1, ta, ma3864; NOVLDEP-NEXT: vslidedown.vx v8, v8, a03865; NOVLDEP-NEXT: vslideup.vi v8, v9, 23866; NOVLDEP-NEXT: ret3867;3868; VLDEP-LABEL: splice_nxv1f64_offset_min:3869; VLDEP: # %bb.0:3870; VLDEP-NEXT: csrr a0, vlenb3871; VLDEP-NEXT: srli a0, a0, 33872; VLDEP-NEXT: addi a0, a0, -23873; VLDEP-NEXT: vsetivli zero, 2, e64, m1, ta, ma3874; VLDEP-NEXT: vslidedown.vx v8, v8, a03875; VLDEP-NEXT: vsetvli a0, zero, e64, m1, ta, ma3876; VLDEP-NEXT: vslideup.vi v8, v9, 23877; VLDEP-NEXT: ret3878 %res = call <vscale x 1 x double> @llvm.vector.splice.nxv1f64(<vscale x 1 x double> %a, <vscale x 1 x double> %b, i32 -2)3879 ret <vscale x 1 x double> %res3880}3881 3882define <vscale x 1 x double> @splice_nxv1f64_offset_max(<vscale x 1 x double> %a, <vscale x 1 x double> %b) #0 {3883; NOVLDEP-LABEL: splice_nxv1f64_offset_max:3884; NOVLDEP: # %bb.0:3885; NOVLDEP-NEXT: vsetvli a0, zero, e64, m1, ta, ma3886; NOVLDEP-NEXT: vslidedown.vi v8, v8, 13887; NOVLDEP-NEXT: csrr a0, vlenb3888; NOVLDEP-NEXT: srli a0, a0, 33889; NOVLDEP-NEXT: addi a0, a0, -13890; NOVLDEP-NEXT: vslideup.vx v8, v9, a03891; NOVLDEP-NEXT: ret3892;3893; VLDEP-LABEL: splice_nxv1f64_offset_max:3894; VLDEP: # %bb.0:3895; VLDEP-NEXT: csrr a0, vlenb3896; VLDEP-NEXT: srli a0, a0, 33897; VLDEP-NEXT: addi a0, a0, -13898; VLDEP-NEXT: vsetvli zero, a0, e64, m1, ta, ma3899; VLDEP-NEXT: vslidedown.vi v8, v8, 13900; VLDEP-NEXT: vsetvli a1, zero, e64, m1, ta, ma3901; VLDEP-NEXT: vslideup.vx v8, v9, a03902; VLDEP-NEXT: ret3903 %res = call <vscale x 1 x double> @llvm.vector.splice.nxv1f64(<vscale x 1 x double> %a, <vscale x 1 x double> %b, i32 1)3904 ret <vscale x 1 x double> %res3905}3906 3907define <vscale x 2 x double> @splice_nxv2f64_offset_zero(<vscale x 2 x double> %a, <vscale x 2 x double> %b) #0 {3908; CHECK-LABEL: splice_nxv2f64_offset_zero:3909; CHECK: # %bb.0:3910; CHECK-NEXT: ret3911 %res = call <vscale x 2 x double> @llvm.vector.splice.nxv2f64(<vscale x 2 x double> %a, <vscale x 2 x double> %b, i32 0)3912 ret <vscale x 2 x double> %res3913}3914 3915define <vscale x 2 x double> @splice_nxv2f64_offset_negone(<vscale x 2 x double> %a, <vscale x 2 x double> %b) #0 {3916; NOVLDEP-LABEL: splice_nxv2f64_offset_negone:3917; NOVLDEP: # %bb.0:3918; NOVLDEP-NEXT: csrr a0, vlenb3919; NOVLDEP-NEXT: srli a0, a0, 23920; NOVLDEP-NEXT: addi a0, a0, -13921; NOVLDEP-NEXT: vsetvli a1, zero, e64, m2, ta, ma3922; NOVLDEP-NEXT: vslidedown.vx v8, v8, a03923; NOVLDEP-NEXT: vslideup.vi v8, v10, 13924; NOVLDEP-NEXT: ret3925;3926; VLDEP-LABEL: splice_nxv2f64_offset_negone:3927; VLDEP: # %bb.0:3928; VLDEP-NEXT: csrr a0, vlenb3929; VLDEP-NEXT: srli a0, a0, 23930; VLDEP-NEXT: addi a0, a0, -13931; VLDEP-NEXT: vsetivli zero, 1, e64, m2, ta, ma3932; VLDEP-NEXT: vslidedown.vx v8, v8, a03933; VLDEP-NEXT: vsetvli a0, zero, e64, m2, ta, ma3934; VLDEP-NEXT: vslideup.vi v8, v10, 13935; VLDEP-NEXT: ret3936 %res = call <vscale x 2 x double> @llvm.vector.splice.nxv2f64(<vscale x 2 x double> %a, <vscale x 2 x double> %b, i32 -1)3937 ret <vscale x 2 x double> %res3938}3939 3940define <vscale x 2 x double> @splice_nxv2f64_offset_min(<vscale x 2 x double> %a, <vscale x 2 x double> %b) #0 {3941; NOVLDEP-LABEL: splice_nxv2f64_offset_min:3942; NOVLDEP: # %bb.0:3943; NOVLDEP-NEXT: csrr a0, vlenb3944; NOVLDEP-NEXT: srli a0, a0, 23945; NOVLDEP-NEXT: addi a0, a0, -43946; NOVLDEP-NEXT: vsetvli a1, zero, e64, m2, ta, ma3947; NOVLDEP-NEXT: vslidedown.vx v8, v8, a03948; NOVLDEP-NEXT: vslideup.vi v8, v10, 43949; NOVLDEP-NEXT: ret3950;3951; VLDEP-LABEL: splice_nxv2f64_offset_min:3952; VLDEP: # %bb.0:3953; VLDEP-NEXT: csrr a0, vlenb3954; VLDEP-NEXT: srli a0, a0, 23955; VLDEP-NEXT: addi a0, a0, -43956; VLDEP-NEXT: vsetivli zero, 4, e64, m2, ta, ma3957; VLDEP-NEXT: vslidedown.vx v8, v8, a03958; VLDEP-NEXT: vsetvli a0, zero, e64, m2, ta, ma3959; VLDEP-NEXT: vslideup.vi v8, v10, 43960; VLDEP-NEXT: ret3961 %res = call <vscale x 2 x double> @llvm.vector.splice.nxv2f64(<vscale x 2 x double> %a, <vscale x 2 x double> %b, i32 -4)3962 ret <vscale x 2 x double> %res3963}3964 3965define <vscale x 2 x double> @splice_nxv2f64_offset_max(<vscale x 2 x double> %a, <vscale x 2 x double> %b) #0 {3966; NOVLDEP-LABEL: splice_nxv2f64_offset_max:3967; NOVLDEP: # %bb.0:3968; NOVLDEP-NEXT: vsetvli a0, zero, e64, m2, ta, ma3969; NOVLDEP-NEXT: vslidedown.vi v8, v8, 33970; NOVLDEP-NEXT: csrr a0, vlenb3971; NOVLDEP-NEXT: srli a0, a0, 23972; NOVLDEP-NEXT: addi a0, a0, -33973; NOVLDEP-NEXT: vslideup.vx v8, v10, a03974; NOVLDEP-NEXT: ret3975;3976; VLDEP-LABEL: splice_nxv2f64_offset_max:3977; VLDEP: # %bb.0:3978; VLDEP-NEXT: csrr a0, vlenb3979; VLDEP-NEXT: srli a0, a0, 23980; VLDEP-NEXT: addi a0, a0, -33981; VLDEP-NEXT: vsetvli zero, a0, e64, m2, ta, ma3982; VLDEP-NEXT: vslidedown.vi v8, v8, 33983; VLDEP-NEXT: vsetvli a1, zero, e64, m2, ta, ma3984; VLDEP-NEXT: vslideup.vx v8, v10, a03985; VLDEP-NEXT: ret3986 %res = call <vscale x 2 x double> @llvm.vector.splice.nxv2f64(<vscale x 2 x double> %a, <vscale x 2 x double> %b, i32 3)3987 ret <vscale x 2 x double> %res3988}3989 3990define <vscale x 4 x double> @splice_nxv4f64_offset_zero(<vscale x 4 x double> %a, <vscale x 4 x double> %b) #0 {3991; CHECK-LABEL: splice_nxv4f64_offset_zero:3992; CHECK: # %bb.0:3993; CHECK-NEXT: ret3994 %res = call <vscale x 4 x double> @llvm.vector.splice.nxv4f64(<vscale x 4 x double> %a, <vscale x 4 x double> %b, i32 0)3995 ret <vscale x 4 x double> %res3996}3997 3998define <vscale x 4 x double> @splice_nxv4f64_offset_negone(<vscale x 4 x double> %a, <vscale x 4 x double> %b) #0 {3999; NOVLDEP-LABEL: splice_nxv4f64_offset_negone:4000; NOVLDEP: # %bb.0:4001; NOVLDEP-NEXT: csrr a0, vlenb4002; NOVLDEP-NEXT: srli a0, a0, 14003; NOVLDEP-NEXT: addi a0, a0, -14004; NOVLDEP-NEXT: vsetvli a1, zero, e64, m4, ta, ma4005; NOVLDEP-NEXT: vslidedown.vx v8, v8, a04006; NOVLDEP-NEXT: vslideup.vi v8, v12, 14007; NOVLDEP-NEXT: ret4008;4009; VLDEP-LABEL: splice_nxv4f64_offset_negone:4010; VLDEP: # %bb.0:4011; VLDEP-NEXT: csrr a0, vlenb4012; VLDEP-NEXT: srli a0, a0, 14013; VLDEP-NEXT: addi a0, a0, -14014; VLDEP-NEXT: vsetivli zero, 1, e64, m4, ta, ma4015; VLDEP-NEXT: vslidedown.vx v8, v8, a04016; VLDEP-NEXT: vsetvli a0, zero, e64, m4, ta, ma4017; VLDEP-NEXT: vslideup.vi v8, v12, 14018; VLDEP-NEXT: ret4019 %res = call <vscale x 4 x double> @llvm.vector.splice.nxv4f64(<vscale x 4 x double> %a, <vscale x 4 x double> %b, i32 -1)4020 ret <vscale x 4 x double> %res4021}4022 4023define <vscale x 4 x double> @splice_nxv4f64_offset_min(<vscale x 4 x double> %a, <vscale x 4 x double> %b) #0 {4024; NOVLDEP-LABEL: splice_nxv4f64_offset_min:4025; NOVLDEP: # %bb.0:4026; NOVLDEP-NEXT: csrr a0, vlenb4027; NOVLDEP-NEXT: srli a0, a0, 14028; NOVLDEP-NEXT: addi a0, a0, -84029; NOVLDEP-NEXT: vsetvli a1, zero, e64, m4, ta, ma4030; NOVLDEP-NEXT: vslidedown.vx v8, v8, a04031; NOVLDEP-NEXT: vslideup.vi v8, v12, 84032; NOVLDEP-NEXT: ret4033;4034; VLDEP-LABEL: splice_nxv4f64_offset_min:4035; VLDEP: # %bb.0:4036; VLDEP-NEXT: csrr a0, vlenb4037; VLDEP-NEXT: srli a0, a0, 14038; VLDEP-NEXT: addi a0, a0, -84039; VLDEP-NEXT: vsetivli zero, 8, e64, m4, ta, ma4040; VLDEP-NEXT: vslidedown.vx v8, v8, a04041; VLDEP-NEXT: vsetvli a0, zero, e64, m4, ta, ma4042; VLDEP-NEXT: vslideup.vi v8, v12, 84043; VLDEP-NEXT: ret4044 %res = call <vscale x 4 x double> @llvm.vector.splice.nxv4f64(<vscale x 4 x double> %a, <vscale x 4 x double> %b, i32 -8)4045 ret <vscale x 4 x double> %res4046}4047 4048define <vscale x 4 x double> @splice_nxv4f64_offset_max(<vscale x 4 x double> %a, <vscale x 4 x double> %b) #0 {4049; NOVLDEP-LABEL: splice_nxv4f64_offset_max:4050; NOVLDEP: # %bb.0:4051; NOVLDEP-NEXT: vsetvli a0, zero, e64, m4, ta, ma4052; NOVLDEP-NEXT: vslidedown.vi v8, v8, 74053; NOVLDEP-NEXT: csrr a0, vlenb4054; NOVLDEP-NEXT: srli a0, a0, 14055; NOVLDEP-NEXT: addi a0, a0, -74056; NOVLDEP-NEXT: vslideup.vx v8, v12, a04057; NOVLDEP-NEXT: ret4058;4059; VLDEP-LABEL: splice_nxv4f64_offset_max:4060; VLDEP: # %bb.0:4061; VLDEP-NEXT: csrr a0, vlenb4062; VLDEP-NEXT: srli a0, a0, 14063; VLDEP-NEXT: addi a0, a0, -74064; VLDEP-NEXT: vsetvli zero, a0, e64, m4, ta, ma4065; VLDEP-NEXT: vslidedown.vi v8, v8, 74066; VLDEP-NEXT: vsetvli a1, zero, e64, m4, ta, ma4067; VLDEP-NEXT: vslideup.vx v8, v12, a04068; VLDEP-NEXT: ret4069 %res = call <vscale x 4 x double> @llvm.vector.splice.nxv4f64(<vscale x 4 x double> %a, <vscale x 4 x double> %b, i32 7)4070 ret <vscale x 4 x double> %res4071}4072 4073define <vscale x 8 x double> @splice_nxv8f64_offset_zero(<vscale x 8 x double> %a, <vscale x 8 x double> %b) #0 {4074; CHECK-LABEL: splice_nxv8f64_offset_zero:4075; CHECK: # %bb.0:4076; CHECK-NEXT: ret4077 %res = call <vscale x 8 x double> @llvm.vector.splice.nxv8f64(<vscale x 8 x double> %a, <vscale x 8 x double> %b, i32 0)4078 ret <vscale x 8 x double> %res4079}4080 4081define <vscale x 8 x double> @splice_nxv8f64_offset_negone(<vscale x 8 x double> %a, <vscale x 8 x double> %b) #0 {4082; NOVLDEP-LABEL: splice_nxv8f64_offset_negone:4083; NOVLDEP: # %bb.0:4084; NOVLDEP-NEXT: csrr a0, vlenb4085; NOVLDEP-NEXT: addi a0, a0, -14086; NOVLDEP-NEXT: vsetvli a1, zero, e64, m8, ta, ma4087; NOVLDEP-NEXT: vslidedown.vx v8, v8, a04088; NOVLDEP-NEXT: vslideup.vi v8, v16, 14089; NOVLDEP-NEXT: ret4090;4091; VLDEP-LABEL: splice_nxv8f64_offset_negone:4092; VLDEP: # %bb.0:4093; VLDEP-NEXT: csrr a0, vlenb4094; VLDEP-NEXT: addi a0, a0, -14095; VLDEP-NEXT: vsetivli zero, 1, e64, m8, ta, ma4096; VLDEP-NEXT: vslidedown.vx v8, v8, a04097; VLDEP-NEXT: vsetvli a0, zero, e64, m8, ta, ma4098; VLDEP-NEXT: vslideup.vi v8, v16, 14099; VLDEP-NEXT: ret4100 %res = call <vscale x 8 x double> @llvm.vector.splice.nxv8f64(<vscale x 8 x double> %a, <vscale x 8 x double> %b, i32 -1)4101 ret <vscale x 8 x double> %res4102}4103 4104define <vscale x 8 x double> @splice_nxv8f64_offset_min(<vscale x 8 x double> %a, <vscale x 8 x double> %b) #0 {4105; NOVLDEP-LABEL: splice_nxv8f64_offset_min:4106; NOVLDEP: # %bb.0:4107; NOVLDEP-NEXT: csrr a0, vlenb4108; NOVLDEP-NEXT: addi a0, a0, -164109; NOVLDEP-NEXT: vsetvli a1, zero, e64, m8, ta, ma4110; NOVLDEP-NEXT: vslidedown.vx v8, v8, a04111; NOVLDEP-NEXT: vslideup.vi v8, v16, 164112; NOVLDEP-NEXT: ret4113;4114; VLDEP-LABEL: splice_nxv8f64_offset_min:4115; VLDEP: # %bb.0:4116; VLDEP-NEXT: csrr a0, vlenb4117; VLDEP-NEXT: addi a0, a0, -164118; VLDEP-NEXT: vsetivli zero, 16, e64, m8, ta, ma4119; VLDEP-NEXT: vslidedown.vx v8, v8, a04120; VLDEP-NEXT: vsetvli a0, zero, e64, m8, ta, ma4121; VLDEP-NEXT: vslideup.vi v8, v16, 164122; VLDEP-NEXT: ret4123 %res = call <vscale x 8 x double> @llvm.vector.splice.nxv8f64(<vscale x 8 x double> %a, <vscale x 8 x double> %b, i32 -16)4124 ret <vscale x 8 x double> %res4125}4126 4127define <vscale x 8 x double> @splice_nxv8f64_offset_max(<vscale x 8 x double> %a, <vscale x 8 x double> %b) #0 {4128; NOVLDEP-LABEL: splice_nxv8f64_offset_max:4129; NOVLDEP: # %bb.0:4130; NOVLDEP-NEXT: csrr a0, vlenb4131; NOVLDEP-NEXT: addi a0, a0, -154132; NOVLDEP-NEXT: vsetvli a1, zero, e64, m8, ta, ma4133; NOVLDEP-NEXT: vslidedown.vi v8, v8, 154134; NOVLDEP-NEXT: vslideup.vx v8, v16, a04135; NOVLDEP-NEXT: ret4136;4137; VLDEP-LABEL: splice_nxv8f64_offset_max:4138; VLDEP: # %bb.0:4139; VLDEP-NEXT: csrr a0, vlenb4140; VLDEP-NEXT: addi a0, a0, -154141; VLDEP-NEXT: vsetvli zero, a0, e64, m8, ta, ma4142; VLDEP-NEXT: vslidedown.vi v8, v8, 154143; VLDEP-NEXT: vsetvli a1, zero, e64, m8, ta, ma4144; VLDEP-NEXT: vslideup.vx v8, v16, a04145; VLDEP-NEXT: ret4146 %res = call <vscale x 8 x double> @llvm.vector.splice.nxv8f64(<vscale x 8 x double> %a, <vscale x 8 x double> %b, i32 15)4147 ret <vscale x 8 x double> %res4148}4149 4150define <vscale x 2 x i32> @splice_nxv2i32_slidedown(<vscale x 2 x i32> %a) #0 {4151; NOVLDEP-LABEL: splice_nxv2i32_slidedown:4152; NOVLDEP: # %bb.0:4153; NOVLDEP-NEXT: vsetvli a0, zero, e32, m1, ta, ma4154; NOVLDEP-NEXT: vslidedown.vi v8, v8, 34155; NOVLDEP-NEXT: ret4156;4157; VLDEP-LABEL: splice_nxv2i32_slidedown:4158; VLDEP: # %bb.0:4159; VLDEP-NEXT: csrr a0, vlenb4160; VLDEP-NEXT: srli a0, a0, 24161; VLDEP-NEXT: addi a0, a0, -34162; VLDEP-NEXT: vsetvli zero, a0, e32, m1, ta, ma4163; VLDEP-NEXT: vslidedown.vi v8, v8, 34164; VLDEP-NEXT: ret4165 %res = call <vscale x 2 x i32> @llvm.vector.splice(<vscale x 2 x i32> %a, <vscale x 2 x i32> poison, i32 3)4166 ret <vscale x 2 x i32> %res4167}4168 4169define <vscale x 2 x i32> @splice_nxv2i32_slideup(<vscale x 2 x i32> %a) #0 {4170; CHECK-LABEL: splice_nxv2i32_slideup:4171; CHECK: # %bb.0:4172; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, ma4173; CHECK-NEXT: vslideup.vi v9, v8, 34174; CHECK-NEXT: vmv.v.v v8, v94175; CHECK-NEXT: ret4176 %res = call <vscale x 2 x i32> @llvm.vector.splice(<vscale x 2 x i32> poison, <vscale x 2 x i32> %a, i32 -3)4177 ret <vscale x 2 x i32> %res4178}4179 4180define <vscale x 2 x i32> @splice_nxv2i32_slidedown_undef(<vscale x 2 x i32> %a) #0 {4181; NOVLDEP-LABEL: splice_nxv2i32_slidedown_undef:4182; NOVLDEP: # %bb.0:4183; NOVLDEP-NEXT: vsetvli a0, zero, e32, m1, ta, ma4184; NOVLDEP-NEXT: vslidedown.vi v8, v8, 34185; NOVLDEP-NEXT: ret4186;4187; VLDEP-LABEL: splice_nxv2i32_slidedown_undef:4188; VLDEP: # %bb.0:4189; VLDEP-NEXT: csrr a0, vlenb4190; VLDEP-NEXT: srli a0, a0, 24191; VLDEP-NEXT: addi a0, a0, -34192; VLDEP-NEXT: vsetvli zero, a0, e32, m1, ta, ma4193; VLDEP-NEXT: vslidedown.vi v8, v8, 34194; VLDEP-NEXT: ret4195 %res = call <vscale x 2 x i32> @llvm.vector.splice(<vscale x 2 x i32> %a, <vscale x 2 x i32> undef, i32 3)4196 ret <vscale x 2 x i32> %res4197}4198 4199define <vscale x 2 x i32> @splice_nxv2i32_slideup_undef(<vscale x 2 x i32> %a) #0 {4200; CHECK-LABEL: splice_nxv2i32_slideup_undef:4201; CHECK: # %bb.0:4202; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, ma4203; CHECK-NEXT: vslideup.vi v9, v8, 34204; CHECK-NEXT: vmv.v.v v8, v94205; CHECK-NEXT: ret4206 %res = call <vscale x 2 x i32> @llvm.vector.splice(<vscale x 2 x i32> undef, <vscale x 2 x i32> %a, i32 -3)4207 ret <vscale x 2 x i32> %res4208}4209 4210attributes #0 = { vscale_range(2,0) }4211