diff options
-rw-r--r-- | lld/ELF/Driver.cpp | 8 | ||||
-rw-r--r-- | lld/ELF/Driver.h | 1 | ||||
-rw-r--r-- | lld/ELF/InputFiles.cpp | 5 | ||||
-rw-r--r-- | lld/ELF/InputFiles.h | 1 | ||||
-rw-r--r-- | lld/ELF/LTO.cpp | 14 | ||||
-rw-r--r-- | lld/ELF/LTO.h | 2 |
6 files changed, 15 insertions, 16 deletions
diff --git a/lld/ELF/Driver.cpp b/lld/ELF/Driver.cpp index 5d638a8c685..09cffcec718 100644 --- a/lld/ELF/Driver.cpp +++ b/lld/ELF/Driver.cpp @@ -170,6 +170,12 @@ static void initLLVM(opt::InputArgList &Args) { InitializeAllAsmPrinters(); InitializeAllAsmParsers(); + // This is a flag to discard all but GlobalValue names. + // We want to enable it by default because it saves memory. + // Disable it only when a developer option (-save-temps) is given. + Driver->Context.setDiscardValueNames(!Config->SaveTemps); + Driver->Context.enableDebugTypeODRUniquing(); + // Parse and evaluate -mllvm options. std::vector<const char *> V; V.push_back("lld (LLVM option parsing)"); @@ -259,8 +265,8 @@ void LinkerDriver::main(ArrayRef<const char *> ArgsArr) { return; } - initLLVM(Args); readConfigs(Args); + initLLVM(Args); if (!Config->Reproduce.empty()) logCommandline(ArgsArr); diff --git a/lld/ELF/Driver.h b/lld/ELF/Driver.h index 28231fbdb3a..f754147aca1 100644 --- a/lld/ELF/Driver.h +++ b/lld/ELF/Driver.h @@ -27,6 +27,7 @@ public: void main(ArrayRef<const char *> Args); void addFile(StringRef Path); void addLibrary(StringRef Name); + llvm::LLVMContext Context; private: std::vector<MemoryBufferRef> getArchiveMembers(MemoryBufferRef MB); diff --git a/lld/ELF/InputFiles.cpp b/lld/ELF/InputFiles.cpp index 31c9122b99c..957f5d8725b 100644 --- a/lld/ELF/InputFiles.cpp +++ b/lld/ELF/InputFiles.cpp @@ -8,6 +8,7 @@ //===----------------------------------------------------------------------===// #include "InputFiles.h" +#include "Driver.h" #include "Error.h" #include "InputSection.h" #include "Symbols.h" @@ -15,7 +16,6 @@ #include "llvm/CodeGen/Analysis.h" #include "llvm/IR/LLVMContext.h" #include "llvm/IR/Module.h" -#include "llvm/Object/IRObjectFile.h" #include "llvm/Support/raw_ostream.h" using namespace llvm; @@ -591,8 +591,7 @@ bool BitcodeFile::shouldSkip(const BasicSymbolRef &Sym) { } void BitcodeFile::parse(DenseSet<StringRef> &ComdatGroups) { - LLVMContext Context; - std::unique_ptr<IRObjectFile> Obj = check(IRObjectFile::create(MB, Context)); + Obj = check(IRObjectFile::create(MB, Driver->Context)); const Module &M = Obj->getModule(); DenseSet<const Comdat *> KeptComdats; diff --git a/lld/ELF/InputFiles.h b/lld/ELF/InputFiles.h index 0c9a2220e1d..326fd5e401e 100644 --- a/lld/ELF/InputFiles.h +++ b/lld/ELF/InputFiles.h @@ -224,6 +224,7 @@ public: void parse(llvm::DenseSet<StringRef> &ComdatGroups); ArrayRef<SymbolBody *> getSymbols() { return SymbolBodies; } static bool shouldSkip(const llvm::object::BasicSymbolRef &Sym); + std::unique_ptr<llvm::object::IRObjectFile> Obj; private: std::vector<SymbolBody *> SymbolBodies; diff --git a/lld/ELF/LTO.cpp b/lld/ELF/LTO.cpp index 8f6f6a31efe..6980993e7f5 100644 --- a/lld/ELF/LTO.cpp +++ b/lld/ELF/LTO.cpp @@ -9,6 +9,7 @@ #include "LTO.h" #include "Config.h" +#include "Driver.h" #include "Error.h" #include "InputFiles.h" #include "Symbols.h" @@ -86,18 +87,11 @@ static bool shouldInternalize(const SmallPtrSet<GlobalValue *, 8> &Used, } BitcodeCompiler::BitcodeCompiler() - : Combined(new llvm::Module("ld-temp.o", Context)), Mover(*Combined) { - // This is a flag to discard all but GlobalValue names. - // We want to enable it by default because it saves memory. - // Disable it only when a developer option (-save-temps) is given. - Context.setDiscardValueNames(!Config->SaveTemps); - - Context.enableDebugTypeODRUniquing(); -} + : Combined(new llvm::Module("ld-temp.o", Driver->Context)), + Mover(*Combined) {} void BitcodeCompiler::add(BitcodeFile &F) { - std::unique_ptr<IRObjectFile> Obj = - check(IRObjectFile::create(F.MB, Context)); + std::unique_ptr<IRObjectFile> Obj = std::move(F.Obj); std::vector<GlobalValue *> Keep; unsigned BodyIndex = 0; ArrayRef<SymbolBody *> Bodies = F.getSymbols(); diff --git a/lld/ELF/LTO.h b/lld/ELF/LTO.h index e7d2e7e3e9f..7cfb1ae2176 100644 --- a/lld/ELF/LTO.h +++ b/lld/ELF/LTO.h @@ -24,7 +24,6 @@ #include "lld/Core/LLVM.h" #include "llvm/ADT/SmallString.h" #include "llvm/ADT/StringSet.h" -#include "llvm/IR/LLVMContext.h" #include "llvm/IR/Module.h" #include "llvm/Linker/IRMover.h" @@ -44,7 +43,6 @@ private: std::vector<std::unique_ptr<InputFile>> runSplitCodegen( const std::function<std::unique_ptr<llvm::TargetMachine>()> &TMFactory); - llvm::LLVMContext Context; std::unique_ptr<llvm::Module> Combined; llvm::IRMover Mover; std::vector<SmallString<0>> OwningData; |