Skip to content

Commit ed8a6d6

Browse files
committed
[RISCV] Add VLA shuffle coverage
Add coverage for a few cases which have come up in discussion of recent VLA shuffle lowering changes.
1 parent f154048 commit ed8a6d6

File tree

2 files changed

+90
-0
lines changed

2 files changed

+90
-0
lines changed

llvm/test/CodeGen/RISCV/rvv/fixed-vectors-int-shuffles.ll

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
}

llvm/test/CodeGen/RISCV/rvv/fixed-vectors-shuffle-reverse.ll

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1330,6 +1330,48 @@ define <16 x i32> @reverse_v16i32_exact_vlen_256(<16 x i32> %a) vscale_range(4,
13301330
%res = shufflevector <16 x i32> %a, <16 x i32> poison, <16 x i32> <i32 15, i32 14, i32 13, i32 12, i32 11, i32 10, i32 9, i32 8, i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0>
13311331
ret <16 x i32> %res
13321332
}
1333+
1334+
define <8 x i32> @reverse_v8i32_undef_suffix(<8 x i32> %a) {
1335+
; CHECK-LABEL: reverse_v8i32_undef_suffix:
1336+
; CHECK: # %bb.0:
1337+
; CHECK-NEXT: csrr a0, vlenb
1338+
; CHECK-NEXT: vsetvli a1, zero, e32, m1, ta, ma
1339+
; CHECK-NEXT: vid.v v10
1340+
; CHECK-NEXT: srli a1, a0, 2
1341+
; CHECK-NEXT: srli a0, a0, 1
1342+
; CHECK-NEXT: addi a1, a1, -1
1343+
; CHECK-NEXT: vrsub.vx v10, v10, a1
1344+
; CHECK-NEXT: vrgather.vv v13, v8, v10
1345+
; CHECK-NEXT: vrgather.vv v12, v9, v10
1346+
; CHECK-NEXT: addi a0, a0, -8
1347+
; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma
1348+
; CHECK-NEXT: vslidedown.vx v8, v12, a0
1349+
; CHECK-NEXT: ret
1350+
%res = shufflevector <8 x i32> %a, <8 x i32> poison, <8 x i32> <i32 7, i32 6, i32 5, i32 4, i32 undef, i32 undef, i32 undef, i32 undef>
1351+
ret <8 x i32> %res
1352+
}
1353+
1354+
define <8 x i32> @reverse_v8i32_undef_prefix(<8 x i32> %a) {
1355+
; CHECK-LABEL: reverse_v8i32_undef_prefix:
1356+
; CHECK: # %bb.0:
1357+
; CHECK-NEXT: csrr a0, vlenb
1358+
; CHECK-NEXT: vsetvli a1, zero, e32, m1, ta, ma
1359+
; CHECK-NEXT: vid.v v10
1360+
; CHECK-NEXT: srli a1, a0, 2
1361+
; CHECK-NEXT: srli a0, a0, 1
1362+
; CHECK-NEXT: addi a1, a1, -1
1363+
; CHECK-NEXT: vrsub.vx v10, v10, a1
1364+
; CHECK-NEXT: vrgather.vv v13, v8, v10
1365+
; CHECK-NEXT: vrgather.vv v12, v9, v10
1366+
; CHECK-NEXT: addi a0, a0, -8
1367+
; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma
1368+
; CHECK-NEXT: vslidedown.vx v8, v12, a0
1369+
; CHECK-NEXT: ret
1370+
%res = shufflevector <8 x i32> %a, <8 x i32> poison, <8 x i32> <i32 undef, i32 undef, i32 undef, i32 undef, i32 3, i32 2, i32 1, i32 0>
1371+
ret <8 x i32> %res
1372+
}
1373+
1374+
13331375
;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
13341376
; RV32: {{.*}}
13351377
; RV32-ZVBB: {{.*}}

0 commit comments

Comments
 (0)