452 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=riscv32 -mattr=+v \3; RUN: -lower-interleaved-accesses=false -verify-machineinstrs \4; RUN: | FileCheck %s --check-prefix=CHECK5; RUN: llc < %s -mtriple=riscv64 -mattr=+v \6; RUN: -lower-interleaved-accesses=false -verify-machineinstrs \7; RUN: | FileCheck %s --check-prefix=CHECK8 9define void @deinterleave3_0_i8(ptr %in, ptr %out) {10; CHECK-LABEL: deinterleave3_0_i8:11; CHECK: # %bb.0: # %entry12; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma13; CHECK-NEXT: vle8.v v8, (a0)14; CHECK-NEXT: lui a0, %hi(.LCPI0_0)15; CHECK-NEXT: addi a0, a0, %lo(.LCPI0_0)16; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, ma17; CHECK-NEXT: vle8.v v9, (a0)18; CHECK-NEXT: li a0, 7319; CHECK-NEXT: vmv.s.x v0, a020; CHECK-NEXT: vsetivli zero, 8, e8, m1, ta, ma21; CHECK-NEXT: vslidedown.vi v10, v8, 822; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, ma23; CHECK-NEXT: vmerge.vvm v8, v10, v8, v024; CHECK-NEXT: vrgather.vv v10, v8, v925; CHECK-NEXT: vse8.v v10, (a1)26; CHECK-NEXT: ret27entry:28 %0 = load <16 x i8>, ptr %in, align 129 %shuffle.i5 = shufflevector <16 x i8> %0, <16 x i8> poison, <8 x i32> <i32 0, i32 3, i32 6, i32 9, i32 12, i32 15, i32 poison, i32 poison>30 store <8 x i8> %shuffle.i5, ptr %out, align 131 ret void32}33 34define void @deinterleave3_8_i8(ptr %in, ptr %out) {35; CHECK-LABEL: deinterleave3_8_i8:36; CHECK: # %bb.0: # %entry37; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma38; CHECK-NEXT: vle8.v v8, (a0)39; CHECK-NEXT: lui a0, %hi(.LCPI1_0)40; CHECK-NEXT: addi a0, a0, %lo(.LCPI1_0)41; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, ma42; CHECK-NEXT: vle8.v v9, (a0)43; CHECK-NEXT: li a0, 14644; CHECK-NEXT: vmv.s.x v0, a045; CHECK-NEXT: vsetivli zero, 8, e8, m1, ta, ma46; CHECK-NEXT: vslidedown.vi v10, v8, 847; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, ma48; CHECK-NEXT: vmerge.vvm v8, v10, v8, v049; CHECK-NEXT: vrgather.vv v10, v8, v950; CHECK-NEXT: vse8.v v10, (a1)51; CHECK-NEXT: ret52entry:53 %0 = load <16 x i8>, ptr %in, align 154 %shuffle.i5 = shufflevector <16 x i8> %0, <16 x i8> poison, <8 x i32> <i32 1, i32 4, i32 7, i32 10, i32 13, i32 poison, i32 poison, i32 poison>55 store <8 x i8> %shuffle.i5, ptr %out, align 156 ret void57}58 59define void @deinterleave4_0_i8(ptr %in, ptr %out) {60; CHECK-LABEL: deinterleave4_0_i8:61; CHECK: # %bb.0: # %entry62; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma63; CHECK-NEXT: vle8.v v8, (a0)64; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, ma65; CHECK-NEXT: vnsrl.wi v8, v8, 066; CHECK-NEXT: vsetvli zero, zero, e8, mf4, ta, ma67; CHECK-NEXT: vnsrl.wi v8, v8, 068; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, ma69; CHECK-NEXT: vse8.v v8, (a1)70; CHECK-NEXT: ret71entry:72 %0 = load <16 x i8>, ptr %in, align 173 %shuffle.i5 = shufflevector <16 x i8> %0, <16 x i8> poison, <8 x i32> <i32 0, i32 4, i32 8, i32 12, i32 poison, i32 poison, i32 poison, i32 poison>74 store <8 x i8> %shuffle.i5, ptr %out, align 175 ret void76}77 78define void @deinterleave4_8_i8(ptr %in, ptr %out) {79; CHECK-LABEL: deinterleave4_8_i8:80; CHECK: # %bb.0: # %entry81; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma82; CHECK-NEXT: vle8.v v8, (a0)83; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, ma84; CHECK-NEXT: vnsrl.wi v8, v8, 885; CHECK-NEXT: vsetvli zero, zero, e8, mf4, ta, ma86; CHECK-NEXT: vnsrl.wi v8, v8, 087; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, ma88; CHECK-NEXT: vse8.v v8, (a1)89; CHECK-NEXT: ret90entry:91 %0 = load <16 x i8>, ptr %in, align 192 %shuffle.i5 = shufflevector <16 x i8> %0, <16 x i8> poison, <8 x i32> <i32 1, i32 5, i32 9, i32 13, i32 poison, i32 poison, i32 poison, i32 poison>93 store <8 x i8> %shuffle.i5, ptr %out, align 194 ret void95}96 97define void @deinterleave5_0_i8(ptr %in, ptr %out) {98; CHECK-LABEL: deinterleave5_0_i8:99; CHECK: # %bb.0: # %entry100; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma101; CHECK-NEXT: vle8.v v8, (a0)102; CHECK-NEXT: li a0, 33103; CHECK-NEXT: vmv.s.x v0, a0104; CHECK-NEXT: vsetivli zero, 8, e8, m1, ta, ma105; CHECK-NEXT: vslidedown.vi v9, v8, 8106; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, mu107; CHECK-NEXT: vmerge.vvm v8, v9, v8, v0108; CHECK-NEXT: vmv.v.i v0, 10109; CHECK-NEXT: vslidedown.vi v8, v8, 4, v0.t110; CHECK-NEXT: vse8.v v8, (a1)111; CHECK-NEXT: ret112entry:113 %0 = load <16 x i8>, ptr %in, align 1114 %shuffle.i5 = shufflevector <16 x i8> %0, <16 x i8> poison, <8 x i32> <i32 0, i32 5, i32 10, i32 15, i32 poison, i32 poison, i32 poison, i32 poison>115 store <8 x i8> %shuffle.i5, ptr %out, align 1116 ret void117}118 119define void @deinterleave5_8_i8(ptr %in, ptr %out) {120; CHECK-LABEL: deinterleave5_8_i8:121; CHECK: # %bb.0: # %entry122; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma123; CHECK-NEXT: vle8.v v8, (a0)124; CHECK-NEXT: vmv.v.i v0, 2125; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, mu126; CHECK-NEXT: vslidedown.vi v9, v8, 1127; CHECK-NEXT: vslidedown.vi v9, v8, 5, v0.t128; CHECK-NEXT: vmv.v.i v0, 4129; CHECK-NEXT: vsetivli zero, 8, e8, m1, ta, ma130; CHECK-NEXT: vslidedown.vi v8, v8, 8131; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, mu132; CHECK-NEXT: vrgather.vi v9, v8, 3, v0.t133; CHECK-NEXT: vse8.v v9, (a1)134; CHECK-NEXT: ret135entry:136 %0 = load <16 x i8>, ptr %in, align 1137 %shuffle.i5 = shufflevector <16 x i8> %0, <16 x i8> poison, <8 x i32> <i32 1, i32 6, i32 11, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>138 store <8 x i8> %shuffle.i5, ptr %out, align 1139 ret void140}141 142define void @deinterleave6_0_i8(ptr %in, ptr %out) {143; CHECK-LABEL: deinterleave6_0_i8:144; CHECK: # %bb.0: # %entry145; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma146; CHECK-NEXT: vle8.v v8, (a0)147; CHECK-NEXT: vmv.v.i v0, 2148; CHECK-NEXT: vsetivli zero, 8, e8, m1, ta, ma149; CHECK-NEXT: vslidedown.vi v9, v8, 8150; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, mu151; CHECK-NEXT: vslidedown.vi v8, v8, 5, v0.t152; CHECK-NEXT: vmv.v.i v0, 4153; CHECK-NEXT: vrgather.vi v8, v9, 4, v0.t154; CHECK-NEXT: vse8.v v8, (a1)155; CHECK-NEXT: ret156entry:157 %0 = load <16 x i8>, ptr %in, align 1158 %shuffle.i5 = shufflevector <16 x i8> %0, <16 x i8> poison, <8 x i32> <i32 0, i32 6, i32 12, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>159 store <8 x i8> %shuffle.i5, ptr %out, align 1160 ret void161}162 163define void @deinterleave6_8_i8(ptr %in, ptr %out) {164; CHECK-LABEL: deinterleave6_8_i8:165; CHECK: # %bb.0: # %entry166; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma167; CHECK-NEXT: vle8.v v8, (a0)168; CHECK-NEXT: vmv.v.i v0, 2169; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, mu170; CHECK-NEXT: vslidedown.vi v9, v8, 1171; CHECK-NEXT: vslidedown.vi v9, v8, 6, v0.t172; CHECK-NEXT: vmv.v.i v0, 4173; CHECK-NEXT: vsetivli zero, 8, e8, m1, ta, ma174; CHECK-NEXT: vslidedown.vi v8, v8, 8175; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, mu176; CHECK-NEXT: vrgather.vi v9, v8, 5, v0.t177; CHECK-NEXT: vse8.v v9, (a1)178; CHECK-NEXT: ret179entry:180 %0 = load <16 x i8>, ptr %in, align 1181 %shuffle.i5 = shufflevector <16 x i8> %0, <16 x i8> poison, <8 x i32> <i32 1, i32 7, i32 13, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>182 store <8 x i8> %shuffle.i5, ptr %out, align 1183 ret void184}185 186define void @deinterleave7_0_i8(ptr %in, ptr %out) {187; CHECK-LABEL: deinterleave7_0_i8:188; CHECK: # %bb.0: # %entry189; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma190; CHECK-NEXT: vle8.v v8, (a0)191; CHECK-NEXT: vmv.v.i v0, 2192; CHECK-NEXT: vsetivli zero, 8, e8, m1, ta, ma193; CHECK-NEXT: vslidedown.vi v9, v8, 8194; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, mu195; CHECK-NEXT: vslidedown.vi v8, v8, 6, v0.t196; CHECK-NEXT: vmv.v.i v0, 4197; CHECK-NEXT: vrgather.vi v8, v9, 6, v0.t198; CHECK-NEXT: vse8.v v8, (a1)199; CHECK-NEXT: ret200entry:201 %0 = load <16 x i8>, ptr %in, align 1202 %shuffle.i5 = shufflevector <16 x i8> %0, <16 x i8> poison, <8 x i32> <i32 0, i32 7, i32 14, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>203 store <8 x i8> %shuffle.i5, ptr %out, align 1204 ret void205}206 207define void @deinterleave7_8_i8(ptr %in, ptr %out) {208; CHECK-LABEL: deinterleave7_8_i8:209; CHECK: # %bb.0: # %entry210; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma211; CHECK-NEXT: vle8.v v8, (a0)212; CHECK-NEXT: vmv.v.i v0, 2213; CHECK-NEXT: vsetivli zero, 8, e8, m1, ta, ma214; CHECK-NEXT: vslidedown.vi v9, v8, 8215; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, mu216; CHECK-NEXT: vslidedown.vi v10, v9, 4217; CHECK-NEXT: vslideup.vi v10, v9, 1, v0.t218; CHECK-NEXT: vmv.v.i v0, 6219; CHECK-NEXT: vrgather.vi v9, v8, 1220; CHECK-NEXT: vmerge.vvm v8, v9, v10, v0221; CHECK-NEXT: vse8.v v8, (a1)222; CHECK-NEXT: ret223entry:224 %0 = load <16 x i8>, ptr %in, align 1225 %shuffle.i5 = shufflevector <16 x i8> %0, <16 x i8> poison, <8 x i32> <i32 1, i32 8, i32 14, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>226 store <8 x i8> %shuffle.i5, ptr %out, align 1227 ret void228}229 230define void @deinterleave8_0_i8(ptr %in, ptr %out) {231; CHECK-LABEL: deinterleave8_0_i8:232; CHECK: # %bb.0: # %entry233; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma234; CHECK-NEXT: vle8.v v8, (a0)235; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, ma236; CHECK-NEXT: vnsrl.wi v8, v8, 0237; CHECK-NEXT: vsetvli zero, zero, e16, mf4, ta, ma238; CHECK-NEXT: vnsrl.wi v8, v8, 0239; CHECK-NEXT: vsetvli zero, zero, e8, mf8, ta, ma240; CHECK-NEXT: vnsrl.wi v8, v8, 0241; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, ma242; CHECK-NEXT: vse8.v v8, (a1)243; CHECK-NEXT: ret244entry:245 %0 = load <16 x i8>, ptr %in, align 1246 %shuffle.i5 = shufflevector <16 x i8> %0, <16 x i8> poison, <8 x i32> <i32 0, i32 8, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>247 store <8 x i8> %shuffle.i5, ptr %out, align 1248 ret void249}250 251define void @deinterleave8_8_i8(ptr %in, ptr %out) {252; CHECK-LABEL: deinterleave8_8_i8:253; CHECK: # %bb.0: # %entry254; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma255; CHECK-NEXT: vle8.v v8, (a0)256; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, ma257; CHECK-NEXT: vnsrl.wi v8, v8, 8258; CHECK-NEXT: vsetvli zero, zero, e16, mf4, ta, ma259; CHECK-NEXT: vnsrl.wi v8, v8, 0260; CHECK-NEXT: vsetvli zero, zero, e8, mf8, ta, ma261; CHECK-NEXT: vnsrl.wi v8, v8, 0262; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, ma263; CHECK-NEXT: vse8.v v8, (a1)264; CHECK-NEXT: ret265entry:266 %0 = load <16 x i8>, ptr %in, align 1267 %shuffle.i5 = shufflevector <16 x i8> %0, <16 x i8> poison, <8 x i32> <i32 1, i32 9, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>268 store <8 x i8> %shuffle.i5, ptr %out, align 1269 ret void270}271 272; Exercise the high lmul case273define void @deinterleave7_0_i64(ptr %in, ptr %out) {274; CHECK-LABEL: deinterleave7_0_i64:275; CHECK: # %bb.0: # %entry276; CHECK-NEXT: vsetivli zero, 16, e64, m8, ta, ma277; CHECK-NEXT: vle64.v v8, (a0)278; CHECK-NEXT: vsetivli zero, 1, e8, mf8, ta, ma279; CHECK-NEXT: vmv.v.i v0, 2280; CHECK-NEXT: vmv4r.v v16, v8281; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, mu282; CHECK-NEXT: vslidedown.vi v16, v8, 6, v0.t283; CHECK-NEXT: vsetivli zero, 1, e8, mf8, ta, ma284; CHECK-NEXT: vmv.v.i v0, 4285; CHECK-NEXT: vsetivli zero, 8, e64, m8, ta, ma286; CHECK-NEXT: vslidedown.vi v8, v8, 8287; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, mu288; CHECK-NEXT: vrgather.vi v16, v8, 6, v0.t289; CHECK-NEXT: vse64.v v16, (a1)290; CHECK-NEXT: ret291entry:292 %0 = load <16 x i64>, ptr %in293 %shuffle.i5 = shufflevector <16 x i64> %0, <16 x i64> poison, <8 x i32> <i32 0, i32 7, i32 14, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>294 store <8 x i64> %shuffle.i5, ptr %out295 ret void296}297 298; Store back only the active subvector299define void @deinterleave4_0_i8_subvec(ptr %in, ptr %out) {300; CHECK-LABEL: deinterleave4_0_i8_subvec:301; CHECK: # %bb.0: # %entry302; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma303; CHECK-NEXT: vle8.v v8, (a0)304; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, ma305; CHECK-NEXT: vnsrl.wi v8, v8, 0306; CHECK-NEXT: vsetvli zero, zero, e8, mf4, ta, ma307; CHECK-NEXT: vnsrl.wi v8, v8, 0308; CHECK-NEXT: vse8.v v8, (a1)309; CHECK-NEXT: ret310entry:311 %0 = load <16 x i8>, ptr %in, align 1312 %shuffle.i5 = shufflevector <16 x i8> %0, <16 x i8> poison, <4 x i32> <i32 0, i32 4, i32 8, i32 12>313 store <4 x i8> %shuffle.i5, ptr %out, align 1314 ret void315}316 317; Store back only the active subvector318define void @deinterleave7_0_i32_subvec(ptr %in, ptr %out) {319; CHECK-LABEL: deinterleave7_0_i32_subvec:320; CHECK: # %bb.0: # %entry321; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, ma322; CHECK-NEXT: vle32.v v8, (a0)323; CHECK-NEXT: vsetivli zero, 1, e8, mf8, ta, ma324; CHECK-NEXT: vmv.v.i v0, 2325; CHECK-NEXT: vmv2r.v v12, v8326; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, mu327; CHECK-NEXT: vslidedown.vi v12, v8, 6, v0.t328; CHECK-NEXT: vsetivli zero, 1, e8, mf8, ta, ma329; CHECK-NEXT: vmv.v.i v0, 4330; CHECK-NEXT: vsetivli zero, 8, e32, m4, ta, ma331; CHECK-NEXT: vslidedown.vi v8, v8, 8332; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, mu333; CHECK-NEXT: vrgather.vi v12, v8, 6, v0.t334; CHECK-NEXT: vsetivli zero, 3, e32, m1, ta, ma335; CHECK-NEXT: vse32.v v12, (a1)336; CHECK-NEXT: ret337entry:338 %0 = load <16 x i32>, ptr %in339 %shuffle.i5 = shufflevector <16 x i32> %0, <16 x i32> poison, <3 x i32> <i32 0, i32 7, i32 14>340 store <3 x i32> %shuffle.i5, ptr %out341 ret void342}343 344; Store back only the active subvector345define void @deinterleave8_0_i8_subvec(ptr %in, ptr %out) {346; CHECK-LABEL: deinterleave8_0_i8_subvec:347; CHECK: # %bb.0: # %entry348; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma349; CHECK-NEXT: vle8.v v8, (a0)350; CHECK-NEXT: vslidedown.vi v9, v8, 8351; CHECK-NEXT: vmv.x.s a0, v8352; CHECK-NEXT: vmv.x.s a2, v9353; CHECK-NEXT: vsetivli zero, 2, e8, mf8, ta, ma354; CHECK-NEXT: vmv.v.x v8, a0355; CHECK-NEXT: vslide1down.vx v8, v8, a2356; CHECK-NEXT: vse8.v v8, (a1)357; CHECK-NEXT: ret358entry:359 %0 = load <16 x i8>, ptr %in, align 1360 %shuffle.i5 = shufflevector <16 x i8> %0, <16 x i8> poison, <2 x i32> <i32 0, i32 8>361 store <2 x i8> %shuffle.i5, ptr %out, align 1362 ret void363}364 365define void @deinterleave4_0_i8_two_source(ptr %in0, ptr %in1, ptr %out) {366; CHECK-LABEL: deinterleave4_0_i8_two_source:367; CHECK: # %bb.0: # %entry368; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, ma369; CHECK-NEXT: vle8.v v8, (a1)370; CHECK-NEXT: vle8.v v9, (a0)371; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, ma372; CHECK-NEXT: vnsrl.wi v8, v8, 0373; CHECK-NEXT: vnsrl.wi v9, v9, 0374; CHECK-NEXT: vsetvli zero, zero, e8, mf8, ta, ma375; CHECK-NEXT: vnsrl.wi v8, v8, 0376; CHECK-NEXT: vnsrl.wi v9, v9, 0377; CHECK-NEXT: vsetivli zero, 4, e8, mf4, ta, ma378; CHECK-NEXT: vslideup.vi v9, v8, 2379; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, ma380; CHECK-NEXT: vse8.v v9, (a2)381; CHECK-NEXT: ret382entry:383 %0 = load <8 x i8>, ptr %in0, align 1384 %1 = load <8 x i8>, ptr %in1, align 1385 %shuffle.i5 = shufflevector <8 x i8> %0, <8 x i8> %1, <8 x i32> <i32 0, i32 4, i32 8, i32 12, i32 poison, i32 poison, i32 poison, i32 poison>386 store <8 x i8> %shuffle.i5, ptr %out, align 1387 ret void388}389 390define void @deinterleave4_8_i8_two_source(ptr %in0, ptr %in1, ptr %out) {391; CHECK-LABEL: deinterleave4_8_i8_two_source:392; CHECK: # %bb.0: # %entry393; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, ma394; CHECK-NEXT: vle8.v v8, (a1)395; CHECK-NEXT: vle8.v v9, (a0)396; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, ma397; CHECK-NEXT: vnsrl.wi v8, v8, 8398; CHECK-NEXT: vnsrl.wi v9, v9, 8399; CHECK-NEXT: vsetvli zero, zero, e8, mf8, ta, ma400; CHECK-NEXT: vnsrl.wi v8, v8, 0401; CHECK-NEXT: vnsrl.wi v9, v9, 0402; CHECK-NEXT: vsetivli zero, 4, e8, mf4, ta, ma403; CHECK-NEXT: vslideup.vi v9, v8, 2404; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, ma405; CHECK-NEXT: vse8.v v9, (a2)406; CHECK-NEXT: ret407entry:408 %0 = load <8 x i8>, ptr %in0, align 1409 %1 = load <8 x i8>, ptr %in1, align 1410 %shuffle.i5 = shufflevector <8 x i8> %0, <8 x i8> %1, <8 x i32> <i32 1, i32 5, i32 9, i32 13, i32 poison, i32 poison, i32 poison, i32 poison>411 store <8 x i8> %shuffle.i5, ptr %out, align 1412 ret void413}414 415define void @deinterleave8_0_i8_two_source(ptr %in0, ptr %in1, ptr %out) {416; CHECK-LABEL: deinterleave8_0_i8_two_source:417; CHECK: # %bb.0: # %entry418; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, ma419; CHECK-NEXT: vle8.v v8, (a0)420; CHECK-NEXT: vsetivli zero, 2, e8, mf2, ta, ma421; CHECK-NEXT: vle8.v v9, (a1)422; CHECK-NEXT: vsetvli zero, zero, e8, mf2, tu, ma423; CHECK-NEXT: vslideup.vi v8, v9, 1424; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, ma425; CHECK-NEXT: vse8.v v8, (a2)426; CHECK-NEXT: ret427entry:428 %0 = load <8 x i8>, ptr %in0, align 1429 %1 = load <8 x i8>, ptr %in1, align 1430 %shuffle.i5 = shufflevector <8 x i8> %0, <8 x i8> %1, <8 x i32> <i32 0, i32 8, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>431 store <8 x i8> %shuffle.i5, ptr %out, align 1432 ret void433}434 435define void @deinterleave8_8_i8_two_source(ptr %in0, ptr %in1, ptr %out) {436; CHECK-LABEL: deinterleave8_8_i8_two_source:437; CHECK: # %bb.0: # %entry438; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, mu439; CHECK-NEXT: vle8.v v8, (a0)440; CHECK-NEXT: vle8.v v9, (a1)441; CHECK-NEXT: vmv.v.i v0, 1442; CHECK-NEXT: vslidedown.vi v9, v8, 1, v0.t443; CHECK-NEXT: vse8.v v9, (a2)444; CHECK-NEXT: ret445entry:446 %0 = load <8 x i8>, ptr %in0, align 1447 %1 = load <8 x i8>, ptr %in1, align 1448 %shuffle.i5 = shufflevector <8 x i8> %0, <8 x i8> %1, <8 x i32> <i32 1, i32 9, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>449 store <8 x i8> %shuffle.i5, ptr %out, align 1450 ret void451}452