Skip to content
This repository was archived by the owner on Nov 1, 2021. It is now read-only.

Commit bdc30c0

Browse files
committed
Add llvm::for_each as a range-based extensions to <algorithm> and make use of it in some cases where it is a more clear alternative to std::for_each.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@317356 91177308-0d34-0410-b5e6-96231b3b80d8
1 parent b72a3a9 commit bdc30c0

File tree

12 files changed

+92
-89
lines changed

12 files changed

+92
-89
lines changed

include/llvm/ADT/STLExtras.h

+7
Original file line numberDiff line numberDiff line change
@@ -813,6 +813,13 @@ void DeleteContainerSeconds(Container &C) {
813813
C.clear();
814814
}
815815

816+
/// Provide wrappers to std::for_each which take ranges instead of having to
817+
/// pass begin/end explicitly.
818+
template <typename R, typename UnaryPredicate>
819+
UnaryPredicate for_each(R &&Range, UnaryPredicate P) {
820+
return std::for_each(std::begin(Range), std::end(Range), P);
821+
}
822+
816823
/// Provide wrappers to std::all_of which take ranges instead of having to pass
817824
/// begin/end explicitly.
818825
template <typename R, typename UnaryPredicate>

lib/LTO/LTOCodeGenerator.cpp

+9-11
Original file line numberDiff line numberDiff line change
@@ -469,17 +469,15 @@ void LTOCodeGenerator::restoreLinkageForExternals() {
469469
if (I == ExternalSymbols.end())
470470
return;
471471

472-
GV.setLinkage(I->second);
473-
};
474-
475-
std::for_each(MergedModule->begin(), MergedModule->end(), externalize);
476-
std::for_each(MergedModule->global_begin(), MergedModule->global_end(),
477-
externalize);
478-
std::for_each(MergedModule->alias_begin(), MergedModule->alias_end(),
479-
externalize);
480-
}
481-
482-
void LTOCodeGenerator::verifyMergedModuleOnce() {
472+
GV.setLinkage(I->second);
473+
};
474+
475+
llvm::for_each(MergedModule->functions(), externalize);
476+
llvm::for_each(MergedModule->globals(), externalize);
477+
llvm::for_each(MergedModule->aliases(), externalize);
478+
}
479+
480+
void LTOCodeGenerator::verifyMergedModuleOnce() {
483481
// Only run on the first call.
484482
if (HasVerifiedInput)
485483
return;

lib/Target/Hexagon/HexagonVectorLoopCarriedReuse.cpp

+7-8
Original file line numberDiff line numberDiff line change
@@ -548,14 +548,13 @@ bool HexagonVectorLoopCarriedReuse::doVLCR() {
548548
findValueToReuse();
549549
if (ReuseCandidate.isDefined()) {
550550
reuseValue();
551-
Changed = true;
552-
Continue = true;
553-
}
554-
std::for_each(Dependences.begin(), Dependences.end(),
555-
std::default_delete<DepChain>());
556-
} while (Continue);
557-
return Changed;
558-
}
551+
Changed = true;
552+
Continue = true;
553+
}
554+
llvm::for_each(Dependences, std::default_delete<DepChain>());
555+
} while (Continue);
556+
return Changed;
557+
}
559558

560559
void HexagonVectorLoopCarriedReuse::findDepChainFromPHI(Instruction *I,
561560
DepChain &D) {

lib/Transforms/Utils/SplitModule.cpp

+9-9
Original file line numberDiff line numberDiff line change
@@ -141,15 +141,15 @@ static void findPartitions(Module *M, ClusterIDMapType &ClusterIDMap,
141141
}
142142

143143
if (GV.hasLocalLinkage())
144-
addAllGlobalValueUsers(GVtoClusterMap, &GV, &GV);
145-
};
146-
147-
std::for_each(M->begin(), M->end(), recordGVSet);
148-
std::for_each(M->global_begin(), M->global_end(), recordGVSet);
149-
std::for_each(M->alias_begin(), M->alias_end(), recordGVSet);
150-
151-
// Assigned all GVs to merged clusters while balancing number of objects in
152-
// each.
144+
addAllGlobalValueUsers(GVtoClusterMap, &GV, &GV);
145+
};
146+
147+
llvm::for_each(M->functions(), recordGVSet);
148+
llvm::for_each(M->globals(), recordGVSet);
149+
llvm::for_each(M->aliases(), recordGVSet);
150+
151+
// Assigned all GVs to merged clusters while balancing number of objects in
152+
// each.
153153
auto CompareClusters = [](const std::pair<unsigned, unsigned> &a,
154154
const std::pair<unsigned, unsigned> &b) {
155155
if (a.second || b.second)

tools/llvm-cxxdump/llvm-cxxdump.cpp

+7-8
Original file line numberDiff line numberDiff line change
@@ -546,11 +546,10 @@ int main(int argc, const char *argv[]) {
546546
cl::ParseCommandLineOptions(argc, argv, "LLVM C++ ABI Data Dumper\n");
547547

548548
// Default to stdin if no filename is specified.
549-
if (opts::InputFilenames.size() == 0)
550-
opts::InputFilenames.push_back("-");
551-
552-
std::for_each(opts::InputFilenames.begin(), opts::InputFilenames.end(),
553-
dumpInput);
554-
555-
return EXIT_SUCCESS;
556-
}
549+
if (opts::InputFilenames.size() == 0)
550+
opts::InputFilenames.push_back("-");
551+
552+
llvm::for_each(opts::InputFilenames, dumpInput);
553+
554+
return EXIT_SUCCESS;
555+
}

tools/llvm-mcmarkup/llvm-mcmarkup.cpp

+6-7
Original file line numberDiff line numberDiff line change
@@ -217,10 +217,9 @@ int main(int argc, char **argv) {
217217
ToolName = argv[0];
218218

219219
// If no input files specified, read from stdin.
220-
if (InputFilenames.size() == 0)
221-
InputFilenames.push_back("-");
222-
223-
std::for_each(InputFilenames.begin(), InputFilenames.end(),
224-
parseMCMarkup);
225-
return 0;
226-
}
220+
if (InputFilenames.size() == 0)
221+
InputFilenames.push_back("-");
222+
223+
llvm::for_each(InputFilenames, parseMCMarkup);
224+
return 0;
225+
}

tools/llvm-nm/llvm-nm.cpp

+1-2
Original file line numberDiff line numberDiff line change
@@ -1977,8 +1977,7 @@ int main(int argc, char **argv) {
19771977
if (NoDyldInfo && (AddDyldInfo || DyldInfoOnly))
19781978
error("-no-dyldinfo can't be used with -add-dyldinfo or -dyldinfo-only");
19791979

1980-
std::for_each(InputFilenames.begin(), InputFilenames.end(),
1981-
dumpSymbolNamesFromFile);
1980+
llvm::for_each(InputFilenames, dumpSymbolNamesFromFile);
19821981

19831982
if (HadError)
19841983
return 1;

tools/llvm-objdump/llvm-objdump.cpp

+7-8
Original file line numberDiff line numberDiff line change
@@ -2183,11 +2183,10 @@ int main(int argc, char **argv) {
21832183
&& !PrintFaultMaps
21842184
&& DwarfDumpType == DIDT_Null) {
21852185
cl::PrintHelpMessage();
2186-
return 2;
2187-
}
2188-
2189-
std::for_each(InputFilenames.begin(), InputFilenames.end(),
2190-
DumpInput);
2191-
2192-
return EXIT_SUCCESS;
2193-
}
2186+
return 2;
2187+
}
2188+
2189+
llvm::for_each(InputFilenames, DumpInput);
2190+
2191+
return EXIT_SUCCESS;
2192+
}

tools/llvm-pdbutil/llvm-pdbutil.cpp

+11-14
Original file line numberDiff line numberDiff line change
@@ -1199,20 +1199,17 @@ int main(int argc_, const char *argv_[]) {
11991199
opts::pretty::ExcludeCompilands.push_back(
12001200
"f:\\\\binaries\\\\Intermediate\\\\vctools\\\\crt_bld");
12011201
opts::pretty::ExcludeCompilands.push_back("f:\\\\dd\\\\vctools\\\\crt");
1202-
opts::pretty::ExcludeCompilands.push_back(
1203-
"d:\\\\th.obj.x86fre\\\\minkernel");
1204-
}
1205-
std::for_each(opts::pretty::InputFilenames.begin(),
1206-
opts::pretty::InputFilenames.end(), dumpPretty);
1207-
} else if (opts::DumpSubcommand) {
1208-
std::for_each(opts::dump::InputFilenames.begin(),
1209-
opts::dump::InputFilenames.end(), dumpRaw);
1210-
} else if (opts::BytesSubcommand) {
1211-
std::for_each(opts::bytes::InputFilenames.begin(),
1212-
opts::bytes::InputFilenames.end(), dumpBytes);
1213-
} else if (opts::DiffSubcommand) {
1214-
for (StringRef S : opts::diff::RawModiEquivalences) {
1215-
StringRef Left;
1202+
opts::pretty::ExcludeCompilands.push_back(
1203+
"d:\\\\th.obj.x86fre\\\\minkernel");
1204+
}
1205+
llvm::for_each(opts::pretty::InputFilenames, dumpPretty);
1206+
} else if (opts::DumpSubcommand) {
1207+
llvm::for_each(opts::dump::InputFilenames, dumpRaw);
1208+
} else if (opts::BytesSubcommand) {
1209+
llvm::for_each(opts::bytes::InputFilenames, dumpBytes);
1210+
} else if (opts::DiffSubcommand) {
1211+
for (StringRef S : opts::diff::RawModiEquivalences) {
1212+
StringRef Left;
12161213
StringRef Right;
12171214
std::tie(Left, Right) = S.split(',');
12181215
uint32_t X, Y;

tools/llvm-readobj/llvm-readobj.cpp

+7-8
Original file line numberDiff line numberDiff line change
@@ -566,14 +566,13 @@ int main(int argc, const char *argv[]) {
566566
cl::ParseCommandLineOptions(argc, argv, "LLVM Object Reader\n");
567567

568568
// Default to stdin if no filename is specified.
569-
if (opts::InputFilenames.size() == 0)
570-
opts::InputFilenames.push_back("-");
571-
572-
std::for_each(opts::InputFilenames.begin(), opts::InputFilenames.end(),
573-
dumpInput);
574-
575-
if (opts::CodeViewMergedTypes) {
576-
ScopedPrinter W(outs());
569+
if (opts::InputFilenames.size() == 0)
570+
opts::InputFilenames.push_back("-");
571+
572+
llvm::for_each(opts::InputFilenames, dumpInput);
573+
574+
if (opts::CodeViewMergedTypes) {
575+
ScopedPrinter W(outs());
577576
dumpCodeViewMergedTypes(W, CVTypes.IDTable, CVTypes.TypeTable);
578577
}
579578

tools/llvm-size/llvm-size.cpp

+7-8
Original file line numberDiff line numberDiff line change
@@ -880,14 +880,13 @@ int main(int argc, char **argv) {
880880
}
881881

882882
if (InputFilenames.size() == 0)
883-
InputFilenames.push_back("a.out");
884-
885-
MoreThanOneFile = InputFilenames.size() > 1;
886-
std::for_each(InputFilenames.begin(), InputFilenames.end(),
887-
printFileSectionSizes);
888-
if (OutputFormat == berkeley && TotalSizes)
889-
printBerkelyTotals();
890-
883+
InputFilenames.push_back("a.out");
884+
885+
MoreThanOneFile = InputFilenames.size() > 1;
886+
llvm::for_each(InputFilenames, printFileSectionSizes);
887+
if (OutputFormat == berkeley && TotalSizes)
888+
printBerkelyTotals();
889+
891890
if (HadError)
892891
return 1;
893892
}

unittests/ADT/STLExtrasTest.cpp

+14-6
Original file line numberDiff line numberDiff line change
@@ -252,12 +252,20 @@ TEST(STLExtrasTest, CountAdaptor) {
252252
EXPECT_EQ(3, count(v, 1));
253253
EXPECT_EQ(2, count(v, 2));
254254
EXPECT_EQ(1, count(v, 3));
255-
EXPECT_EQ(1, count(v, 4));
256-
}
257-
258-
TEST(STLExtrasTest, ToVector) {
259-
std::vector<char> v = {'a', 'b', 'c'};
260-
auto Enumerated = to_vector<4>(enumerate(v));
255+
EXPECT_EQ(1, count(v, 4));
256+
}
257+
258+
TEST(STLExtrasTest, for_each) {
259+
std::vector<int> v{ 0, 1, 2, 3, 4 };
260+
int count = 0;
261+
262+
llvm::for_each(v, [&count](int) { ++count; });
263+
EXPECT_EQ(5, count);
264+
}
265+
266+
TEST(STLExtrasTest, ToVector) {
267+
std::vector<char> v = {'a', 'b', 'c'};
268+
auto Enumerated = to_vector<4>(enumerate(v));
261269
ASSERT_EQ(3u, Enumerated.size());
262270
for (size_t I = 0; I < v.size(); ++I) {
263271
EXPECT_EQ(I, Enumerated[I].index());

0 commit comments

Comments
 (0)