@@ -1415,3 +1415,67 @@ define <8 x i32> @shuffle_v8i32_locally_repeating_neg(<8 x i32> %a) {
1415
1415
%res = shufflevector <8 x i32 > %a , <8 x i32 > poison, <8 x i32 > <i32 1 , i32 0 , i32 poison, i32 poison, i32 5 , i32 4 , i32 6 , i32 6 >
1416
1416
ret <8 x i32 > %res
1417
1417
}
1418
+
1419
+ define <8 x i8 > @identity_splat0 (<8 x i8 > %v ) {
1420
+ ; CHECK-LABEL: identity_splat0:
1421
+ ; CHECK: # %bb.0:
1422
+ ; CHECK-NEXT: lui a0, %hi(.LCPI88_0)
1423
+ ; CHECK-NEXT: addi a0, a0, %lo(.LCPI88_0)
1424
+ ; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, ma
1425
+ ; CHECK-NEXT: vle8.v v10, (a0)
1426
+ ; CHECK-NEXT: vrgather.vv v9, v8, v10
1427
+ ; CHECK-NEXT: vmv1r.v v8, v9
1428
+ ; CHECK-NEXT: ret
1429
+ %shuf = shufflevector <8 x i8 > %v , <8 x i8 > poison, <8 x i32 > <i32 0 , i32 1 , i32 2 , i32 0 , i32 0 , i32 5 , i32 6 , i32 7 >
1430
+ ret <8 x i8 > %shuf
1431
+ }
1432
+
1433
+ define <8 x i8 > @identity_splat2 (<8 x i8 > %v ) {
1434
+ ; CHECK-LABEL: identity_splat2:
1435
+ ; CHECK: # %bb.0:
1436
+ ; CHECK-NEXT: lui a0, %hi(.LCPI89_0)
1437
+ ; CHECK-NEXT: addi a0, a0, %lo(.LCPI89_0)
1438
+ ; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, ma
1439
+ ; CHECK-NEXT: vle8.v v10, (a0)
1440
+ ; CHECK-NEXT: vrgather.vv v9, v8, v10
1441
+ ; CHECK-NEXT: vmv1r.v v8, v9
1442
+ ; CHECK-NEXT: ret
1443
+ %shuf = shufflevector <8 x i8 > %v , <8 x i8 > poison, <8 x i32 > <i32 0 , i32 1 , i32 2 , i32 2 , i32 2 , i32 5 , i32 6 , i32 7 >
1444
+ ret <8 x i8 > %shuf
1445
+ }
1446
+
1447
+
1448
+ define <8 x i8 > @vmerge_vxm (<8 x i8 > %v , i8 %s ) {
1449
+ ; CHECK-LABEL: vmerge_vxm:
1450
+ ; CHECK: # %bb.0:
1451
+ ; CHECK-NEXT: lui a1, %hi(.LCPI90_0)
1452
+ ; CHECK-NEXT: addi a1, a1, %lo(.LCPI90_0)
1453
+ ; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, ma
1454
+ ; CHECK-NEXT: vle8.v v10, (a1)
1455
+ ; CHECK-NEXT: vsetvli zero, zero, e8, mf2, tu, ma
1456
+ ; CHECK-NEXT: vmv.s.x v8, a0
1457
+ ; CHECK-NEXT: vsetvli zero, zero, e8, mf2, ta, ma
1458
+ ; CHECK-NEXT: vrgather.vv v9, v8, v10
1459
+ ; CHECK-NEXT: vmv1r.v v8, v9
1460
+ ; CHECK-NEXT: ret
1461
+ %ins = insertelement <8 x i8 > %v , i8 %s , i32 0
1462
+ %shuf = shufflevector <8 x i8 > %ins , <8 x i8 > poison, <8 x i32 > <i32 0 , i32 1 , i32 2 , i32 0 , i32 0 , i32 5 , i32 6 , i32 7 >
1463
+ ret <8 x i8 > %shuf
1464
+ }
1465
+
1466
+ define <8 x i8 > @vmerge_vxm2 (<8 x i8 > %v , i8 %s ) {
1467
+ ; CHECK-LABEL: vmerge_vxm2:
1468
+ ; CHECK: # %bb.0:
1469
+ ; CHECK-NEXT: li a1, 25
1470
+ ; CHECK-NEXT: vsetivli zero, 1, e8, m1, tu, ma
1471
+ ; CHECK-NEXT: vmv.s.x v0, a1
1472
+ ; CHECK-NEXT: vmv1r.v v9, v8
1473
+ ; CHECK-NEXT: vmv.s.x v9, a0
1474
+ ; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, mu
1475
+ ; CHECK-NEXT: vrgather.vi v8, v9, 0, v0.t
1476
+ ; CHECK-NEXT: ret
1477
+ %ins = insertelement <8 x i8 > %v , i8 %s , i32 0
1478
+ %shuf = shufflevector <8 x i8 > %v , <8 x i8 > %ins , <8 x i32 > <i32 8 , i32 1 , i32 2 , i32 8 , i32 8 , i32 5 , i32 6 , i32 7 >
1479
+ ret <8 x i8 > %shuf
1480
+ }
1481
+
0 commit comments