@@ -1340,3 +1340,51 @@ define void @shuffle_i256_splat(ptr %p) nounwind {
13401340 ret void
13411341}
13421342
1343+ define <16 x i32 > @shuffle_m1_prefix (<16 x i32 > %a ) {
1344+ ; RV32-LABEL: shuffle_m1_prefix:
1345+ ; RV32: # %bb.0:
1346+ ; RV32-NEXT: lui a0, %hi(.LCPI84_0)
1347+ ; RV32-NEXT: addi a0, a0, %lo(.LCPI84_0)
1348+ ; RV32-NEXT: vsetivli zero, 16, e16, m2, ta, ma
1349+ ; RV32-NEXT: vle16.v v16, (a0)
1350+ ; RV32-NEXT: vsetvli a0, zero, e32, m1, ta, ma
1351+ ; RV32-NEXT: vrgatherei16.vv v13, v9, v16
1352+ ; RV32-NEXT: vrgatherei16.vv v12, v8, v16
1353+ ; RV32-NEXT: vrgatherei16.vv v14, v10, v16
1354+ ; RV32-NEXT: vrgatherei16.vv v15, v11, v16
1355+ ; RV32-NEXT: vmv4r.v v8, v12
1356+ ; RV32-NEXT: ret
1357+ ;
1358+ ; RV64-LABEL: shuffle_m1_prefix:
1359+ ; RV64: # %bb.0:
1360+ ; RV64-NEXT: lui a0, 131073
1361+ ; RV64-NEXT: slli a0, a0, 4
1362+ ; RV64-NEXT: addi a0, a0, 3
1363+ ; RV64-NEXT: slli a0, a0, 16
1364+ ; RV64-NEXT: addi a0, a0, 2
1365+ ; RV64-NEXT: vsetivli zero, 4, e64, m2, ta, ma
1366+ ; RV64-NEXT: vmv.v.x v16, a0
1367+ ; RV64-NEXT: vsetvli a0, zero, e32, m1, ta, ma
1368+ ; RV64-NEXT: vrgatherei16.vv v13, v9, v16
1369+ ; RV64-NEXT: vrgatherei16.vv v12, v8, v16
1370+ ; RV64-NEXT: vrgatherei16.vv v14, v10, v16
1371+ ; RV64-NEXT: vrgatherei16.vv v15, v11, v16
1372+ ; RV64-NEXT: vmv4r.v v8, v12
1373+ ; RV64-NEXT: ret
1374+ %out = shufflevector <16 x i32 > %a , <16 x i32 > poison, <16 x i32 > <i32 2 , i32 3 , i32 1 , i32 2 , i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>
1375+ ret <16 x i32 > %out
1376+ }
1377+
1378+ define <16 x i32 > @shuffle_m2_prefix (<16 x i32 > %a ) {
1379+ ; CHECK-LABEL: shuffle_m2_prefix:
1380+ ; CHECK: # %bb.0:
1381+ ; CHECK-NEXT: lui a0, %hi(.LCPI85_0)
1382+ ; CHECK-NEXT: addi a0, a0, %lo(.LCPI85_0)
1383+ ; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, ma
1384+ ; CHECK-NEXT: vle16.v v16, (a0)
1385+ ; CHECK-NEXT: vrgatherei16.vv v12, v8, v16
1386+ ; CHECK-NEXT: vmv.v.v v8, v12
1387+ ; CHECK-NEXT: ret
1388+ %out = shufflevector <16 x i32 > %a , <16 x i32 > poison, <16 x i32 > <i32 2 , i32 3 , i32 5 , i32 2 , i32 3 , i32 5 , i32 7 , i32 4 , i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>
1389+ ret <16 x i32 > %out
1390+ }
0 commit comments