@@ -369,3 +369,89 @@ 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, (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