diff options
author | Jordan Rupprecht <rupprecht@google.com> | 2020-10-09 14:36:20 -0700 |
---|---|---|
committer | Jordan Rupprecht <rupprecht@google.com> | 2020-10-09 14:36:20 -0700 |
commit | 9b5b3050237db3642ed7ab1bdb3ffa2202511b99 (patch) | |
tree | eb44a35fc63bc5c6edbf11bdf90d39e8b767f255 /llvm/lib/LTO/LTO.cpp | |
parent | d8f58bf53a98574ef14568fd830edac5d1fb37f3 (diff) | |
download | llvm-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.cpp | 33 |
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; -} |