[PATCH] D23600: [LTO] Stop always creating and running an LTO compilation if there is not a single LTO object
Mehdi AMINI via llvm-commits
llvm-commits at lists.llvm.org
Tue Aug 16 23:54:06 PDT 2016
mehdi_amini created this revision.
mehdi_amini added a reviewer: tejohnson.
mehdi_amini added subscribers: llvm-commits, pcc.
Herald added a subscriber: mehdi_amini.
I assume there was a use case, so maybe this strawman patch will help
clarifying if it is legit.
In any case the current situation is not legit: a ThinLTO compilation
should not trigger an unexpected full LTO compilation.
Right now, adding a --save-temps option triggers this and makes the
number of output differs.
https://reviews.llvm.org/D23600
Files:
include/llvm/LTO/LTO.h
lib/LTO/LTO.cpp
Index: lib/LTO/LTO.cpp
===================================================================
--- lib/LTO/LTO.cpp
+++ lib/LTO/LTO.cpp
@@ -221,8 +221,7 @@
LTO::RegularLTOState::RegularLTOState(unsigned ParallelCodeGenParallelismLevel,
Config &Conf)
: ParallelCodeGenParallelismLevel(ParallelCodeGenParallelismLevel),
- Ctx(Conf), CombinedModule(llvm::make_unique<Module>("ld-temp.o", Ctx)),
- Mover(*CombinedModule) {}
+ Ctx(Conf) {}
LTO::ThinLTOState::ThinLTOState(ThinBackend Backend) : Backend(Backend) {
if (!Backend)
@@ -305,8 +304,10 @@
// Add a regular LTO object to the link.
Error LTO::addRegularLTO(std::unique_ptr<InputFile> Input,
ArrayRef<SymbolResolution> Res) {
- RegularLTO.HasModule = true;
-
+ if (!CombinedModule) {
+ CombinedModule = llvm::make_unique<Module>("ld-temp.o", Ctx);
+ Mover = llvm::make_unique<IRMover>(*CombinedModule);
+ }
ErrorOr<std::unique_ptr<object::IRObjectFile>> ObjOrErr =
IRObjectFile::create(Input->Obj->getMemoryBufferRef(), RegularLTO.Ctx);
if (!ObjOrErr)
@@ -364,14 +365,6 @@
SmallPtrSet<GlobalValue *, 8> Used;
collectUsedGlobalVariables(M, Used, /*CompilerUsed*/ false);
- // We need to initialize the target info for the combined regular LTO module
- // in case we have no regular LTO objects. In that case we still need to build
- // it as usual because the client may want to add symbol definitions to it.
- if (RegularLTO.CombinedModule->getTargetTriple().empty()) {
- RegularLTO.CombinedModule->setTargetTriple(M.getTargetTriple());
- RegularLTO.CombinedModule->setDataLayout(M.getDataLayout());
- }
-
MemoryBufferRef MBRef = Input->Obj->getMemoryBufferRef();
ErrorOr<std::unique_ptr<object::ModuleSummaryIndexObjectFile>>
SummaryObjOrErr =
@@ -405,12 +398,8 @@
}
Error LTO::run(AddOutputFn AddOutput) {
- // Invoke regular LTO if there was a regular LTO module to start with,
- // or if there are any hooks that the linker may have used to add
- // its own resolved symbols to the combined module.
- if (RegularLTO.HasModule || Conf.PreOptModuleHook ||
- Conf.PostInternalizeModuleHook || Conf.PostOptModuleHook ||
- Conf.PreCodeGenModuleHook)
+ // Invoke regular LTO if there was a regular LTO module to start with.
+ if (RegularLTO.CombinedModule)
if (auto E = runRegularLTO(AddOutput))
return E;
return runThinLTO(AddOutput);
Index: include/llvm/LTO/LTO.h
===================================================================
--- include/llvm/LTO/LTO.h
+++ include/llvm/LTO/LTO.h
@@ -307,7 +307,7 @@
LTOLLVMContext Ctx;
bool HasModule = false;
std::unique_ptr<Module> CombinedModule;
- IRMover Mover;
+ std::unique_ptr<IRMover> Mover;
} RegularLTO;
struct ThinLTOState {
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D23600.68314.patch
Type: text/x-patch
Size: 2836 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160817/a4e6f62d/attachment.bin>
More information about the llvm-commits
mailing list