diff options
| author | Adrian Prantl <aprantl@apple.com> | 2017-05-19 17:54:58 +0000 |
|---|---|---|
| committer | Adrian Prantl <aprantl@apple.com> | 2017-05-19 17:54:58 +0000 |
| commit | cdd785b6b60984e3cfde609056fe0adcbc1d5bc9 (patch) | |
| tree | 2532e5045e4225a2f91dcc3ecfdc763ad4abf97d /llvm/tools | |
| parent | 420713c40b15822e144d609754c5f761696ed7fb (diff) | |
| download | bcm5719-llvm-cdd785b6b60984e3cfde609056fe0adcbc1d5bc9.tar.gz bcm5719-llvm-cdd785b6b60984e3cfde609056fe0adcbc1d5bc9.zip | |
Rewrite llvm-lto's codegen() using ThinCodeGenerator::run(). NFC-ish.
Differential Revision: https://reviews.llvm.org/D33360
llvm-svn: 303437
Diffstat (limited to 'llvm/tools')
| -rw-r--r-- | llvm/tools/llvm-lto/llvm-lto.cpp | 24 |
1 files changed, 15 insertions, 9 deletions
diff --git a/llvm/tools/llvm-lto/llvm-lto.cpp b/llvm/tools/llvm-lto/llvm-lto.cpp index 2458d3d123c..ccc673be457 100644 --- a/llvm/tools/llvm-lto/llvm-lto.cpp +++ b/llvm/tools/llvm-lto/llvm-lto.cpp @@ -669,24 +669,30 @@ private: if (!ThinLTOIndex.empty()) errs() << "Warning: -thinlto-index ignored for codegen stage"; + std::vector<std::unique_ptr<MemoryBuffer>> InputBuffers; for (auto &Filename : InputFilenames) { LLVMContext Ctx; - auto TheModule = loadModule(Filename, Ctx); - - auto Buffer = ThinGenerator.codegen(*TheModule); + auto InputOrErr = MemoryBuffer::getFile(Filename); + error(InputOrErr, "error " + CurrentActivity); + InputBuffers.push_back(std::move(*InputOrErr)); + ThinGenerator.addModule(Filename, InputBuffers.back()->getBuffer()); + } + ThinGenerator.setCodeGenOnly(true); + ThinGenerator.run(); + for (auto BinName : + zip(ThinGenerator.getProducedBinaries(), InputFilenames)) { std::string OutputName = OutputFilename; - if (OutputName.empty()) { - OutputName = Filename + ".thinlto.o"; - } - if (OutputName == "-") { - outs() << Buffer->getBuffer(); + if (OutputName.empty()) + OutputName = std::get<1>(BinName) + ".thinlto.o"; + else if (OutputName == "-") { + outs() << std::get<0>(BinName)->getBuffer(); return; } std::error_code EC; raw_fd_ostream OS(OutputName, EC, sys::fs::OpenFlags::F_None); error(EC, "error opening the file '" + OutputName + "'"); - OS << Buffer->getBuffer(); + OS << std::get<0>(BinName)->getBuffer(); } } |

