diff --git a/llvm/include/llvm/ADT/STLExtras.h b/llvm/include/llvm/ADT/STLExtras.h index 15845dd9333c7..5ac549c447560 100644 --- a/llvm/include/llvm/ADT/STLExtras.h +++ b/llvm/include/llvm/ADT/STLExtras.h @@ -1971,6 +1971,22 @@ auto upper_bound(R &&Range, T &&Value, Compare C) { std::forward(Value), C); } +template auto min_element(R &&Range) { + return std::min_element(adl_begin(Range), adl_end(Range)); +} + +template auto min_element(R &&Range, Compare C) { + return std::min_element(adl_begin(Range), adl_end(Range), C); +} + +template auto max_element(R &&Range) { + return std::max_element(adl_begin(Range), adl_end(Range)); +} + +template auto max_element(R &&Range, Compare C) { + return std::max_element(adl_begin(Range), adl_end(Range), C); +} + template void stable_sort(R &&Range) { std::stable_sort(adl_begin(Range), adl_end(Range)); diff --git a/llvm/include/llvm/CodeGen/RegAllocPBQP.h b/llvm/include/llvm/CodeGen/RegAllocPBQP.h index 1ea8840947bc8..234f1c6ff115a 100644 --- a/llvm/include/llvm/CodeGen/RegAllocPBQP.h +++ b/llvm/include/llvm/CodeGen/RegAllocPBQP.h @@ -462,10 +462,8 @@ class RegAllocSolverImpl { NodeStack.push_back(NId); G.disconnectAllNeighborsFromNode(NId); } else if (!NotProvablyAllocatableNodes.empty()) { - NodeSet::iterator NItr = - std::min_element(NotProvablyAllocatableNodes.begin(), - NotProvablyAllocatableNodes.end(), - SpillCostComparator(G)); + NodeSet::iterator NItr = llvm::min_element(NotProvablyAllocatableNodes, + SpillCostComparator(G)); NodeId NId = *NItr; NotProvablyAllocatableNodes.erase(NItr); NodeStack.push_back(NId); diff --git a/llvm/lib/Analysis/ScalarEvolution.cpp b/llvm/lib/Analysis/ScalarEvolution.cpp index acc0aa23107bb..515b9d0744f6e 100644 --- a/llvm/lib/Analysis/ScalarEvolution.cpp +++ b/llvm/lib/Analysis/ScalarEvolution.cpp @@ -10839,10 +10839,9 @@ bool ScalarEvolution::isKnownViaInduction(ICmpInst::Predicate Pred, #endif const Loop *MDL = - *std::max_element(LoopsUsed.begin(), LoopsUsed.end(), - [&](const Loop *L1, const Loop *L2) { - return DT.properlyDominates(L1->getHeader(), L2->getHeader()); - }); + *llvm::max_element(LoopsUsed, [&](const Loop *L1, const Loop *L2) { + return DT.properlyDominates(L1->getHeader(), L2->getHeader()); + }); // Get init and post increment value for LHS. auto SplitLHS = SplitIntoInitAndPostInc(MDL, LHS); diff --git a/llvm/lib/DebugInfo/PDB/Native/PDBFile.cpp b/llvm/lib/DebugInfo/PDB/Native/PDBFile.cpp index 471d183a5f539..0232cae6e3897 100644 --- a/llvm/lib/DebugInfo/PDB/Native/PDBFile.cpp +++ b/llvm/lib/DebugInfo/PDB/Native/PDBFile.cpp @@ -86,8 +86,7 @@ uint32_t PDBFile::getNumStreams() const { } uint32_t PDBFile::getMaxStreamSize() const { - return *std::max_element(ContainerLayout.StreamSizes.begin(), - ContainerLayout.StreamSizes.end()); + return *llvm::max_element(ContainerLayout.StreamSizes); } uint32_t PDBFile::getStreamByteSize(uint32_t StreamIndex) const { diff --git a/llvm/lib/IR/DataLayout.cpp b/llvm/lib/IR/DataLayout.cpp index a2f5714c70687..2741165332487 100644 --- a/llvm/lib/IR/DataLayout.cpp +++ b/llvm/lib/IR/DataLayout.cpp @@ -898,7 +898,7 @@ Type *DataLayout::getSmallestLegalIntType(LLVMContext &C, unsigned Width) const } unsigned DataLayout::getLargestLegalIntTypeSizeInBits() const { - auto Max = std::max_element(LegalIntWidths.begin(), LegalIntWidths.end()); + auto Max = llvm::max_element(LegalIntWidths); return Max != LegalIntWidths.end() ? *Max : 0; } diff --git a/llvm/lib/ObjCopy/MachO/MachOWriter.cpp b/llvm/lib/ObjCopy/MachO/MachOWriter.cpp index f416796496e9d..1ff741c830bdb 100644 --- a/llvm/lib/ObjCopy/MachO/MachOWriter.cpp +++ b/llvm/lib/ObjCopy/MachO/MachOWriter.cpp @@ -126,7 +126,7 @@ size_t MachOWriter::totalSize() const { } if (!Ends.empty()) - return *std::max_element(Ends.begin(), Ends.end()); + return *llvm::max_element(Ends); // Otherwise, we have only Mach header and load commands. return headerSize() + loadCommandsSize(); diff --git a/llvm/lib/ProfileData/GCOV.cpp b/llvm/lib/ProfileData/GCOV.cpp index fcfeb5b0f5844..ee61784abade5 100644 --- a/llvm/lib/ProfileData/GCOV.cpp +++ b/llvm/lib/ProfileData/GCOV.cpp @@ -703,7 +703,7 @@ void Context::collectFunction(GCOVFunction &f, Summary &summary) { for (const GCOVBlock &b : f.blocksRange()) { if (b.lines.empty()) continue; - uint32_t maxLineNum = *std::max_element(b.lines.begin(), b.lines.end()); + uint32_t maxLineNum = *llvm::max_element(b.lines); if (maxLineNum >= si.lines.size()) si.lines.resize(maxLineNum + 1); for (uint32_t lineNum : b.lines) { diff --git a/llvm/lib/Target/AArch64/SVEIntrinsicOpts.cpp b/llvm/lib/Target/AArch64/SVEIntrinsicOpts.cpp index 880ff8498b876..fe68203ad5392 100644 --- a/llvm/lib/Target/AArch64/SVEIntrinsicOpts.cpp +++ b/llvm/lib/Target/AArch64/SVEIntrinsicOpts.cpp @@ -138,8 +138,8 @@ bool SVEIntrinsicOpts::coalescePTrueIntrinsicCalls( return false; // Find the ptrue with the most lanes. - auto *MostEncompassingPTrue = *std::max_element( - PTrues.begin(), PTrues.end(), [](auto *PTrue1, auto *PTrue2) { + auto *MostEncompassingPTrue = + *llvm::max_element(PTrues, [](auto *PTrue1, auto *PTrue2) { auto *PTrue1VTy = cast(PTrue1->getType()); auto *PTrue2VTy = cast(PTrue2->getType()); return PTrue1VTy->getElementCount().getKnownMinValue() < diff --git a/llvm/lib/Target/AMDGPU/GCNILPSched.cpp b/llvm/lib/Target/AMDGPU/GCNILPSched.cpp index 8629db2e2563e..559dd0ed0c413 100644 --- a/llvm/lib/Target/AMDGPU/GCNILPSched.cpp +++ b/llvm/lib/Target/AMDGPU/GCNILPSched.cpp @@ -313,11 +313,11 @@ GCNILPScheduler::schedule(ArrayRef BotRoots, Schedule.reserve(SUnits.size()); while (true) { if (AvailQueue.empty() && !PendingQueue.empty()) { - auto EarliestSU = std::min_element( - PendingQueue.begin(), PendingQueue.end(), - [=](const Candidate& C1, const Candidate& C2) { - return C1.SU->getHeight() < C2.SU->getHeight(); - })->SU; + auto EarliestSU = + llvm::min_element(PendingQueue, [=](const Candidate &C1, + const Candidate &C2) { + return C1.SU->getHeight() < C2.SU->getHeight(); + })->SU; advanceToCycle(std::max(CurCycle + 1, EarliestSU->getHeight())); } if (AvailQueue.empty()) diff --git a/llvm/lib/Target/AMDGPU/SIFixSGPRCopies.cpp b/llvm/lib/Target/AMDGPU/SIFixSGPRCopies.cpp index 86980ee851bb1..8b21c22b44971 100644 --- a/llvm/lib/Target/AMDGPU/SIFixSGPRCopies.cpp +++ b/llvm/lib/Target/AMDGPU/SIFixSGPRCopies.cpp @@ -973,9 +973,8 @@ bool SIFixSGPRCopies::needToBeConvertedToVALU(V2SCopyInfo *Info) { Info->Score = 0; return true; } - Info->Siblings = SiblingPenalty[*std::max_element( - Info->SChain.begin(), Info->SChain.end(), - [&](MachineInstr *A, MachineInstr *B) -> bool { + Info->Siblings = SiblingPenalty[*llvm::max_element( + Info->SChain, [&](MachineInstr *A, MachineInstr *B) -> bool { return SiblingPenalty[A].size() < SiblingPenalty[B].size(); })]; Info->Siblings.remove_if([&](unsigned ID) { return ID == Info->ID; }); diff --git a/llvm/lib/Target/AMDGPU/SIMachineScheduler.cpp b/llvm/lib/Target/AMDGPU/SIMachineScheduler.cpp index 677f1590287eb..4476adf95f8d3 100644 --- a/llvm/lib/Target/AMDGPU/SIMachineScheduler.cpp +++ b/llvm/lib/Target/AMDGPU/SIMachineScheduler.cpp @@ -904,10 +904,8 @@ void SIScheduleBlockCreator::colorEndsAccordingToDependencies() { CurrentTopDownReservedDependencyColoring.size() == DAGSize); // If there is no reserved block at all, do nothing. We don't want // everything in one block. - if (*std::max_element(CurrentBottomUpReservedDependencyColoring.begin(), - CurrentBottomUpReservedDependencyColoring.end()) == 0 && - *std::max_element(CurrentTopDownReservedDependencyColoring.begin(), - CurrentTopDownReservedDependencyColoring.end()) == 0) + if (*llvm::max_element(CurrentBottomUpReservedDependencyColoring) == 0 && + *llvm::max_element(CurrentTopDownReservedDependencyColoring) == 0) return; for (unsigned SUNum : DAG->BottomUpIndex2SU) { diff --git a/llvm/lib/Target/Hexagon/HexagonCommonGEP.cpp b/llvm/lib/Target/Hexagon/HexagonCommonGEP.cpp index 5ad749074a8e2..4ead8c68cb901 100644 --- a/llvm/lib/Target/Hexagon/HexagonCommonGEP.cpp +++ b/llvm/lib/Target/Hexagon/HexagonCommonGEP.cpp @@ -593,7 +593,7 @@ void HexagonCommonGEP::common() { using ProjMap = std::map; ProjMap PM; for (const NodeSet &S : EqRel) { - GepNode *Min = *std::min_element(S.begin(), S.end(), NodeOrder); + GepNode *Min = *llvm::min_element(S, NodeOrder); std::pair Ins = PM.insert(std::make_pair(&S, Min)); (void)Ins; assert(Ins.second && "Cannot add minimal element"); diff --git a/llvm/lib/Target/Hexagon/HexagonConstExtenders.cpp b/llvm/lib/Target/Hexagon/HexagonConstExtenders.cpp index 400bb6cfc7319..f2a02fe9540bf 100644 --- a/llvm/lib/Target/Hexagon/HexagonConstExtenders.cpp +++ b/llvm/lib/Target/Hexagon/HexagonConstExtenders.cpp @@ -1388,11 +1388,10 @@ void HCE::assignInits(const ExtRoot &ER, unsigned Begin, unsigned End, break; // Find the best candidate with respect to the number of extenders covered. - auto BestIt = std::max_element(Counts.begin(), Counts.end(), - [](const CMap::value_type &A, const CMap::value_type &B) { - return A.second < B.second || - (A.second == B.second && A < B); - }); + auto BestIt = llvm::max_element( + Counts, [](const CMap::value_type &A, const CMap::value_type &B) { + return A.second < B.second || (A.second == B.second && A < B); + }); int32_t Best = BestIt->first; ExtValue BestV(ER, Best); for (RangeTree::Node *N : Tree.nodesWith(Best)) { diff --git a/llvm/lib/Target/Hexagon/HexagonGenInsert.cpp b/llvm/lib/Target/Hexagon/HexagonGenInsert.cpp index 44f21dbacd3c2..1e373f6061bbf 100644 --- a/llvm/lib/Target/Hexagon/HexagonGenInsert.cpp +++ b/llvm/lib/Target/Hexagon/HexagonGenInsert.cpp @@ -1314,7 +1314,7 @@ void HexagonGenInsert::selectCandidates() { // element found is adequate, we will put it back on the list, other- // wise the list will remain empty, and the entry for this register // will be removed (i.e. this register will not be replaced by insert). - IFListType::iterator MinI = std::min_element(LL.begin(), LL.end(), IFO); + IFListType::iterator MinI = llvm::min_element(LL, IFO); assert(MinI != LL.end()); IFRecordWithRegSet M = *MinI; LL.clear(); diff --git a/llvm/lib/Target/Hexagon/HexagonVectorCombine.cpp b/llvm/lib/Target/Hexagon/HexagonVectorCombine.cpp index 7231388445d51..797b798520aa1 100644 --- a/llvm/lib/Target/Hexagon/HexagonVectorCombine.cpp +++ b/llvm/lib/Target/Hexagon/HexagonVectorCombine.cpp @@ -1411,9 +1411,9 @@ auto AlignVectors::realignGroup(const MoveGroup &Move) const -> bool { // Return the element with the maximum alignment from Range, // where GetValue obtains the value to compare from an element. auto getMaxOf = [](auto Range, auto GetValue) { - return *std::max_element( - Range.begin(), Range.end(), - [&GetValue](auto &A, auto &B) { return GetValue(A) < GetValue(B); }); + return *llvm::max_element(Range, [&GetValue](auto &A, auto &B) { + return GetValue(A) < GetValue(B); + }); }; const AddrList &BaseInfos = AddrGroups.at(Move.Base); diff --git a/llvm/lib/Transforms/Scalar/GVNSink.cpp b/llvm/lib/Transforms/Scalar/GVNSink.cpp index 2b38831139a58..d4907326eb0a5 100644 --- a/llvm/lib/Transforms/Scalar/GVNSink.cpp +++ b/llvm/lib/Transforms/Scalar/GVNSink.cpp @@ -655,8 +655,7 @@ GVNSink::analyzeInstructionForSinking(LockstepReverseIterator &LRI, return std::nullopt; VNums[N]++; } - unsigned VNumToSink = - std::max_element(VNums.begin(), VNums.end(), llvm::less_second())->first; + unsigned VNumToSink = llvm::max_element(VNums, llvm::less_second())->first; if (VNums[VNumToSink] == 1) // Can't sink anything! diff --git a/llvm/lib/Transforms/Scalar/JumpThreading.cpp b/llvm/lib/Transforms/Scalar/JumpThreading.cpp index a04987ce66241..221b122caba20 100644 --- a/llvm/lib/Transforms/Scalar/JumpThreading.cpp +++ b/llvm/lib/Transforms/Scalar/JumpThreading.cpp @@ -1488,7 +1488,7 @@ findMostPopularDest(BasicBlock *BB, // Populate DestPopularity with the successors in the order they appear in the // successor list. This way, we ensure determinism by iterating it in the - // same order in std::max_element below. We map nullptr to 0 so that we can + // same order in llvm::max_element below. We map nullptr to 0 so that we can // return nullptr when PredToDestList contains nullptr only. DestPopularity[nullptr] = 0; for (auto *SuccBB : successors(BB)) @@ -1499,8 +1499,7 @@ findMostPopularDest(BasicBlock *BB, DestPopularity[PredToDest.second]++; // Find the most popular dest. - auto MostPopular = std::max_element( - DestPopularity.begin(), DestPopularity.end(), llvm::less_second()); + auto MostPopular = llvm::max_element(DestPopularity, llvm::less_second()); // Okay, we have finally picked the most popular destination. return MostPopular->first; @@ -2553,8 +2552,7 @@ void JumpThreadingPass::updateBlockFreqAndEdgeWeight(BasicBlock *PredBB, BBSuccFreq.push_back(SuccFreq.getFrequency()); } - uint64_t MaxBBSuccFreq = - *std::max_element(BBSuccFreq.begin(), BBSuccFreq.end()); + uint64_t MaxBBSuccFreq = *llvm::max_element(BBSuccFreq); SmallVector BBSuccProbs; if (MaxBBSuccFreq == 0) diff --git a/llvm/lib/Transforms/Scalar/LoopLoadElimination.cpp b/llvm/lib/Transforms/Scalar/LoopLoadElimination.cpp index 914cf6e21028a..edddfb1b92402 100644 --- a/llvm/lib/Transforms/Scalar/LoopLoadElimination.cpp +++ b/llvm/lib/Transforms/Scalar/LoopLoadElimination.cpp @@ -349,19 +349,20 @@ class LoadEliminationForLoop { // ld0. LoadInst *LastLoad = - std::max_element(Candidates.begin(), Candidates.end(), - [&](const StoreToLoadForwardingCandidate &A, - const StoreToLoadForwardingCandidate &B) { - return getInstrIndex(A.Load) < getInstrIndex(B.Load); - }) + llvm::max_element(Candidates, + [&](const StoreToLoadForwardingCandidate &A, + const StoreToLoadForwardingCandidate &B) { + return getInstrIndex(A.Load) < + getInstrIndex(B.Load); + }) ->Load; StoreInst *FirstStore = - std::min_element(Candidates.begin(), Candidates.end(), - [&](const StoreToLoadForwardingCandidate &A, - const StoreToLoadForwardingCandidate &B) { - return getInstrIndex(A.Store) < - getInstrIndex(B.Store); - }) + llvm::min_element(Candidates, + [&](const StoreToLoadForwardingCandidate &A, + const StoreToLoadForwardingCandidate &B) { + return getInstrIndex(A.Store) < + getInstrIndex(B.Store); + }) ->Store; // We're looking for stores after the first forwarding store until the end diff --git a/llvm/lib/Transforms/Utils/SimplifyCFG.cpp b/llvm/lib/Transforms/Utils/SimplifyCFG.cpp index fe65e52110f97..5b9a38c0b74ec 100644 --- a/llvm/lib/Transforms/Utils/SimplifyCFG.cpp +++ b/llvm/lib/Transforms/Utils/SimplifyCFG.cpp @@ -1084,7 +1084,7 @@ static void GetBranchWeights(Instruction *TI, /// Keep halving the weights until all can fit in uint32_t. static void FitWeights(MutableArrayRef Weights) { - uint64_t Max = *std::max_element(Weights.begin(), Weights.end()); + uint64_t Max = *llvm::max_element(Weights); if (Max > UINT_MAX) { unsigned Offset = 32 - llvm::countl_zero(Max); for (uint64_t &I : Weights) diff --git a/llvm/lib/Transforms/Vectorize/LoadStoreVectorizer.cpp b/llvm/lib/Transforms/Vectorize/LoadStoreVectorizer.cpp index 1f11d4894f775..6ba278794b7fb 100644 --- a/llvm/lib/Transforms/Vectorize/LoadStoreVectorizer.cpp +++ b/llvm/lib/Transforms/Vectorize/LoadStoreVectorizer.cpp @@ -892,7 +892,7 @@ bool Vectorizer::vectorizeChain(Chain &C) { // Loads get hoisted to the location of the first load in the chain. We may // also need to hoist the (transitive) operands of the loads. Builder.SetInsertPoint( - std::min_element(C.begin(), C.end(), [](const auto &A, const auto &B) { + llvm::min_element(C, [](const auto &A, const auto &B) { return A.Inst->comesBefore(B.Inst); })->Inst); @@ -944,10 +944,9 @@ bool Vectorizer::vectorizeChain(Chain &C) { reorder(VecInst); } else { // Stores get sunk to the location of the last store in the chain. - Builder.SetInsertPoint( - std::max_element(C.begin(), C.end(), [](auto &A, auto &B) { - return A.Inst->comesBefore(B.Inst); - })->Inst); + Builder.SetInsertPoint(llvm::max_element(C, [](auto &A, auto &B) { + return A.Inst->comesBefore(B.Inst); + })->Inst); // Build the vector to store. Value *Vec = PoisonValue::get(VecTy); diff --git a/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp b/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp index 36dc9094538ae..7b99c3ac8c55a 100644 --- a/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp +++ b/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp @@ -10172,11 +10172,10 @@ BoUpSLP::isGatherShuffledSingleRegisterEntry( // No 2 source vectors with the same vector factor - just choose 2 with max // index. if (Entries.empty()) { - Entries.push_back( - *std::max_element(UsedTEs.front().begin(), UsedTEs.front().end(), - [](const TreeEntry *TE1, const TreeEntry *TE2) { - return TE1->Idx < TE2->Idx; - })); + Entries.push_back(*llvm::max_element( + UsedTEs.front(), [](const TreeEntry *TE1, const TreeEntry *TE2) { + return TE1->Idx < TE2->Idx; + })); Entries.push_back(SecondEntries.front()); VF = std::max(Entries.front()->getVectorFactor(), Entries.back()->getVectorFactor()); diff --git a/llvm/tools/llvm-exegesis/lib/LatencyBenchmarkRunner.cpp b/llvm/tools/llvm-exegesis/lib/LatencyBenchmarkRunner.cpp index de61fff643294..684868cf23e8f 100644 --- a/llvm/tools/llvm-exegesis/lib/LatencyBenchmarkRunner.cpp +++ b/llvm/tools/llvm-exegesis/lib/LatencyBenchmarkRunner.cpp @@ -52,13 +52,13 @@ static double computeVariance(const SmallVector &Values) { static int64_t findMin(const SmallVector &Values) { if (Values.empty()) return 0; - return *std::min_element(Values.begin(), Values.end()); + return *llvm::min_element(Values); } static int64_t findMax(const SmallVector &Values) { if (Values.empty()) return 0; - return *std::max_element(Values.begin(), Values.end()); + return *llvm::max_element(Values); } static int64_t findMean(const SmallVector &Values) { diff --git a/llvm/tools/llvm-mca/Views/BottleneckAnalysis.cpp b/llvm/tools/llvm-mca/Views/BottleneckAnalysis.cpp index b702113b39617..409a7010b80c8 100644 --- a/llvm/tools/llvm-mca/Views/BottleneckAnalysis.cpp +++ b/llvm/tools/llvm-mca/Views/BottleneckAnalysis.cpp @@ -270,9 +270,10 @@ void DependencyGraph::getCriticalSequence( // To obtain the sequence of critical edges, we simply follow the chain of // critical predecessors starting from node N (field // DGNode::CriticalPredecessor). - const auto It = std::max_element( - Nodes.begin(), Nodes.end(), - [](const DGNode &Lhs, const DGNode &Rhs) { return Lhs.Cost < Rhs.Cost; }); + const auto It = + llvm::max_element(Nodes, [](const DGNode &Lhs, const DGNode &Rhs) { + return Lhs.Cost < Rhs.Cost; + }); unsigned IID = std::distance(Nodes.begin(), It); Seq.resize(Nodes[IID].Depth); for (const DependencyEdge *&DE : llvm::reverse(Seq)) { diff --git a/llvm/tools/llvm-mca/Views/SchedulerStatistics.cpp b/llvm/tools/llvm-mca/Views/SchedulerStatistics.cpp index 06caeda344c82..43f8b62864af7 100644 --- a/llvm/tools/llvm-mca/Views/SchedulerStatistics.cpp +++ b/llvm/tools/llvm-mca/Views/SchedulerStatistics.cpp @@ -105,8 +105,7 @@ void SchedulerStatistics::printSchedulerStats(raw_ostream &OS) const { OS << "[# issued], [# cycles]\n"; bool HasColors = OS.has_colors(); - const auto It = - std::max_element(IssueWidthPerCycle.begin(), IssueWidthPerCycle.end()); + const auto It = llvm::max_element(IssueWidthPerCycle); for (const std::pair &Entry : IssueWidthPerCycle) { unsigned NumIssued = Entry.first; if (NumIssued == It->first && HasColors) diff --git a/llvm/tools/llvm-pdbutil/DumpOutputStyle.cpp b/llvm/tools/llvm-pdbutil/DumpOutputStyle.cpp index 5ce663e2efc9a..63b173a727ce6 100644 --- a/llvm/tools/llvm-pdbutil/DumpOutputStyle.cpp +++ b/llvm/tools/llvm-pdbutil/DumpOutputStyle.cpp @@ -1070,8 +1070,7 @@ Error DumpOutputStyle::dumpStringTableFromPdb() { if (IS->name_ids().empty()) P.formatLine("Empty"); else { - auto MaxID = - std::max_element(IS->name_ids().begin(), IS->name_ids().end()); + auto MaxID = llvm::max_element(IS->name_ids(), IS->name_ids()); uint32_t Digits = NumDigits(*MaxID); P.formatLine("{0} | {1}", fmt_align("ID", AlignStyle::Right, Digits), @@ -1836,9 +1835,9 @@ Error DumpOutputStyle::dumpSectionContribs() { class Visitor : public ISectionContribVisitor { public: Visitor(LinePrinter &P, ArrayRef Names) : P(P), Names(Names) { - auto Max = std::max_element( - Names.begin(), Names.end(), - [](StringRef S1, StringRef S2) { return S1.size() < S2.size(); }); + auto Max = llvm::max_element(Names, [](StringRef S1, StringRef S2) { + return S1.size() < S2.size(); + }); MaxNameLen = (Max == Names.end() ? 0 : Max->size()); } void visit(const SectionContrib &SC) override { diff --git a/llvm/tools/llvm-pdbutil/MinimalTypeDumper.cpp b/llvm/tools/llvm-pdbutil/MinimalTypeDumper.cpp index a4077820eb03c..db3a752d58165 100644 --- a/llvm/tools/llvm-pdbutil/MinimalTypeDumper.cpp +++ b/llvm/tools/llvm-pdbutil/MinimalTypeDumper.cpp @@ -308,7 +308,7 @@ Error MinimalTypeDumpVisitor::visitKnownRecord(CVType &CVR, if (Indices.empty()) return Error::success(); - auto Max = std::max_element(Indices.begin(), Indices.end()); + auto Max = llvm::max_element(Indices); uint32_t W = NumDigits(Max->getIndex()) + 2; for (auto I : Indices) @@ -323,7 +323,7 @@ Error MinimalTypeDumpVisitor::visitKnownRecord(CVType &CVR, if (Indices.empty()) return Error::success(); - auto Max = std::max_element(Indices.begin(), Indices.end()); + auto Max = llvm::max_element(Indices); uint32_t W = NumDigits(Max->getIndex()) + 2; for (auto I : Indices) @@ -493,7 +493,7 @@ Error MinimalTypeDumpVisitor::visitKnownRecord(CVType &CVR, if (Indices.empty()) return Error::success(); - auto Max = std::max_element(Indices.begin(), Indices.end()); + auto Max = llvm::max_element(Indices); uint32_t W = NumDigits(Max->getIndex()) + 2; for (auto I : Indices) diff --git a/llvm/tools/llvm-rc/ResourceFileWriter.cpp b/llvm/tools/llvm-rc/ResourceFileWriter.cpp index 9738fd49343a6..d507525970ec8 100644 --- a/llvm/tools/llvm-rc/ResourceFileWriter.cpp +++ b/llvm/tools/llvm-rc/ResourceFileWriter.cpp @@ -1537,15 +1537,14 @@ Error ResourceFileWriter::writeVersionInfoBody(const RCResource *Base) { }; auto FileVer = GetField(VersionInfoFixed::FtFileVersion); - RETURN_IF_ERROR(checkNumberFits( - *std::max_element(FileVer.begin(), FileVer.end()), "FILEVERSION fields")); + RETURN_IF_ERROR(checkNumberFits(*llvm::max_element(FileVer), + "FILEVERSION fields")); FixedInfo.FileVersionMS = (FileVer[0] << 16) | FileVer[1]; FixedInfo.FileVersionLS = (FileVer[2] << 16) | FileVer[3]; auto ProdVer = GetField(VersionInfoFixed::FtProductVersion); - RETURN_IF_ERROR(checkNumberFits( - *std::max_element(ProdVer.begin(), ProdVer.end()), - "PRODUCTVERSION fields")); + RETURN_IF_ERROR(checkNumberFits(*llvm::max_element(ProdVer), + "PRODUCTVERSION fields")); FixedInfo.ProductVersionMS = (ProdVer[0] << 16) | ProdVer[1]; FixedInfo.ProductVersionLS = (ProdVer[2] << 16) | ProdVer[3]; diff --git a/llvm/utils/FileCheck/FileCheck.cpp b/llvm/utils/FileCheck/FileCheck.cpp index e74a79e1312b2..a96251867c084 100644 --- a/llvm/utils/FileCheck/FileCheck.cpp +++ b/llvm/utils/FileCheck/FileCheck.cpp @@ -742,20 +742,15 @@ int main(int argc, char **argv) { // In the latter case, the general rule of thumb is to choose the value that // provides the most information. DumpInputValue DumpInput = - DumpInputs.empty() - ? DumpInputFail - : *std::max_element(DumpInputs.begin(), DumpInputs.end()); + DumpInputs.empty() ? DumpInputFail : *llvm::max_element(DumpInputs); DumpInputFilterValue DumpInputFilter; if (DumpInputFilters.empty()) DumpInputFilter = DumpInput == DumpInputAlways ? DumpInputFilterAll : DumpInputFilterError; else - DumpInputFilter = - *std::max_element(DumpInputFilters.begin(), DumpInputFilters.end()); - unsigned DumpInputContext = DumpInputContexts.empty() - ? 5 - : *std::max_element(DumpInputContexts.begin(), - DumpInputContexts.end()); + DumpInputFilter = *llvm::max_element(DumpInputFilters); + unsigned DumpInputContext = + DumpInputContexts.empty() ? 5 : *llvm::max_element(DumpInputContexts); if (DumpInput == DumpInputHelp) { DumpInputAnnotationHelp(outs()); diff --git a/llvm/utils/TableGen/CodeGenSchedule.cpp b/llvm/utils/TableGen/CodeGenSchedule.cpp index d819016f8b561..0e81623a6aa38 100644 --- a/llvm/utils/TableGen/CodeGenSchedule.cpp +++ b/llvm/utils/TableGen/CodeGenSchedule.cpp @@ -287,7 +287,7 @@ static APInt constructOperandMask(ArrayRef Indices) { if (Indices.empty()) return OperandMask; - int64_t MaxIndex = *std::max_element(Indices.begin(), Indices.end()); + int64_t MaxIndex = *llvm::max_element(Indices); assert(MaxIndex >= 0 && "Invalid negative indices in input!"); OperandMask = OperandMask.zext(MaxIndex + 1); for (const int64_t Index : Indices) { diff --git a/llvm/utils/TableGen/RegisterInfoEmitter.cpp b/llvm/utils/TableGen/RegisterInfoEmitter.cpp index 8919e07a7547b..d074e31c62458 100644 --- a/llvm/utils/TableGen/RegisterInfoEmitter.cpp +++ b/llvm/utils/TableGen/RegisterInfoEmitter.cpp @@ -803,8 +803,8 @@ void RegisterInfoEmitter::emitComposeSubRegIndexLaneMask( OS << " // Sequence " << Idx << "\n"; Idx += Sequence.size() + 1; } - auto *IntType = getMinimalTypeForRange(*std::max_element( - SubReg2SequenceIndexMap.begin(), SubReg2SequenceIndexMap.end())); + auto *IntType = + getMinimalTypeForRange(*llvm::max_element(SubReg2SequenceIndexMap)); OS << " };\n" " static const " << IntType << " CompositeSequences[] = {\n"; diff --git a/mlir/examples/toy/Ch5/mlir/LowerToAffineLoops.cpp b/mlir/examples/toy/Ch5/mlir/LowerToAffineLoops.cpp index ae4bd980c34b5..bded61542188e 100644 --- a/mlir/examples/toy/Ch5/mlir/LowerToAffineLoops.cpp +++ b/mlir/examples/toy/Ch5/mlir/LowerToAffineLoops.cpp @@ -173,8 +173,7 @@ struct ConstantOpLowering : public OpRewritePattern { SmallVector constantIndices; if (!valueShape.empty()) { - for (auto i : llvm::seq( - 0, *std::max_element(valueShape.begin(), valueShape.end()))) + for (auto i : llvm::seq(0, *llvm::max_element(valueShape))) constantIndices.push_back( rewriter.create(loc, i)); } else { diff --git a/mlir/examples/toy/Ch6/mlir/LowerToAffineLoops.cpp b/mlir/examples/toy/Ch6/mlir/LowerToAffineLoops.cpp index ae4bd980c34b5..bded61542188e 100644 --- a/mlir/examples/toy/Ch6/mlir/LowerToAffineLoops.cpp +++ b/mlir/examples/toy/Ch6/mlir/LowerToAffineLoops.cpp @@ -173,8 +173,7 @@ struct ConstantOpLowering : public OpRewritePattern { SmallVector constantIndices; if (!valueShape.empty()) { - for (auto i : llvm::seq( - 0, *std::max_element(valueShape.begin(), valueShape.end()))) + for (auto i : llvm::seq(0, *llvm::max_element(valueShape))) constantIndices.push_back( rewriter.create(loc, i)); } else { diff --git a/mlir/examples/toy/Ch7/mlir/LowerToAffineLoops.cpp b/mlir/examples/toy/Ch7/mlir/LowerToAffineLoops.cpp index ae4bd980c34b5..bded61542188e 100644 --- a/mlir/examples/toy/Ch7/mlir/LowerToAffineLoops.cpp +++ b/mlir/examples/toy/Ch7/mlir/LowerToAffineLoops.cpp @@ -173,8 +173,7 @@ struct ConstantOpLowering : public OpRewritePattern { SmallVector constantIndices; if (!valueShape.empty()) { - for (auto i : llvm::seq( - 0, *std::max_element(valueShape.begin(), valueShape.end()))) + for (auto i : llvm::seq(0, *llvm::max_element(valueShape))) constantIndices.push_back( rewriter.create(loc, i)); } else { diff --git a/mlir/lib/Conversion/PDLToPDLInterp/PredicateTree.cpp b/mlir/lib/Conversion/PDLToPDLInterp/PredicateTree.cpp index 419ea86391978..fe27a22294914 100644 --- a/mlir/lib/Conversion/PDLToPDLInterp/PredicateTree.cpp +++ b/mlir/lib/Conversion/PDLToPDLInterp/PredicateTree.cpp @@ -272,8 +272,7 @@ static void getConstraintPredicates(pdl::ApplyNativeConstraintOp op, allPositions.push_back(inputs.lookup(arg)); // Push the constraint to the furthest position. - Position *pos = *std::max_element(allPositions.begin(), allPositions.end(), - comparePosDepth); + Position *pos = *llvm::max_element(allPositions, comparePosDepth); ResultRange results = op.getResults(); PredicateBuilder::Predicate pred = builder.getConstraint( op.getName(), allPositions, SmallVector(results.getTypes()), diff --git a/mlir/lib/Dialect/Affine/IR/AffineOps.cpp b/mlir/lib/Dialect/Affine/IR/AffineOps.cpp index a4df863ab0834..8a070d2563987 100644 --- a/mlir/lib/Dialect/Affine/IR/AffineOps.cpp +++ b/mlir/lib/Dialect/Affine/IR/AffineOps.cpp @@ -3269,8 +3269,8 @@ static OpFoldResult foldMinMaxOp(T op, ArrayRef operands) { // Otherwise, completely fold the op into a constant. auto resultIt = std::is_same::value - ? std::min_element(results.begin(), results.end()) - : std::max_element(results.begin(), results.end()); + ? llvm::min_element(results) + : llvm::max_element(results); if (resultIt == results.end()) return {}; return IntegerAttr::get(IndexType::get(op.getContext()), *resultIt); diff --git a/mlir/lib/Dialect/Affine/Utils/LoopUtils.cpp b/mlir/lib/Dialect/Affine/Utils/LoopUtils.cpp index 3794ef2dabe1e..af59973d7a92c 100644 --- a/mlir/lib/Dialect/Affine/Utils/LoopUtils.cpp +++ b/mlir/lib/Dialect/Affine/Utils/LoopUtils.cpp @@ -261,7 +261,7 @@ LogicalResult mlir::affine::affineForOpBodySkew(AffineForOp forOp, unsigned numChildOps = shifts.size(); // Do a linear time (counting) sort for the shifts. - uint64_t maxShift = *std::max_element(shifts.begin(), shifts.end()); + uint64_t maxShift = *llvm::max_element(shifts); if (maxShift >= numChildOps) { // Large shifts are not the typical use case. forOp.emitWarning("not shifting because shifts are unrealistically large"); diff --git a/mlir/lib/Dialect/GPU/TransformOps/GPUTransformOps.cpp b/mlir/lib/Dialect/GPU/TransformOps/GPUTransformOps.cpp index 07da222055d41..ada985b5979e2 100644 --- a/mlir/lib/Dialect/GPU/TransformOps/GPUTransformOps.cpp +++ b/mlir/lib/Dialect/GPU/TransformOps/GPUTransformOps.cpp @@ -442,9 +442,8 @@ static DiagnosedSilenceableFailure rewriteOneForallCommonImpl( // Step 1.b. In the linear case, compute the max mapping to avoid needlessly // mapping all dimensions. In the 3-D mapping case we need to map all // dimensions. - DeviceMappingAttrInterface maxMapping = - cast(*std::max_element( - forallMappingAttrs.begin(), forallMappingAttrs.end(), comparator)); + DeviceMappingAttrInterface maxMapping = cast( + *llvm::max_element(forallMappingAttrs, comparator)); DeviceMappingAttrInterface maxLinearMapping; if (maxMapping.isLinearMapping()) maxLinearMapping = maxMapping; diff --git a/mlir/lib/Dialect/Linalg/Transforms/ConvertToDestinationStyle.cpp b/mlir/lib/Dialect/Linalg/Transforms/ConvertToDestinationStyle.cpp index ff13aaf9b4abc..b95677b7457e6 100644 --- a/mlir/lib/Dialect/Linalg/Transforms/ConvertToDestinationStyle.cpp +++ b/mlir/lib/Dialect/Linalg/Transforms/ConvertToDestinationStyle.cpp @@ -361,7 +361,7 @@ FailureOr mlir::linalg::rewriteInDestinationPassingStyle( } // Create constants for the range of possible indices [0, max{shape_i}). - auto maxDim = *std::max_element(shape.begin(), shape.end()); + auto maxDim = *llvm::max_element(shape); SmallVector constants; constants.reserve(maxDim); for (int i = 0; i < maxDim; ++i) diff --git a/mlir/lib/Dialect/SPIRV/Transforms/UnifyAliasedResourcePass.cpp b/mlir/lib/Dialect/SPIRV/Transforms/UnifyAliasedResourcePass.cpp index 49382856a64cb..07cf26926a1df 100644 --- a/mlir/lib/Dialect/SPIRV/Transforms/UnifyAliasedResourcePass.cpp +++ b/mlir/lib/Dialect/SPIRV/Transforms/UnifyAliasedResourcePass.cpp @@ -119,7 +119,7 @@ deduceCanonicalResource(ArrayRef types) { // Choose the *vector* with the smallest bitwidth as the canonical resource, // so that we can still keep vectorized load/store and avoid partial updates // to large vectors. - auto *minVal = std::min_element(vectorNumBits.begin(), vectorNumBits.end()); + auto *minVal = llvm::min_element(vectorNumBits); // Make sure that the canonical resource's bitwidth is divisible by others. // With out this, we cannot properly adjust the index later. if (llvm::any_of(vectorNumBits, @@ -139,7 +139,7 @@ deduceCanonicalResource(ArrayRef types) { // All element types are scalars. Then choose the smallest bitwidth as the // cannonical resource to avoid subcomponent load/store. - auto *minVal = std::min_element(scalarNumBits.begin(), scalarNumBits.end()); + auto *minVal = llvm::min_element(scalarNumBits); if (llvm::any_of(scalarNumBits, [minVal](int64_t bit) { return bit % *minVal != 0; })) return std::nullopt; diff --git a/mlir/lib/Dialect/Tensor/Transforms/BufferizableOpInterfaceImpl.cpp b/mlir/lib/Dialect/Tensor/Transforms/BufferizableOpInterfaceImpl.cpp index 957f6314f3587..58ea4cc4da3c3 100644 --- a/mlir/lib/Dialect/Tensor/Transforms/BufferizableOpInterfaceImpl.cpp +++ b/mlir/lib/Dialect/Tensor/Transforms/BufferizableOpInterfaceImpl.cpp @@ -508,7 +508,7 @@ struct FromElementsOpInterface } // Create constants for the range of possible indices [0, max{shape_i}). - auto maxDim = *std::max_element(shape.begin(), shape.end()); + auto maxDim = *llvm::max_element(shape); SmallVector constants; constants.reserve(maxDim); for (int i = 0; i < maxDim; ++i) diff --git a/mlir/lib/IR/AffineMap.cpp b/mlir/lib/IR/AffineMap.cpp index 4aa0d4f34a09f..00a0f05b63330 100644 --- a/mlir/lib/IR/AffineMap.cpp +++ b/mlir/lib/IR/AffineMap.cpp @@ -249,7 +249,7 @@ AffineMap AffineMap::getPermutationMap(ArrayRef permutation, MLIRContext *context) { assert(!permutation.empty() && "Cannot create permutation map from empty permutation vector"); - const auto *m = std::max_element(permutation.begin(), permutation.end()); + const auto *m = llvm::max_element(permutation); auto permutationMap = getMultiDimMapWithTargets(*m + 1, permutation, context); assert(permutationMap.isPermutation() && "Invalid permutation vector"); return permutationMap; diff --git a/mlir/lib/Reducer/ReductionNode.cpp b/mlir/lib/Reducer/ReductionNode.cpp index b4596419ed17e..d57ee932bfcae 100644 --- a/mlir/lib/Reducer/ReductionNode.cpp +++ b/mlir/lib/Reducer/ReductionNode.cpp @@ -74,8 +74,8 @@ ArrayRef ReductionNode::generateNewVariants() { // the above example, we split the range {4, 9} into {4, 6}, {6, 9}, and // create two variants with range {{1, 3}, {4, 6}} and {{1, 3}, {6, 9}}. The // final ranges vector will be {{1, 3}, {4, 6}, {6, 9}}. - auto maxElement = std::max_element( - ranges.begin(), ranges.end(), [](const Range &lhs, const Range &rhs) { + auto maxElement = + llvm::max_element(ranges, [](const Range &lhs, const Range &rhs) { return (lhs.second - lhs.first) > (rhs.second - rhs.first); });