Skip to content

Commit b48eff8

Browse files
Dinar TemirbulatovDinar Temirbulatov
authored andcommitted
Resolved remarks.
1 parent 3a93f70 commit b48eff8

File tree

1 file changed

+28
-47
lines changed

1 file changed

+28
-47
lines changed

llvm/lib/Target/AArch64/AArch64ISelLowering.cpp

Lines changed: 28 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -17518,65 +17518,46 @@ performVecReduceAddZextCombine(SDNode *N, TargetLowering::DAGCombinerInfo &DCI,
1751817518
SDValue VecOp = ZEXT->getOperand(0);
1751917519
VecVT = VecOp.getValueType();
1752017520
bool IsScalableType = VecVT.isScalableVector();
17521+
SmallVector<SDValue, 2> ResultValues;
1752117522

17522-
if (TLI.isTypeLegal(VecVT)) {
17523-
if (!IsScalableType &&
17524-
!TLI.useSVEForFixedLengthVectorVT(
17525-
VecVT,
17526-
/*OverrideNEON=*/Subtarget.useSVEForFixedLengthVectors(VecVT)))
17527-
return SDValue();
17528-
17529-
if (!IsScalableType) {
17530-
EVT ContainerVT = getContainerForFixedLengthVector(DAG, VecVT);
17531-
VecOp = convertToScalableVector(DAG, ContainerVT, VecOp);
17532-
}
17533-
VecVT = VecOp.getValueType();
17534-
EVT RdxVT = N->getValueType(0);
17535-
RdxVT = getPackedSVEVectorVT(RdxVT);
17536-
SDValue Pg = getPredicateForVector(DAG, DL, VecVT);
17537-
SDValue Res = DAG.getNode(
17538-
ISD::INTRINSIC_WO_CHAIN, DL, MVT::i64,
17539-
DAG.getConstant(Intrinsic::aarch64_sve_uaddv, DL, MVT::i64), Pg, VecOp);
17540-
EVT ResVT = MVT::i64;
17541-
if (ResVT != N->getValueType(0))
17542-
Res = DAG.getAnyExtOrTrunc(Res, DL, N->getValueType(0));
17543-
return Res;
17544-
}
17545-
17546-
SmallVector<SDValue, 4> SplitVals;
17547-
SmallVector<SDValue, 4> PrevVals;
17548-
PrevVals.push_back(VecOp);
17549-
while (true) {
17523+
if (!TLI.isTypeLegal(VecVT)) {
17524+
SmallVector<SDValue, 2> PrevValues;
17525+
PrevValues.push_back(VecOp);
17526+
while (true) {
1755017527

17551-
if (!VecVT.isScalableVector() &&
17552-
!PrevVals[0].getValueType().getVectorElementCount().isKnownEven())
17553-
return SDValue();
17528+
if (!VecVT.isScalableVector() &&
17529+
!PrevValues[0].getValueType().getVectorElementCount().isKnownEven())
17530+
return SDValue();
1755417531

17555-
for (SDValue Vec : PrevVals) {
17556-
SDValue Lo, Hi;
17557-
std::tie(Lo, Hi) = DAG.SplitVector(Vec, DL);
17558-
SplitVals.push_back(Lo);
17559-
SplitVals.push_back(Hi);
17532+
for (SDValue Vec : PrevValues) {
17533+
SDValue Lo, Hi;
17534+
std::tie(Lo, Hi) = DAG.SplitVector(Vec, DL);
17535+
ResultValues.push_back(Lo);
17536+
ResultValues.push_back(Hi);
17537+
}
17538+
if (TLI.isTypeLegal(ResultValues[0].getValueType()))
17539+
break;
17540+
PrevValues.clear();
17541+
std::copy(ResultValues.begin(), ResultValues.end(),
17542+
std::back_inserter(PrevValues));
17543+
ResultValues.clear();
1756017544
}
17561-
if (TLI.isTypeLegal(SplitVals[0].getValueType()))
17562-
break;
17563-
PrevVals.clear();
17564-
std::copy(SplitVals.begin(), SplitVals.end(), std::back_inserter(PrevVals));
17565-
SplitVals.clear();
17545+
} else {
17546+
ResultValues.push_back(VecOp);
1756617547
}
1756717548
SDNode *VecRed = N;
1756817549
EVT ElemType = VecRed->getValueType(0);
17569-
SmallVector<SDValue, 4> Results;
17550+
SmallVector<SDValue, 2> Results;
1757017551

1757117552
if (!IsScalableType &&
1757217553
!TLI.useSVEForFixedLengthVectorVT(
17573-
SplitVals[0].getValueType(),
17554+
ResultValues[0].getValueType(),
1757417555
/*OverrideNEON=*/Subtarget.useSVEForFixedLengthVectors(
17575-
SplitVals[0].getValueType())))
17556+
ResultValues[0].getValueType())))
1757617557
return SDValue();
1757717558

17578-
for (unsigned Num = 0; Num < SplitVals.size(); ++Num) {
17579-
SDValue Reg = SplitVals[Num];
17559+
for (unsigned Num = 0; Num < ResultValues.size(); ++Num) {
17560+
SDValue Reg = ResultValues[Num];
1758017561
EVT RdxVT = Reg->getValueType(0);
1758117562
SDValue Pg = getPredicateForVector(DAG, DL, RdxVT);
1758217563
if (!IsScalableType) {
@@ -17591,7 +17572,7 @@ performVecReduceAddZextCombine(SDNode *N, TargetLowering::DAGCombinerInfo &DCI,
1759117572
Results.push_back(Res);
1759217573
}
1759317574
SDValue ToAdd = Results[0];
17594-
for (unsigned I = 1; I < SplitVals.size(); ++I)
17575+
for (unsigned I = 1; I < ResultValues.size(); ++I)
1759517576
ToAdd = DAG.getNode(ISD::ADD, DL, ElemType, ToAdd, Results[I]);
1759617577
return ToAdd;
1759717578
}

0 commit comments

Comments
 (0)