Skip to content

Commit 50b82ef

Browse files
authored
[RISCV] Use DAG.getElementCount in lowerEXTRACT_SUBVECTOR. NFCI (#81698)
Following up on the review comment in #79949 (comment)
1 parent 2ed0aac commit 50b82ef

File tree

1 file changed

+12
-13
lines changed

1 file changed

+12
-13
lines changed

llvm/lib/Target/RISCV/RISCVISelLowering.cpp

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -9820,27 +9820,32 @@ SDValue RISCVTargetLowering::lowerEXTRACT_SUBVECTOR(SDValue Op,
98209820
if (SubVecVT.isFixedLengthVector())
98219821
ContainerSubVecVT = getContainerForFixedLengthVector(SubVecVT);
98229822

9823-
unsigned SubRegIdx, RemIdx;
9824-
// extract_subvector scales the index by vscale is the subvector is scalable,
9823+
unsigned SubRegIdx;
9824+
ElementCount RemIdx;
9825+
// extract_subvector scales the index by vscale if the subvector is scalable,
98259826
// and decomposeSubvectorInsertExtractToSubRegs takes this into account. So if
98269827
// we have a fixed length subvector, we need to adjust the index by 1/vscale.
98279828
if (SubVecVT.isFixedLengthVector()) {
98289829
assert(MinVLen == MaxVLen);
98299830
unsigned Vscale = MinVLen / RISCV::RVVBitsPerBlock;
9830-
std::tie(SubRegIdx, RemIdx) =
9831+
auto Decompose =
98319832
RISCVTargetLowering::decomposeSubvectorInsertExtractToSubRegs(
98329833
VecVT, ContainerSubVecVT, OrigIdx / Vscale, TRI);
9833-
RemIdx = (RemIdx * Vscale) + (OrigIdx % Vscale);
9834+
SubRegIdx = Decompose.first;
9835+
RemIdx = ElementCount::getFixed((Decompose.second * Vscale) +
9836+
(OrigIdx % Vscale));
98349837
} else {
9835-
std::tie(SubRegIdx, RemIdx) =
9838+
auto Decompose =
98369839
RISCVTargetLowering::decomposeSubvectorInsertExtractToSubRegs(
98379840
VecVT, ContainerSubVecVT, OrigIdx, TRI);
9841+
SubRegIdx = Decompose.first;
9842+
RemIdx = ElementCount::getScalable(Decompose.second);
98389843
}
98399844

98409845
// If the Idx has been completely eliminated then this is a subvector extract
98419846
// which naturally aligns to a vector register. These can easily be handled
98429847
// using subregister manipulation.
9843-
if (RemIdx == 0) {
9848+
if (RemIdx.isZero()) {
98449849
if (SubVecVT.isFixedLengthVector()) {
98459850
Vec = DAG.getTargetExtractSubreg(SubRegIdx, DL, ContainerSubVecVT, Vec);
98469851
return convertFromScalableVector(SubVecVT, Vec, DAG, Subtarget);
@@ -9867,13 +9872,7 @@ SDValue RISCVTargetLowering::lowerEXTRACT_SUBVECTOR(SDValue Op,
98679872

98689873
// Slide this vector register down by the desired number of elements in order
98699874
// to place the desired subvector starting at element 0.
9870-
SDValue SlidedownAmt;
9871-
if (SubVecVT.isFixedLengthVector())
9872-
SlidedownAmt = DAG.getConstant(RemIdx, DL, Subtarget.getXLenVT());
9873-
else
9874-
SlidedownAmt =
9875-
DAG.getVScale(DL, XLenVT, APInt(XLenVT.getSizeInBits(), RemIdx));
9876-
9875+
SDValue SlidedownAmt = DAG.getElementCount(DL, XLenVT, RemIdx);
98779876
auto [Mask, VL] = getDefaultScalableVLOps(InterSubVT, DL, DAG, Subtarget);
98789877
if (SubVecVT.isFixedLengthVector())
98799878
VL = getVLOp(SubVecVT.getVectorNumElements(), InterSubVT, DL, DAG,

0 commit comments

Comments
 (0)