aboutsummaryrefslogtreecommitdiff
path: root/tools/lto/LTOCodeGenerator.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tools/lto/LTOCodeGenerator.cpp')
-rw-r--r--tools/lto/LTOCodeGenerator.cpp62
1 files changed, 0 insertions, 62 deletions
diff --git a/tools/lto/LTOCodeGenerator.cpp b/tools/lto/LTOCodeGenerator.cpp
index 5a597d001d..b716da5707 100644
--- a/tools/lto/LTOCodeGenerator.cpp
+++ b/tools/lto/LTOCodeGenerator.cpp
@@ -98,68 +98,6 @@ bool LTOCodeGenerator::addModule(LTOModule* mod, std::string& errMsg) {
return ret;
}
-// @LOCALMOD-BEGIN
-/// Add a module that will be merged with the final output module.
-/// The merging does not happen until linkGatheredModulesAndDispose().
-void LTOCodeGenerator::gatherModuleForLinking(LTOModule* mod) {
- _gatheredModules.push_back(mod);
-}
-
-/// Merge all modules gathered from gatherModuleForLinking(), and
-/// destroy the source modules in the process.
-bool LTOCodeGenerator::linkGatheredModulesAndDispose(std::string& errMsg) {
-
- // We gather the asm undefs earlier than addModule() does,
- // since we delete the modules during linking, and would not be
- // able to do this after linking. The undefs vector contain lists
- // of global variable names which are considered "used", which will be
- // appended into the "llvm.compiler.used" list. The names must be the
- // same before linking as they are after linking, since we have switched
- // the order.
- for (unsigned i = 0, ei = _gatheredModules.size(); i != ei; ++i) {
- const std::vector<const char*> &undefs =
- _gatheredModules[i]->getAsmUndefinedRefs();
- for (int j = 0, ej = undefs.size(); j != ej; ++j) {
- _asmUndefinedRefs[undefs[j]] = 1;
- }
- }
-
- // Tree-reduce the mods, re-using the incoming mods as scratch
- // intermediate results. Module i is linked with (i + stride), with i as
- // the dest. We begin with a stride of 1, and double each time. E.g.,
- // after the first round, only the even-indexed modules are still available,
- // and after the second, only those with index that are a multiple of 4
- // are available. Eventually the Module with the content of all other modules
- // will be Module 0.
- // NOTE: we may be able to be smarter about linking if we did not do them
- // pairwise using Linker::LinkModules. We also disregard module sizes
- // and try our best to keep the modules in order (linking adjacent modules).
- for (unsigned stride = 1, len = _gatheredModules.size();
- stride < len;
- stride *= 2) {
- for (unsigned i = 0; i + stride < len; i = i + (stride * 2)) {
- if (Linker::LinkModules(_gatheredModules[i]->getLLVVMModule(),
- _gatheredModules[i+stride]->getLLVVMModule(),
- Linker::DestroySource, &errMsg)) {
- errs() << "LinkModules " << i << " w/ " << i + stride << " failed...\n";
- // We leak the memory in this case...
- return true;
- }
- delete _gatheredModules[i+stride];
- }
- }
-
- // Finally, link Node 0 with the Dest and delete Node 0.
- if (_linker.linkInModule(_gatheredModules[0]->getLLVVMModule(), &errMsg)) {
- errs() << "LinkModules Dst w/ _gatheredModules[0] failed...\n";
- return true;
- }
- delete _gatheredModules[0];
-
- return false;
-}
-// @LOCALMOD-END
-
bool LTOCodeGenerator::setDebugInfo(lto_debug_model debug,
std::string& errMsg) {
switch (debug) {