@@ -1415,3 +1415,67 @@ define <8 x i32> @shuffle_v8i32_locally_repeating_neg(<8 x i32> %a) {
14151415 %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 >
14161416 ret <8 x i32 > %res
14171417}
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