aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/LTO/LTO.cpp
diff options
context:
space:
mode:
authorJordan Rupprecht <rupprecht@google.com>2020-10-09 14:36:20 -0700
committerJordan Rupprecht <rupprecht@google.com>2020-10-09 14:36:20 -0700
commit9b5b3050237db3642ed7ab1bdb3ffa2202511b99 (patch)
treeeb44a35fc63bc5c6edbf11bdf90d39e8b767f255 /llvm/lib/LTO/LTO.cpp
parentd8f58bf53a98574ef14568fd830edac5d1fb37f3 (diff)
downloadllvm-9b5b3050237db3642ed7ab1bdb3ffa2202511b99.zip
llvm-9b5b3050237db3642ed7ab1bdb3ffa2202511b99.tar.gz
llvm-9b5b3050237db3642ed7ab1bdb3ffa2202511b99.tar.bz2
Temporarily revert "[ThinLTO] Re-order modules for optimal multi-threaded processing"
This reverts commit 6537004913f3009d896bc30856698e7d22199ba7. This is causing test failures internally, and while a few of the cases turned out to be bad user code (relying on a specific order of static initialization across translation units), some cases are less clear. Temporarily reverting for now, and Teresa is going to follow up with more details.
Diffstat (limited to 'llvm/lib/LTO/LTO.cpp')
-rw-r--r--llvm/lib/LTO/LTO.cpp33
1 files changed, 6 insertions, 27 deletions
diff --git a/llvm/lib/LTO/LTO.cpp b/llvm/lib/LTO/LTO.cpp
index 4fbb3ad..6230216 100644
--- a/llvm/lib/LTO/LTO.cpp
+++ b/llvm/lib/LTO/LTO.cpp
@@ -1443,21 +1443,15 @@ Error LTO::runThinLTO(AddStreamFn AddStream, NativeObjectCache Cache,
auto &ModuleMap =
ThinLTO.ModulesToCompile ? *ThinLTO.ModulesToCompile : ThinLTO.ModuleMap;
- std::vector<BitcodeModule *> ModulesVec;
- ModulesVec.reserve(ModuleMap.size());
- for (auto &Mod : ModuleMap)
- ModulesVec.push_back(&Mod.second);
- std::vector<int> ModulesOrdering = generateModulesOrdering(ModulesVec);
-
// Tasks 0 through ParallelCodeGenParallelismLevel-1 are reserved for combined
// module and parallel code generation partitions.
- for (auto IndexCount : ModulesOrdering) {
- auto &Mod = *(ModuleMap.begin() + IndexCount);
- if (Error E = BackendProc->start(
- RegularLTO.ParallelCodeGenParallelismLevel + IndexCount, Mod.second,
- ImportLists[Mod.first], ExportLists[Mod.first],
- ResolvedODR[Mod.first], ThinLTO.ModuleMap))
+ unsigned Task = RegularLTO.ParallelCodeGenParallelismLevel;
+ for (auto &Mod : ModuleMap) {
+ if (Error E = BackendProc->start(Task, Mod.second, ImportLists[Mod.first],
+ ExportLists[Mod.first],
+ ResolvedODR[Mod.first], ThinLTO.ModuleMap))
return E;
+ ++Task;
}
return BackendProc->wait();
@@ -1501,18 +1495,3 @@ lto::setupStatsFile(StringRef StatsFilename) {
StatsFile->keep();
return std::move(StatsFile);
}
-
-// Compute the ordering we will process the inputs: the rough heuristic here
-// is to sort them per size so that the largest module get schedule as soon as
-// possible. This is purely a compile-time optimization.
-std::vector<int> lto::generateModulesOrdering(ArrayRef<BitcodeModule *> R) {
- std::vector<int> ModulesOrdering;
- ModulesOrdering.resize(R.size());
- std::iota(ModulesOrdering.begin(), ModulesOrdering.end(), 0);
- llvm::sort(ModulesOrdering, [&](int LeftIndex, int RightIndex) {
- auto LSize = R[LeftIndex]->getBuffer().size();
- auto RSize = R[RightIndex]->getBuffer().size();
- return LSize > RSize;
- });
- return ModulesOrdering;
-}