@@ -369,3 +369,96 @@ entry:
369369 store <2 x i8 > %shuffle.i5 , ptr %out , align 1
370370 ret void
371371}
372+
373+ define void @deinterleave4_0_i8_two_source (ptr %in0 , ptr %in1 , ptr %out ) {
374+ ; CHECK-LABEL: deinterleave4_0_i8_two_source:
375+ ; CHECK: # %bb.0: # %entry
376+ ; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, ma
377+ ; CHECK-NEXT: vle8.v v8, (a0)
378+ ; CHECK-NEXT: vle8.v v9, (a1)
379+ ; CHECK-NEXT: vmv.v.i v0, 12
380+ ; CHECK-NEXT: vid.v v10
381+ ; CHECK-NEXT: vsll.vi v10, v10, 2
382+ ; CHECK-NEXT: vadd.vi v10, v10, -8
383+ ; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, ma
384+ ; CHECK-NEXT: vnsrl.wi v8, v8, 0
385+ ; CHECK-NEXT: vsetvli zero, zero, e8, mf8, ta, ma
386+ ; CHECK-NEXT: vnsrl.wi v8, v8, 0
387+ ; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, mu
388+ ; CHECK-NEXT: vrgather.vv v8, v9, v10, v0.t
389+ ; CHECK-NEXT: vse8.v v8, (a2)
390+ ; CHECK-NEXT: ret
391+ entry:
392+ %0 = load <8 x i8 >, ptr %in0 , align 1
393+ %1 = load <8 x i8 >, ptr %in1 , align 1
394+ %shuffle.i5 = shufflevector <8 x i8 > %0 , <8 x i8 > %1 , <8 x i32 > <i32 0 , i32 4 , i32 8 , i32 12 , i32 undef , i32 undef , i32 undef , i32 undef >
395+ store <8 x i8 > %shuffle.i5 , ptr %out , align 1
396+ ret void
397+ }
398+
399+ define void @deinterleave4_8_i8_two_source (ptr %in0 , ptr %in1 , ptr %out ) {
400+ ; CHECK-LABEL: deinterleave4_8_i8_two_source:
401+ ; CHECK: # %bb.0: # %entry
402+ ; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, ma
403+ ; CHECK-NEXT: vle8.v v8, (a1)
404+ ; CHECK-NEXT: vle8.v v9, (a0)
405+ ; CHECK-NEXT: li a0, -1
406+ ; CHECK-NEXT: vsetivli zero, 4, e8, mf2, ta, ma
407+ ; CHECK-NEXT: vslidedown.vi v10, v8, 4
408+ ; CHECK-NEXT: vsetivli zero, 4, e8, mf4, ta, ma
409+ ; CHECK-NEXT: vwaddu.vv v11, v8, v10
410+ ; CHECK-NEXT: vwmaccu.vx v11, a0, v10
411+ ; CHECK-NEXT: vmv.v.i v0, 12
412+ ; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, ma
413+ ; CHECK-NEXT: vnsrl.wi v8, v9, 8
414+ ; CHECK-NEXT: vsetvli zero, zero, e8, mf8, ta, ma
415+ ; CHECK-NEXT: vnsrl.wi v8, v8, 0
416+ ; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, ma
417+ ; CHECK-NEXT: vmerge.vvm v8, v8, v11, v0
418+ ; CHECK-NEXT: vse8.v v8, (a2)
419+ ; CHECK-NEXT: ret
420+ entry:
421+ %0 = load <8 x i8 >, ptr %in0 , align 1
422+ %1 = load <8 x i8 >, ptr %in1 , align 1
423+ %shuffle.i5 = shufflevector <8 x i8 > %0 , <8 x i8 > %1 , <8 x i32 > <i32 1 , i32 5 , i32 9 , i32 13 , i32 undef , i32 undef , i32 undef , i32 undef >
424+ store <8 x i8 > %shuffle.i5 , ptr %out , align 1
425+ ret void
426+ }
427+
428+ define void @deinterleave8_0_i8_two_source (ptr %in0 , ptr %in1 , ptr %out ) {
429+ ; CHECK-LABEL: deinterleave8_0_i8_two_source:
430+ ; CHECK: # %bb.0: # %entry
431+ ; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, ma
432+ ; CHECK-NEXT: vle8.v v8, (a0)
433+ ; CHECK-NEXT: vsetivli zero, 2, e8, mf2, ta, ma
434+ ; CHECK-NEXT: vle8.v v9, (a1)
435+ ; CHECK-NEXT: vsetvli zero, zero, e8, mf2, tu, ma
436+ ; CHECK-NEXT: vslideup.vi v8, v9, 1
437+ ; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, ma
438+ ; CHECK-NEXT: vse8.v v8, (a2)
439+ ; CHECK-NEXT: ret
440+ entry:
441+ %0 = load <8 x i8 >, ptr %in0 , align 1
442+ %1 = load <8 x i8 >, ptr %in1 , align 1
443+ %shuffle.i5 = shufflevector <8 x i8 > %0 , <8 x i8 > %1 , <8 x i32 > <i32 0 , i32 8 , i32 undef , i32 undef , i32 undef , i32 undef , i32 undef , i32 undef >
444+ store <8 x i8 > %shuffle.i5 , ptr %out , align 1
445+ ret void
446+ }
447+
448+ define void @deinterleave8_8_i8_two_source (ptr %in0 , ptr %in1 , ptr %out ) {
449+ ; CHECK-LABEL: deinterleave8_8_i8_two_source:
450+ ; CHECK: # %bb.0: # %entry
451+ ; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, mu
452+ ; CHECK-NEXT: vle8.v v8, (a0)
453+ ; CHECK-NEXT: vle8.v v9, (a1)
454+ ; CHECK-NEXT: vmv.v.i v0, -3
455+ ; CHECK-NEXT: vrgather.vi v9, v8, 1, v0.t
456+ ; CHECK-NEXT: vse8.v v9, (a2)
457+ ; CHECK-NEXT: ret
458+ entry:
459+ %0 = load <8 x i8 >, ptr %in0 , align 1
460+ %1 = load <8 x i8 >, ptr %in1 , align 1
461+ %shuffle.i5 = shufflevector <8 x i8 > %0 , <8 x i8 > %1 , <8 x i32 > <i32 1 , i32 9 , i32 undef , i32 undef , i32 undef , i32 undef , i32 undef , i32 undef >
462+ store <8 x i8 > %shuffle.i5 , ptr %out , align 1
463+ ret void
464+ }
0 commit comments