Skip to content

Commit f50d787

Browse files
committed
[RISCV] Add fixed vector deinterleave tests with 2 sources. NFC
1 parent f75126e commit f50d787

File tree

2 files changed

+550
-0
lines changed

2 files changed

+550
-0
lines changed

llvm/test/CodeGen/RISCV/rvv/fixed-vectors-shuffle-deinterleave.ll

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)