Skip to content

Commit e417e61

Browse files
committed
[RISCV][LegalizeTypes] Add additional test coverage for type promotion of VP_FSHL/FSHR. NFC
There's a special path when the promoted type has an element size more than twice the size of the original type.
1 parent 3ca428c commit e417e61

File tree

1 file changed

+53
-0
lines changed

1 file changed

+53
-0
lines changed

llvm/test/CodeGen/RISCV/rvv/fshr-fshl-vp.ll

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1370,3 +1370,56 @@ define <vscale x 1 x i9> @fshl_v1i9(<vscale x 1 x i9> %a, <vscale x 1 x i9> %b,
13701370
%res = call <vscale x 1 x i9> @llvm.vp.fshl.nxv1i9(<vscale x 1 x i9> %a, <vscale x 1 x i9> %b, <vscale x 1 x i9> %c, <vscale x 1 x i1> %m, i32 %evl)
13711371
ret <vscale x 1 x i9> %res
13721372
}
1373+
1374+
declare <vscale x 1 x i4> @llvm.vp.trunc.nxv1i4.nxv1i8(<vscale x 1 x i8>, <vscale x 1 x i1>, i32)
1375+
declare <vscale x 1 x i8> @llvm.vp.zext.nxv1i8.nxv1i4(<vscale x 1 x i4>, <vscale x 1 x i1>, i32)
1376+
declare <vscale x 1 x i4> @llvm.vp.fshr.nxv1i4(<vscale x 1 x i4>, <vscale x 1 x i4>, <vscale x 1 x i4>, <vscale x 1 x i1>, i32)
1377+
define <vscale x 1 x i8> @fshr_v1i4(<vscale x 1 x i8> %a, <vscale x 1 x i8> %b, <vscale x 1 x i8> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {
1378+
; CHECK-LABEL: fshr_v1i4:
1379+
; CHECK: # %bb.0:
1380+
; CHECK-NEXT: vsetvli a1, zero, e8, mf8, ta, ma
1381+
; CHECK-NEXT: vand.vi v10, v10, 15
1382+
; CHECK-NEXT: li a1, 4
1383+
; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma
1384+
; CHECK-NEXT: vremu.vx v10, v10, a1, v0.t
1385+
; CHECK-NEXT: vsll.vi v8, v8, 4, v0.t
1386+
; CHECK-NEXT: vsetvli a1, zero, e8, mf8, ta, ma
1387+
; CHECK-NEXT: vand.vi v9, v9, 15
1388+
; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma
1389+
; CHECK-NEXT: vor.vv v8, v8, v9, v0.t
1390+
; CHECK-NEXT: vsrl.vv v8, v8, v10, v0.t
1391+
; CHECK-NEXT: vand.vi v8, v8, 15, v0.t
1392+
; CHECK-NEXT: ret
1393+
%trunca = call <vscale x 1 x i4> @llvm.vp.trunc.nxv1i4.nxv1i8(<vscale x 1 x i8> %a, <vscale x 1 x i1> %m, i32 zeroext %evl)
1394+
%truncb = call <vscale x 1 x i4> @llvm.vp.trunc.nxv1i4.nxv1i8(<vscale x 1 x i8> %b, <vscale x 1 x i1> %m, i32 zeroext %evl)
1395+
%truncc = call <vscale x 1 x i4> @llvm.vp.trunc.nxv1i4.nxv1i8(<vscale x 1 x i8> %c, <vscale x 1 x i1> %m, i32 zeroext %evl)
1396+
%fshr = call <vscale x 1 x i4> @llvm.vp.fshr.nxv1i4(<vscale x 1 x i4> %trunca, <vscale x 1 x i4> %truncb, <vscale x 1 x i4> %truncc, <vscale x 1 x i1> %m, i32 %evl)
1397+
%res = call <vscale x 1 x i8> @llvm.vp.zext.nxv1i8.nxv1i4(<vscale x 1 x i4> %fshr, <vscale x 1 x i1> %m, i32 zeroext %evl)
1398+
ret <vscale x 1 x i8> %res
1399+
}
1400+
1401+
declare <vscale x 1 x i4> @llvm.vp.fshl.nxv1i4(<vscale x 1 x i4>, <vscale x 1 x i4>, <vscale x 1 x i4>, <vscale x 1 x i1>, i32)
1402+
define <vscale x 1 x i8> @fshl_v1i4(<vscale x 1 x i8> %a, <vscale x 1 x i8> %b, <vscale x 1 x i8> %c, <vscale x 1 x i1> %m, i32 zeroext %evl) {
1403+
; CHECK-LABEL: fshl_v1i4:
1404+
; CHECK: # %bb.0:
1405+
; CHECK-NEXT: vsetvli a1, zero, e8, mf8, ta, ma
1406+
; CHECK-NEXT: vand.vi v10, v10, 15
1407+
; CHECK-NEXT: li a1, 4
1408+
; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma
1409+
; CHECK-NEXT: vremu.vx v10, v10, a1, v0.t
1410+
; CHECK-NEXT: vsll.vi v8, v8, 4, v0.t
1411+
; CHECK-NEXT: vsetvli a1, zero, e8, mf8, ta, ma
1412+
; CHECK-NEXT: vand.vi v9, v9, 15
1413+
; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma
1414+
; CHECK-NEXT: vor.vv v8, v8, v9, v0.t
1415+
; CHECK-NEXT: vsll.vv v8, v8, v10, v0.t
1416+
; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t
1417+
; CHECK-NEXT: vand.vi v8, v8, 15, v0.t
1418+
; CHECK-NEXT: ret
1419+
%trunca = call <vscale x 1 x i4> @llvm.vp.trunc.nxv1i4.nxv1i8(<vscale x 1 x i8> %a, <vscale x 1 x i1> %m, i32 zeroext %evl)
1420+
%truncb = call <vscale x 1 x i4> @llvm.vp.trunc.nxv1i4.nxv1i8(<vscale x 1 x i8> %b, <vscale x 1 x i1> %m, i32 zeroext %evl)
1421+
%truncc = call <vscale x 1 x i4> @llvm.vp.trunc.nxv1i4.nxv1i8(<vscale x 1 x i8> %c, <vscale x 1 x i1> %m, i32 zeroext %evl)
1422+
%fshl = call <vscale x 1 x i4> @llvm.vp.fshl.nxv1i4(<vscale x 1 x i4> %trunca, <vscale x 1 x i4> %truncb, <vscale x 1 x i4> %truncc, <vscale x 1 x i1> %m, i32 %evl)
1423+
%res = call <vscale x 1 x i8> @llvm.vp.zext.nxv1i8.nxv1i4(<vscale x 1 x i4> %fshl, <vscale x 1 x i1> %m, i32 zeroext %evl)
1424+
ret <vscale x 1 x i8> %res
1425+
}

0 commit comments

Comments
 (0)