Skip to content

Commit 097e96d

Browse files
committed
[LegalizeTypes] Use VP_AND for zext_inreg in PromoteIntRes_VPFunnelShift.
I may eventually add getVPZeroExtendInReg to SelectionDAG if there are other cases, but for now just hardcode it.
1 parent 0a15574 commit 097e96d

File tree

2 files changed

+6
-8
lines changed

2 files changed

+6
-8
lines changed

llvm/lib/CodeGen/SelectionDAG/LegalizeIntegerTypes.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1511,8 +1511,10 @@ SDValue DAGTypeLegalizer::PromoteIntRes_VPFunnelShift(SDNode *N) {
15111511
!TLI.isOperationLegalOrCustom(Opcode, VT)) {
15121512
SDValue HiShift = DAG.getConstant(OldBits, DL, VT);
15131513
Hi = DAG.getNode(ISD::VP_SHL, DL, VT, Hi, HiShift, Mask, EVL);
1514-
// FIXME: Replace it by vp operations.
1515-
Lo = DAG.getZeroExtendInReg(Lo, DL, OldVT);
1514+
APInt Imm = APInt::getLowBitsSet(VT.getScalarSizeInBits(),
1515+
OldVT.getScalarSizeInBits());
1516+
Lo = DAG.getNode(ISD::VP_AND, DL, VT, Lo, DAG.getConstant(Imm, DL, VT),
1517+
Mask, EVL);
15161518
SDValue Res = DAG.getNode(ISD::VP_OR, DL, VT, Hi, Lo, Mask, EVL);
15171519
Res = DAG.getNode(IsFSHR ? ISD::VP_LSHR : ISD::VP_SHL, DL, VT, Res, Amt,
15181520
Mask, EVL);

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

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1318,10 +1318,8 @@ define <vscale x 1 x i8> @fshr_v1i4(<vscale x 1 x i8> %a, <vscale x 1 x i8> %b,
13181318
; CHECK-NEXT: li a1, 4
13191319
; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma
13201320
; CHECK-NEXT: vremu.vx v10, v10, a1, v0.t
1321+
; CHECK-NEXT: vand.vi v9, v9, 15, v0.t
13211322
; CHECK-NEXT: vsll.vi v8, v8, 4, v0.t
1322-
; CHECK-NEXT: vsetvli a1, zero, e8, mf8, ta, ma
1323-
; CHECK-NEXT: vand.vi v9, v9, 15
1324-
; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma
13251323
; CHECK-NEXT: vor.vv v8, v8, v9, v0.t
13261324
; CHECK-NEXT: vsrl.vv v8, v8, v10, v0.t
13271325
; CHECK-NEXT: vand.vi v8, v8, 15, v0.t
@@ -1343,10 +1341,8 @@ define <vscale x 1 x i8> @fshl_v1i4(<vscale x 1 x i8> %a, <vscale x 1 x i8> %b,
13431341
; CHECK-NEXT: li a1, 4
13441342
; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma
13451343
; CHECK-NEXT: vremu.vx v10, v10, a1, v0.t
1344+
; CHECK-NEXT: vand.vi v9, v9, 15, v0.t
13461345
; CHECK-NEXT: vsll.vi v8, v8, 4, v0.t
1347-
; CHECK-NEXT: vsetvli a1, zero, e8, mf8, ta, ma
1348-
; CHECK-NEXT: vand.vi v9, v9, 15
1349-
; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma
13501346
; CHECK-NEXT: vor.vv v8, v8, v9, v0.t
13511347
; CHECK-NEXT: vsll.vv v8, v8, v10, v0.t
13521348
; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t

0 commit comments

Comments
 (0)