@@ -369,3 +369,89 @@ 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, (a1)
378+ ; CHECK-NEXT: vle8.v v9, (a0)
379+ ; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, ma
380+ ; CHECK-NEXT: vnsrl.wi v8, v8, 0
381+ ; CHECK-NEXT: vnsrl.wi v9, v9, 0
382+ ; CHECK-NEXT: vsetvli zero, zero, e8, mf8, ta, ma
383+ ; CHECK-NEXT: vnsrl.wi v8, v8, 0
384+ ; CHECK-NEXT: vnsrl.wi v9, v9, 0
385+ ; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, ma
386+ ; CHECK-NEXT: vslideup.vi v9, v8, 4
387+ ; CHECK-NEXT: vse8.v v9, (a2)
388+ ; CHECK-NEXT: ret
389+ entry:
390+ %0 = load <8 x i8 >, ptr %in0 , align 1
391+ %1 = load <8 x i8 >, ptr %in1 , align 1
392+ %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 >
393+ store <8 x i8 > %shuffle.i5 , ptr %out , align 1
394+ ret void
395+ }
396+
397+ define void @deinterleave4_8_i8_two_source (ptr %in0 , ptr %in1 , ptr %out ) {
398+ ; CHECK-LABEL: deinterleave4_8_i8_two_source:
399+ ; CHECK: # %bb.0: # %entry
400+ ; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, ma
401+ ; CHECK-NEXT: vle8.v v8, (a1)
402+ ; CHECK-NEXT: vle8.v v9, (a0)
403+ ; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, ma
404+ ; CHECK-NEXT: vnsrl.wi v8, v8, 8
405+ ; CHECK-NEXT: vnsrl.wi v9, v9, 8
406+ ; CHECK-NEXT: vsetvli zero, zero, e8, mf8, ta, ma
407+ ; CHECK-NEXT: vnsrl.wi v8, v8, 0
408+ ; CHECK-NEXT: vnsrl.wi v9, v9, 0
409+ ; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, ma
410+ ; CHECK-NEXT: vslideup.vi v9, v8, 4
411+ ; CHECK-NEXT: vse8.v v9, (a2)
412+ ; CHECK-NEXT: ret
413+ entry:
414+ %0 = load <8 x i8 >, ptr %in0 , align 1
415+ %1 = load <8 x i8 >, ptr %in1 , align 1
416+ %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 >
417+ store <8 x i8 > %shuffle.i5 , ptr %out , align 1
418+ ret void
419+ }
420+
421+ define void @deinterleave8_0_i8_two_source (ptr %in0 , ptr %in1 , ptr %out ) {
422+ ; CHECK-LABEL: deinterleave8_0_i8_two_source:
423+ ; CHECK: # %bb.0: # %entry
424+ ; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, ma
425+ ; CHECK-NEXT: vle8.v v8, (a0)
426+ ; CHECK-NEXT: vsetivli zero, 2, e8, mf2, ta, ma
427+ ; CHECK-NEXT: vle8.v v9, (a1)
428+ ; CHECK-NEXT: vsetvli zero, zero, e8, mf2, tu, ma
429+ ; CHECK-NEXT: vslideup.vi v8, v9, 1
430+ ; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, ma
431+ ; CHECK-NEXT: vse8.v v8, (a2)
432+ ; CHECK-NEXT: ret
433+ entry:
434+ %0 = load <8 x i8 >, ptr %in0 , align 1
435+ %1 = load <8 x i8 >, ptr %in1 , align 1
436+ %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 >
437+ store <8 x i8 > %shuffle.i5 , ptr %out , align 1
438+ ret void
439+ }
440+
441+ define void @deinterleave8_8_i8_two_source (ptr %in0 , ptr %in1 , ptr %out ) {
442+ ; CHECK-LABEL: deinterleave8_8_i8_two_source:
443+ ; CHECK: # %bb.0: # %entry
444+ ; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, mu
445+ ; CHECK-NEXT: vle8.v v8, (a0)
446+ ; CHECK-NEXT: vle8.v v9, (a1)
447+ ; CHECK-NEXT: vmv.v.i v0, -3
448+ ; CHECK-NEXT: vrgather.vi v9, v8, 1, v0.t
449+ ; CHECK-NEXT: vse8.v v9, (a2)
450+ ; CHECK-NEXT: ret
451+ entry:
452+ %0 = load <8 x i8 >, ptr %in0 , align 1
453+ %1 = load <8 x i8 >, ptr %in1 , align 1
454+ %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 >
455+ store <8 x i8 > %shuffle.i5 , ptr %out , align 1
456+ ret void
457+ }
0 commit comments