Skip to content

Commit da6eb12

Browse files
committed
[RISCV] Use DAG.getElementCount in lowerEXTRACT_SUBVECTOR. NFCI
Following up on the review comment in llvm#79949 (comment)
1 parent ec5f4a4 commit da6eb12

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
@@ -9776,27 +9776,32 @@ SDValue RISCVTargetLowering::lowerEXTRACT_SUBVECTOR(SDValue Op,
97769776
if (SubVecVT.isFixedLengthVector())
97779777
ContainerSubVecVT = getContainerForFixedLengthVector(SubVecVT);
97789778

9779-
unsigned SubRegIdx, RemIdx;
9780-
// extract_subvector scales the index by vscale is the subvector is scalable,
9779+
unsigned SubRegIdx;
9780+
ElementCount RemIdx;
9781+
// extract_subvector scales the index by vscale if the subvector is scalable,
97819782
// and decomposeSubvectorInsertExtractToSubRegs takes this into account. So if
97829783
// we have a fixed length subvector, we need to adjust the index by 1/vscale.
97839784
if (SubVecVT.isFixedLengthVector()) {
97849785
assert(MinVLen == MaxVLen);
97859786
unsigned Vscale = MinVLen / RISCV::RVVBitsPerBlock;
9786-
std::tie(SubRegIdx, RemIdx) =
9787+
auto Decompose =
97879788
RISCVTargetLowering::decomposeSubvectorInsertExtractToSubRegs(
97889789
VecVT, ContainerSubVecVT, OrigIdx / Vscale, TRI);
9789-
RemIdx = (RemIdx * Vscale) + (OrigIdx % Vscale);
9790+
SubRegIdx = Decompose.first;
9791+
RemIdx = ElementCount::getFixed((Decompose.second * Vscale) +
9792+
(OrigIdx % Vscale));
97909793
} else {
9791-
std::tie(SubRegIdx, RemIdx) =
9794+
auto Decompose =
97929795
RISCVTargetLowering::decomposeSubvectorInsertExtractToSubRegs(
97939796
VecVT, ContainerSubVecVT, OrigIdx, TRI);
9797+
SubRegIdx = Decompose.first;
9798+
RemIdx = ElementCount::getScalable(Decompose.second);
97949799
}
97959800

97969801
// If the Idx has been completely eliminated then this is a subvector extract
97979802
// which naturally aligns to a vector register. These can easily be handled
97989803
// using subregister manipulation.
9799-
if (RemIdx == 0) {
9804+
if (RemIdx.isZero()) {
98009805
if (SubVecVT.isFixedLengthVector()) {
98019806
Vec = DAG.getTargetExtractSubreg(SubRegIdx, DL, ContainerSubVecVT, Vec);
98029807
return convertFromScalableVector(SubVecVT, Vec, DAG, Subtarget);
@@ -9823,13 +9828,7 @@ SDValue RISCVTargetLowering::lowerEXTRACT_SUBVECTOR(SDValue Op,
98239828

98249829
// Slide this vector register down by the desired number of elements in order
98259830
// to place the desired subvector starting at element 0.
9826-
SDValue SlidedownAmt;
9827-
if (SubVecVT.isFixedLengthVector())
9828-
SlidedownAmt = DAG.getConstant(RemIdx, DL, Subtarget.getXLenVT());
9829-
else
9830-
SlidedownAmt =
9831-
DAG.getVScale(DL, XLenVT, APInt(XLenVT.getSizeInBits(), RemIdx));
9832-
9831+
SDValue SlidedownAmt = DAG.getElementCount(DL, XLenVT, RemIdx);
98339832
auto [Mask, VL] = getDefaultScalableVLOps(InterSubVT, DL, DAG, Subtarget);
98349833
if (SubVecVT.isFixedLengthVector())
98359834
VL = getVLOp(SubVecVT.getVectorNumElements(), InterSubVT, DL, DAG,

0 commit comments

Comments
 (0)