@@ -1340,3 +1340,51 @@ define void @shuffle_i256_splat(ptr %p) nounwind {
1340
1340
ret void
1341
1341
}
1342
1342
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