Skip to content

Commit d2e7f2f

Browse files
committed
Address review comments
1 parent 9a5d7c2 commit d2e7f2f

File tree

1 file changed

+33
-25
lines changed

1 file changed

+33
-25
lines changed

llvm/lib/Target/RISCV/RISCVISelLowering.cpp

Lines changed: 33 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -20831,42 +20831,50 @@ SDValue RISCVTargetLowering::PerformDAGCombine(SDNode *N,
2083120831

2083220832
unsigned NF = 0;
2083320833
switch (Tuple.getConstantOperandVal(1)) {
20834-
default: break;
20835-
case Intrinsic::riscv_vlseg2_mask: NF = 2; break;
20836-
case Intrinsic::riscv_vlseg3_mask: NF = 3; break;
20837-
case Intrinsic::riscv_vlseg4_mask: NF = 4; break;
20838-
case Intrinsic::riscv_vlseg5_mask: NF = 5; break;
20839-
case Intrinsic::riscv_vlseg6_mask: NF = 6; break;
20840-
case Intrinsic::riscv_vlseg7_mask: NF = 7; break;
20841-
case Intrinsic::riscv_vlseg8_mask: NF = 8; break;
20834+
default:
20835+
break;
20836+
case Intrinsic::riscv_vlseg2_mask:
20837+
case Intrinsic::riscv_vlseg3_mask:
20838+
case Intrinsic::riscv_vlseg4_mask:
20839+
case Intrinsic::riscv_vlseg5_mask:
20840+
case Intrinsic::riscv_vlseg6_mask:
20841+
case Intrinsic::riscv_vlseg7_mask:
20842+
case Intrinsic::riscv_vlseg8_mask:
20843+
NF = Tuple.getValueType().getRISCVVectorTupleNumFields();
20844+
break;
2084220845
}
20846+
2084320847
if (!NF || Subtarget.hasOptimizedSegmentLoadStore(NF))
2084420848
break;
2084520849

20846-
// @REVIEWERS - What's the right value to use for the mem size here?
2084720850
unsigned SEW = VT.getScalarSizeInBits();
2084820851
if (Log2_64(SEW) != Tuple.getConstantOperandVal(7))
2084920852
break;
20850-
unsigned Stride = SEW/8 * NF;
20851-
SDValue Offset = DAG.getConstant(SEW/8 * Idx, DL, XLenVT);
20853+
unsigned Stride = SEW / 8 * NF;
20854+
unsigned Offset = SEW / 8 * Idx;
2085220855

2085320856
SDValue Ops[] = {
20854-
/*Chain=*/Tuple.getOperand(0),
20855-
/*IntID=*/DAG.getTargetConstant(Intrinsic::riscv_vlse_mask, DL, XLenVT),
20856-
/*Passthru=*/Tuple.getOperand(2),
20857-
/*Ptr=*/DAG.getNode(ISD::ADD, DL, XLenVT, Tuple.getOperand(3), Offset),
20858-
/*Stride=*/DAG.getConstant(Stride, DL, XLenVT),
20859-
/*Mask=*/Tuple.getOperand(4),
20860-
/*VL=*/Tuple.getOperand(5),
20861-
/*Policy=*/Tuple.getOperand(6)
20862-
};
20857+
/*Chain=*/Tuple.getOperand(0),
20858+
/*IntID=*/DAG.getTargetConstant(Intrinsic::riscv_vlse_mask, DL, XLenVT),
20859+
/*Passthru=*/Tuple.getOperand(2),
20860+
/*Ptr=*/
20861+
DAG.getNode(ISD::ADD, DL, XLenVT, Tuple.getOperand(3),
20862+
DAG.getConstant(Offset, DL, XLenVT)),
20863+
/*Stride=*/DAG.getConstant(Stride, DL, XLenVT),
20864+
/*Mask=*/Tuple.getOperand(4),
20865+
/*VL=*/Tuple.getOperand(5),
20866+
/*Policy=*/Tuple.getOperand(6)};
20867+
20868+
auto TupleMemSD = cast<MemIntrinsicSDNode>(Tuple);
20869+
// Match getTgtMemIntrinsic for non-unit stride case
20870+
EVT MemVT = TupleMemSD->getMemoryVT().getScalarType();
20871+
MachineFunction &MF = DAG.getMachineFunction();
20872+
MachineMemOperand *MMO = MF.getMachineMemOperand(
20873+
TupleMemSD->getMemOperand(), Offset, MemoryLocation::UnknownSize);
2086320874

2086420875
SDVTList VTs = DAG.getVTList({VT, MVT::Other});
20865-
// @REVIEWERS - What's the right MemVT and MMO to use here?
20866-
SDValue Result =
20867-
DAG.getMemIntrinsicNode(ISD::INTRINSIC_W_CHAIN, DL, VTs, Ops,
20868-
cast<MemIntrinsicSDNode>(Tuple)->getMemoryVT(),
20869-
cast<MemIntrinsicSDNode>(Tuple)->getMemOperand());
20876+
SDValue Result = DAG.getMemIntrinsicNode(ISD::INTRINSIC_W_CHAIN, DL, VTs,
20877+
Ops, MemVT, MMO);
2087020878
DAG.ReplaceAllUsesOfValueWith(Tuple.getValue(1), Result.getValue(1));
2087120879
return Result.getValue(0);
2087220880
}

0 commit comments

Comments
 (0)