@@ -369,3 +369,96 @@ entry:
369
369
store <2 x i8 > %shuffle.i5 , ptr %out , align 1
370
370
ret void
371
371
}
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