@@ -96,24 +96,25 @@ define void @deinterleave4_8_i8(ptr %in, ptr %out) {
9696; CHECK: # %bb.0: # %entry
9797; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma
9898; CHECK-NEXT: vle8.v v8, (a0)
99- ; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, ma
100- ; CHECK-NEXT: vmv.v.i v9, -9
101- ; CHECK-NEXT: vid.v v10
102- ; CHECK-NEXT: li a0, 5
103- ; CHECK-NEXT: vmadd.vx v10, a0, v9
99+ ; CHECK-NEXT: li a0, -1
100+ ; CHECK-NEXT: vsetivli zero, 8, e8, m1, ta, ma
101+ ; CHECK-NEXT: vslidedown.vi v9, v8, 8
102+ ; CHECK-NEXT: vsetivli zero, 4, e8, mf2, ta, ma
103+ ; CHECK-NEXT: vslidedown.vi v10, v9, 4
104+ ; CHECK-NEXT: vsetivli zero, 4, e8, mf4, ta, ma
105+ ; CHECK-NEXT: vwaddu.vv v11, v9, v10
106+ ; CHECK-NEXT: vwmaccu.vx v11, a0, v10
104107; CHECK-NEXT: li a0, 34
105108; CHECK-NEXT: vmv.v.i v0, 12
106109; CHECK-NEXT: vmv.s.x v9, a0
107- ; CHECK-NEXT: vcompress.vm v11, v8, v9
108- ; CHECK-NEXT: vsetivli zero, 8, e8, m1, ta, ma
109- ; CHECK-NEXT: vslidedown.vi v8, v8, 8
110- ; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, mu
111- ; CHECK-NEXT: vrgather.vv v11, v8, v10, v0.t
112- ; CHECK-NEXT: vse8.v v11, (a1)
110+ ; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, ma
111+ ; CHECK-NEXT: vcompress.vm v10, v8, v9
112+ ; CHECK-NEXT: vmerge.vvm v8, v10, v11, v0
113+ ; CHECK-NEXT: vse8.v v8, (a1)
113114; CHECK-NEXT: ret
114115entry:
115116 %0 = load <16 x i8 >, ptr %in , align 1
116- %shuffle.i5 = shufflevector <16 x i8 > %0 , <16 x i8 > poison, <8 x i32 > <i32 1 , i32 5 , i32 9 , i32 14 , i32 undef , i32 undef , i32 undef , i32 undef >
117+ %shuffle.i5 = shufflevector <16 x i8 > %0 , <16 x i8 > poison, <8 x i32 > <i32 1 , i32 5 , i32 9 , i32 13 , i32 undef , i32 undef , i32 undef , i32 undef >
117118 store <8 x i8 > %shuffle.i5 , ptr %out , align 1
118119 ret void
119120}
0 commit comments