@@ -4239,8 +4239,8 @@ static SDValue lowerBUILD_VECTOR(SDValue Op, SelectionDAG &DAG,
4239
4239
if ((EltVT == MVT::f16 && !Subtarget.hasStdExtZvfh()) || EltVT == MVT::bf16) {
4240
4240
MVT IVT = VT.changeVectorElementType(MVT::i16);
4241
4241
SmallVector<SDValue, 16> NewOps(Op.getNumOperands());
4242
- for (unsigned I = 0, E = Op.getNumOperands(); I != E; ++I ) {
4243
- SDValue Elem = Op.getOperand(I );
4242
+ for (const auto &[I, U] : enumerate(Op->ops()) ) {
4243
+ SDValue Elem = U.get( );
4244
4244
if ((EltVT == MVT::bf16 && Subtarget.hasStdExtZfbfmin()) ||
4245
4245
(EltVT == MVT::f16 && Subtarget.hasStdExtZfhmin())) {
4246
4246
// Called by LegalizeDAG, we need to use XLenVT operations since we
@@ -4379,16 +4379,16 @@ static SDValue lowerBUILD_VECTOR(SDValue Op, SelectionDAG &DAG,
4379
4379
SDValue UndefElem = DAG.getUNDEF(Op->getOperand(0)->getValueType(0));
4380
4380
SubVecAOps.reserve(NumElts);
4381
4381
SubVecBOps.reserve(NumElts);
4382
- for (unsigned i = 0; i < NumElts; i++ ) {
4383
- SDValue Elem = Op->getOperand(i );
4384
- if (i < NumElts / 2) {
4382
+ for (const auto &[Idx, U] : enumerate(Op->ops()) ) {
4383
+ SDValue Elem = U.get( );
4384
+ if (Idx < NumElts / 2) {
4385
4385
SubVecAOps.push_back(Elem);
4386
4386
SubVecBOps.push_back(UndefElem);
4387
4387
} else {
4388
4388
SubVecAOps.push_back(UndefElem);
4389
4389
SubVecBOps.push_back(Elem);
4390
4390
}
4391
- bool SelectMaskVal = (i < NumElts / 2);
4391
+ bool SelectMaskVal = (Idx < NumElts / 2);
4392
4392
MaskVals.push_back(DAG.getConstant(SelectMaskVal, DL, XLenVT));
4393
4393
}
4394
4394
assert(SubVecAOps.size() == NumElts && SubVecBOps.size() == NumElts &&
@@ -4769,16 +4769,15 @@ static bool isAlternating(const std::array<std::pair<int, int>, 2> &SrcInfo,
4769
4769
ArrayRef<int> Mask, unsigned Factor,
4770
4770
bool RequiredPolarity) {
4771
4771
int NumElts = Mask.size();
4772
- for (int i = 0; i != NumElts; ++i) {
4773
- int M = Mask[i];
4772
+ for (const auto &[Idx, M] : enumerate(Mask)) {
4774
4773
if (M < 0)
4775
4774
continue;
4776
4775
int Src = M >= NumElts;
4777
- int Diff = (int)i - (M % NumElts);
4776
+ int Diff = (int)Idx - (M % NumElts);
4778
4777
bool C = Src == SrcInfo[1].first && Diff == SrcInfo[1].second;
4779
4778
assert(C != (Src == SrcInfo[0].first && Diff == SrcInfo[0].second) &&
4780
4779
"Must match exactly one of the two slides");
4781
- if (RequiredPolarity != (C == (i / Factor) % 2))
4780
+ if (RequiredPolarity != (C == (Idx / Factor) % 2))
4782
4781
return false;
4783
4782
}
4784
4783
return true;
@@ -5503,18 +5502,18 @@ static SDValue lowerShuffleViaVRegSplitting(ShuffleVectorSDNode *SVN,
5503
5502
static bool isCompressMask(ArrayRef<int> Mask) {
5504
5503
int Last = -1;
5505
5504
bool SawUndef = false;
5506
- for (unsigned i = 0; i < Mask.size(); i++ ) {
5507
- if (Mask[i] == -1) {
5505
+ for (const auto &[Idx, M] : enumerate(Mask) ) {
5506
+ if (M == -1) {
5508
5507
SawUndef = true;
5509
5508
continue;
5510
5509
}
5511
5510
if (SawUndef)
5512
5511
return false;
5513
- if (i > (unsigned)Mask[i] )
5512
+ if (Idx > (unsigned)M )
5514
5513
return false;
5515
- if (Mask[i] <= Last)
5514
+ if (M <= Last)
5516
5515
return false;
5517
- Last = Mask[i] ;
5516
+ Last = M ;
5518
5517
}
5519
5518
return true;
5520
5519
}
@@ -5906,8 +5905,8 @@ static SDValue lowerVECTOR_SHUFFLE(SDValue Op, SelectionDAG &DAG,
5906
5905
// otherwise reuse the even stream for the undef one. This improves
5907
5906
// spread(2) shuffles.
5908
5907
bool LaneIsUndef[2] = { true, true};
5909
- for (unsigned i = 0; i < Mask.size(); i++ )
5910
- LaneIsUndef[i % 2] &= (Mask[i] == -1);
5908
+ for (const auto &[Idx, M] : enumerate(Mask) )
5909
+ LaneIsUndef[Idx % 2] &= (M == -1);
5911
5910
5912
5911
int Size = Mask.size();
5913
5912
SDValue EvenV, OddV;
@@ -6019,14 +6018,14 @@ static SDValue lowerVECTOR_SHUFFLE(SDValue Op, SelectionDAG &DAG,
6019
6018
// undefined in the mask. If the mask ends up all true (or undef), it
6020
6019
// will be folded away by general logic.
6021
6020
SmallVector<SDValue> MaskVals;
6022
- for (unsigned i = 0; i != Mask.size(); ++i ) {
6023
- int M = Mask[i];
6024
- if (M < 0 || (SrcInfo[1].second > 0 && i < (unsigned)SrcInfo[1].second)) {
6021
+ for (const auto &[Idx, M] : enumerate(Mask) ) {
6022
+ if (M < 0 ||
6023
+ (SrcInfo[1].second > 0 && Idx < (unsigned)SrcInfo[1].second)) {
6025
6024
MaskVals.push_back(DAG.getUNDEF(XLenVT));
6026
6025
continue;
6027
6026
}
6028
6027
int Src = M >= (int)NumElts;
6029
- int Diff = (int)i - (M % NumElts);
6028
+ int Diff = (int)Idx - (M % NumElts);
6030
6029
bool C = Src == SrcInfo[1].first && Diff == SrcInfo[1].second;
6031
6030
assert(C ^ (Src == SrcInfo[0].first && Diff == SrcInfo[0].second) &&
6032
6031
"Must match exactly one of the two slides");
@@ -21938,22 +21937,21 @@ void RISCVTargetLowering::analyzeInputArgs(
21938
21937
MachineFunction &MF, CCState &CCInfo,
21939
21938
const SmallVectorImpl<ISD::InputArg> &Ins, bool IsRet,
21940
21939
RISCVCCAssignFn Fn) const {
21941
- unsigned NumArgs = Ins.size();
21942
21940
FunctionType *FType = MF.getFunction().getFunctionType();
21943
21941
21944
- for (unsigned i = 0; i != NumArgs; ++i ) {
21945
- MVT ArgVT = Ins[i] .VT;
21946
- ISD::ArgFlagsTy ArgFlags = Ins[i] .Flags;
21942
+ for (const auto &[Idx, In] : enumerate(Ins) ) {
21943
+ MVT ArgVT = In .VT;
21944
+ ISD::ArgFlagsTy ArgFlags = In .Flags;
21947
21945
21948
21946
Type *ArgTy = nullptr;
21949
21947
if (IsRet)
21950
21948
ArgTy = FType->getReturnType();
21951
- else if (Ins[i] .isOrigArg())
21952
- ArgTy = FType->getParamType(Ins[i] .getOrigArgIndex());
21949
+ else if (In .isOrigArg())
21950
+ ArgTy = FType->getParamType(In .getOrigArgIndex());
21953
21951
21954
- if (Fn(i , ArgVT, ArgVT, CCValAssign::Full, ArgFlags, CCInfo,
21952
+ if (Fn(Idx , ArgVT, ArgVT, CCValAssign::Full, ArgFlags, CCInfo,
21955
21953
/*IsFixed=*/true, IsRet, ArgTy)) {
21956
- LLVM_DEBUG(dbgs() << "InputArg #" << i << " has unhandled type "
21954
+ LLVM_DEBUG(dbgs() << "InputArg #" << Idx << " has unhandled type "
21957
21955
<< ArgVT << '\n');
21958
21956
llvm_unreachable(nullptr);
21959
21957
}
@@ -21964,16 +21962,14 @@ void RISCVTargetLowering::analyzeOutputArgs(
21964
21962
MachineFunction &MF, CCState &CCInfo,
21965
21963
const SmallVectorImpl<ISD::OutputArg> &Outs, bool IsRet,
21966
21964
CallLoweringInfo *CLI, RISCVCCAssignFn Fn) const {
21967
- unsigned NumArgs = Outs.size();
21968
-
21969
- for (unsigned i = 0; i != NumArgs; i++) {
21970
- MVT ArgVT = Outs[i].VT;
21971
- ISD::ArgFlagsTy ArgFlags = Outs[i].Flags;
21972
- Type *OrigTy = CLI ? CLI->getArgs()[Outs[i].OrigArgIndex].Ty : nullptr;
21973
-
21974
- if (Fn(i, ArgVT, ArgVT, CCValAssign::Full, ArgFlags, CCInfo,
21975
- Outs[i].IsFixed, IsRet, OrigTy)) {
21976
- LLVM_DEBUG(dbgs() << "OutputArg #" << i << " has unhandled type "
21965
+ for (const auto &[Idx, Out] : enumerate(Outs)) {
21966
+ MVT ArgVT = Out.VT;
21967
+ ISD::ArgFlagsTy ArgFlags = Out.Flags;
21968
+ Type *OrigTy = CLI ? CLI->getArgs()[Out.OrigArgIndex].Ty : nullptr;
21969
+
21970
+ if (Fn(Idx, ArgVT, ArgVT, CCValAssign::Full, ArgFlags, CCInfo, Out.IsFixed,
21971
+ IsRet, OrigTy)) {
21972
+ LLVM_DEBUG(dbgs() << "OutputArg #" << Idx << " has unhandled type "
21977
21973
<< ArgVT << "\n");
21978
21974
llvm_unreachable(nullptr);
21979
21975
}
0 commit comments