[Mlir-commits] [mlir] fab2bb8 - Add llvm::min/max_element and use it in llvm/ and mlir/ directories. (#84678)
llvmlistbot at llvm.org
llvmlistbot at llvm.org
Sun Mar 10 20:00:17 PDT 2024
Author: Justin Lebar
Date: 2024-03-10T20:00:13-07:00
New Revision: fab2bb8bfda865bd438dee981d7be7df8017b76d
URL: https://github.com/llvm/llvm-project/commit/fab2bb8bfda865bd438dee981d7be7df8017b76d
DIFF: https://github.com/llvm/llvm-project/commit/fab2bb8bfda865bd438dee981d7be7df8017b76d.diff
LOG: Add llvm::min/max_element and use it in llvm/ and mlir/ directories. (#84678)
For some reason this was missing from STLExtras.
Added:
Modified:
llvm/include/llvm/ADT/STLExtras.h
llvm/include/llvm/CodeGen/RegAllocPBQP.h
llvm/lib/Analysis/ScalarEvolution.cpp
llvm/lib/DebugInfo/PDB/Native/PDBFile.cpp
llvm/lib/IR/DataLayout.cpp
llvm/lib/ObjCopy/MachO/MachOWriter.cpp
llvm/lib/ProfileData/GCOV.cpp
llvm/lib/Target/AArch64/SVEIntrinsicOpts.cpp
llvm/lib/Target/AMDGPU/GCNILPSched.cpp
llvm/lib/Target/AMDGPU/SIFixSGPRCopies.cpp
llvm/lib/Target/AMDGPU/SIMachineScheduler.cpp
llvm/lib/Target/Hexagon/HexagonCommonGEP.cpp
llvm/lib/Target/Hexagon/HexagonConstExtenders.cpp
llvm/lib/Target/Hexagon/HexagonGenInsert.cpp
llvm/lib/Target/Hexagon/HexagonVectorCombine.cpp
llvm/lib/Transforms/Scalar/GVNSink.cpp
llvm/lib/Transforms/Scalar/JumpThreading.cpp
llvm/lib/Transforms/Scalar/LoopLoadElimination.cpp
llvm/lib/Transforms/Utils/SimplifyCFG.cpp
llvm/lib/Transforms/Vectorize/LoadStoreVectorizer.cpp
llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
llvm/tools/llvm-exegesis/lib/LatencyBenchmarkRunner.cpp
llvm/tools/llvm-mca/Views/BottleneckAnalysis.cpp
llvm/tools/llvm-mca/Views/SchedulerStatistics.cpp
llvm/tools/llvm-pdbutil/DumpOutputStyle.cpp
llvm/tools/llvm-pdbutil/MinimalTypeDumper.cpp
llvm/tools/llvm-rc/ResourceFileWriter.cpp
llvm/utils/FileCheck/FileCheck.cpp
llvm/utils/TableGen/CodeGenSchedule.cpp
llvm/utils/TableGen/RegisterInfoEmitter.cpp
mlir/examples/toy/Ch5/mlir/LowerToAffineLoops.cpp
mlir/examples/toy/Ch6/mlir/LowerToAffineLoops.cpp
mlir/examples/toy/Ch7/mlir/LowerToAffineLoops.cpp
mlir/lib/Conversion/PDLToPDLInterp/PredicateTree.cpp
mlir/lib/Dialect/Affine/IR/AffineOps.cpp
mlir/lib/Dialect/Affine/Utils/LoopUtils.cpp
mlir/lib/Dialect/GPU/TransformOps/GPUTransformOps.cpp
mlir/lib/Dialect/Linalg/Transforms/ConvertToDestinationStyle.cpp
mlir/lib/Dialect/SPIRV/Transforms/UnifyAliasedResourcePass.cpp
mlir/lib/Dialect/Tensor/Transforms/BufferizableOpInterfaceImpl.cpp
mlir/lib/IR/AffineMap.cpp
mlir/lib/Reducer/ReductionNode.cpp
Removed:
################################################################################
diff --git a/llvm/include/llvm/ADT/STLExtras.h b/llvm/include/llvm/ADT/STLExtras.h
index 15845dd9333c75..5ac549c4475605 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<T>(Value), C);
}
+template <typename R> auto min_element(R &&Range) {
+ return std::min_element(adl_begin(Range), adl_end(Range));
+}
+
+template <typename R, typename Compare> auto min_element(R &&Range, Compare C) {
+ return std::min_element(adl_begin(Range), adl_end(Range), C);
+}
+
+template <typename R> auto max_element(R &&Range) {
+ return std::max_element(adl_begin(Range), adl_end(Range));
+}
+
+template <typename R, typename Compare> auto max_element(R &&Range, Compare C) {
+ return std::max_element(adl_begin(Range), adl_end(Range), C);
+}
+
template <typename R>
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 1ea8840947bc88..234f1c6ff115ac 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 acc0aa23107bb5..515b9d0744f6e3 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 471d183a5f539f..0232cae6e38979 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 a2f5714c706874..27411653324874 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 f416796496e9dd..1ff741c830bdb4 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 fcfeb5b0f5844c..ee61784abade58 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 880ff8498b876e..fe68203ad5392d 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<ScalableVectorType>(PTrue1->getType());
auto *PTrue2VTy = cast<ScalableVectorType>(PTrue2->getType());
return PTrue1VTy->getElementCount().getKnownMinValue() <
diff --git a/llvm/lib/Target/AMDGPU/GCNILPSched.cpp b/llvm/lib/Target/AMDGPU/GCNILPSched.cpp
index 8629db2e2563ee..559dd0ed0c4134 100644
--- a/llvm/lib/Target/AMDGPU/GCNILPSched.cpp
+++ b/llvm/lib/Target/AMDGPU/GCNILPSched.cpp
@@ -313,11 +313,11 @@ GCNILPScheduler::schedule(ArrayRef<const SUnit*> 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 86980ee851bb1f..8b21c22b449710 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 677f1590287eb4..4476adf95f8d37 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 5ad749074a8e29..4ead8c68cb9014 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<const NodeSet *, GepNode *>;
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<ProjMap::iterator,bool> 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 400bb6cfc7319b..f2a02fe9540bfa 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 44f21dbacd3c2c..1e373f6061bbfc 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 7231388445d515..797b798520aa15 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 2b38831139a580..d4907326eb0a5a 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 a04987ce66241b..221b122caba202 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<BranchProbability, 4> BBSuccProbs;
if (MaxBBSuccFreq == 0)
diff --git a/llvm/lib/Transforms/Scalar/LoopLoadElimination.cpp b/llvm/lib/Transforms/Scalar/LoopLoadElimination.cpp
index 914cf6e21028ae..edddfb1b92402f 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 fe65e52110f97a..5b9a38c0b74ec7 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<uint64_t> 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 1f11d4894f775c..6ba278794b7fb4 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 36dc9094538ae9..7b99c3ac8c55a5 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 de61fff6432944..684868cf23e8f8 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<int64_t, 4> &Values) {
static int64_t findMin(const SmallVector<int64_t, 4> &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<int64_t, 4> &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<int64_t, 4> &Values) {
diff --git a/llvm/tools/llvm-mca/Views/BottleneckAnalysis.cpp b/llvm/tools/llvm-mca/Views/BottleneckAnalysis.cpp
index b702113b39617a..409a7010b80c8d 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 06caeda344c823..43f8b62864af74 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<const unsigned, unsigned> &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 5ce663e2efc9a9..63b173a727ce60 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<std::string> 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 a4077820eb03c8..db3a752d581650 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 9738fd49343a6f..d507525970ec84 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<uint16_t>(
- *std::max_element(FileVer.begin(), FileVer.end()), "FILEVERSION fields"));
+ RETURN_IF_ERROR(checkNumberFits<uint16_t>(*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<uint16_t>(
- *std::max_element(ProdVer.begin(), ProdVer.end()),
- "PRODUCTVERSION fields"));
+ RETURN_IF_ERROR(checkNumberFits<uint16_t>(*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 e74a79e1312b25..a96251867c084e 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 d819016f8b5610..0e81623a6aa388 100644
--- a/llvm/utils/TableGen/CodeGenSchedule.cpp
+++ b/llvm/utils/TableGen/CodeGenSchedule.cpp
@@ -287,7 +287,7 @@ static APInt constructOperandMask(ArrayRef<int64_t> 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 8919e07a7547b7..d074e31c624588 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 ae4bd980c34b53..bded61542188e4 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<toy::ConstantOp> {
SmallVector<Value, 8> constantIndices;
if (!valueShape.empty()) {
- for (auto i : llvm::seq<int64_t>(
- 0, *std::max_element(valueShape.begin(), valueShape.end())))
+ for (auto i : llvm::seq<int64_t>(0, *llvm::max_element(valueShape)))
constantIndices.push_back(
rewriter.create<arith::ConstantIndexOp>(loc, i));
} else {
diff --git a/mlir/examples/toy/Ch6/mlir/LowerToAffineLoops.cpp b/mlir/examples/toy/Ch6/mlir/LowerToAffineLoops.cpp
index ae4bd980c34b53..bded61542188e4 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<toy::ConstantOp> {
SmallVector<Value, 8> constantIndices;
if (!valueShape.empty()) {
- for (auto i : llvm::seq<int64_t>(
- 0, *std::max_element(valueShape.begin(), valueShape.end())))
+ for (auto i : llvm::seq<int64_t>(0, *llvm::max_element(valueShape)))
constantIndices.push_back(
rewriter.create<arith::ConstantIndexOp>(loc, i));
} else {
diff --git a/mlir/examples/toy/Ch7/mlir/LowerToAffineLoops.cpp b/mlir/examples/toy/Ch7/mlir/LowerToAffineLoops.cpp
index ae4bd980c34b53..bded61542188e4 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<toy::ConstantOp> {
SmallVector<Value, 8> constantIndices;
if (!valueShape.empty()) {
- for (auto i : llvm::seq<int64_t>(
- 0, *std::max_element(valueShape.begin(), valueShape.end())))
+ for (auto i : llvm::seq<int64_t>(0, *llvm::max_element(valueShape)))
constantIndices.push_back(
rewriter.create<arith::ConstantIndexOp>(loc, i));
} else {
diff --git a/mlir/lib/Conversion/PDLToPDLInterp/PredicateTree.cpp b/mlir/lib/Conversion/PDLToPDLInterp/PredicateTree.cpp
index 419ea863919786..fe27a22294914e 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<Type>(results.getTypes()),
diff --git a/mlir/lib/Dialect/Affine/IR/AffineOps.cpp b/mlir/lib/Dialect/Affine/IR/AffineOps.cpp
index a4df863ab08342..8a070d25639870 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<Attribute> operands) {
// Otherwise, completely fold the op into a constant.
auto resultIt = std::is_same<T, AffineMinOp>::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 3794ef2dabe1e0..af59973d7a92c5 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 07da222055d41f..ada985b5979e2d 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<DeviceMappingAttrInterface>(*std::max_element(
- forallMappingAttrs.begin(), forallMappingAttrs.end(), comparator));
+ DeviceMappingAttrInterface maxMapping = cast<DeviceMappingAttrInterface>(
+ *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 ff13aaf9b4abca..b95677b7457e63 100644
--- a/mlir/lib/Dialect/Linalg/Transforms/ConvertToDestinationStyle.cpp
+++ b/mlir/lib/Dialect/Linalg/Transforms/ConvertToDestinationStyle.cpp
@@ -361,7 +361,7 @@ FailureOr<Operation *> 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<Value, 2> 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 49382856a64cb4..07cf26926a1dfb 100644
--- a/mlir/lib/Dialect/SPIRV/Transforms/UnifyAliasedResourcePass.cpp
+++ b/mlir/lib/Dialect/SPIRV/Transforms/UnifyAliasedResourcePass.cpp
@@ -119,7 +119,7 @@ deduceCanonicalResource(ArrayRef<spirv::SPIRVType> 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<spirv::SPIRVType> 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 957f6314f35876..58ea4cc4da3c36 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<Value, 2> 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 4aa0d4f34a09fa..00a0f05b633303 100644
--- a/mlir/lib/IR/AffineMap.cpp
+++ b/mlir/lib/IR/AffineMap.cpp
@@ -249,7 +249,7 @@ AffineMap AffineMap::getPermutationMap(ArrayRef<unsigned> 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 b4596419ed17e7..d57ee932bfcae0 100644
--- a/mlir/lib/Reducer/ReductionNode.cpp
+++ b/mlir/lib/Reducer/ReductionNode.cpp
@@ -74,8 +74,8 @@ ArrayRef<ReductionNode *> 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);
});
More information about the Mlir-commits
mailing list