brintos

brintos / llvm-project-archived public Read only

0
0
Text · 17.3 KiB · 63b96a9 Raw
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