diff options
| -rw-r--r-- | lld/ELF/LTO.cpp | 29 | ||||
| -rw-r--r-- | lld/ELF/LTO.h | 2 |
2 files changed, 14 insertions, 17 deletions
diff --git a/lld/ELF/LTO.cpp b/lld/ELF/LTO.cpp index 7197227a25a..7b1c31ac693 100644 --- a/lld/ELF/LTO.cpp +++ b/lld/ELF/LTO.cpp @@ -111,23 +111,7 @@ std::unique_ptr<elf::ObjectFile<ELFT>> BitcodeCompiler::compile() { if (Config->SaveTemps) saveBCFile(Combined, ".lto.bc"); - StringRef TripleStr = Combined.getTargetTriple(); - Triple TheTriple(TripleStr); - - // FIXME: Should we have a default triple? The gold plugin uses - // sys::getDefaultTargetTriple(), but that is probably wrong given that this - // might be a cross linker. - - std::string ErrMsg; - const Target *TheTarget = TargetRegistry::lookupTarget(TripleStr, ErrMsg); - if (!TheTarget) - fatal("target not found: " + ErrMsg); - - TargetOptions Options; - Reloc::Model R = Config->Pic ? Reloc::PIC_ : Reloc::Static; - std::unique_ptr<TargetMachine> TM( - TheTarget->createTargetMachine(TripleStr, "", "", Options, R)); - + std::unique_ptr<TargetMachine> TM(getTargetMachine()); runLTOPasses(Combined, *TM); raw_svector_ostream OS(OwningData); @@ -146,6 +130,17 @@ std::unique_ptr<elf::ObjectFile<ELFT>> BitcodeCompiler::compile() { return std::unique_ptr<ObjectFile<ELFT>>(OF); } +TargetMachine *BitcodeCompiler::getTargetMachine() { + StringRef TripleStr = Combined.getTargetTriple(); + std::string Msg; + const Target *T = TargetRegistry::lookupTarget(TripleStr, Msg); + if (!T) + fatal("target not found: " + Msg); + TargetOptions Options; + Reloc::Model R = Config->Pic ? Reloc::PIC_ : Reloc::Static; + return T->createTargetMachine(TripleStr, "", "", Options, R); +} + template std::unique_ptr<elf::ObjectFile<ELF32LE>> BitcodeCompiler::compile(); template std::unique_ptr<elf::ObjectFile<ELF32BE>> BitcodeCompiler::compile(); template std::unique_ptr<elf::ObjectFile<ELF64LE>> BitcodeCompiler::compile(); diff --git a/lld/ELF/LTO.h b/lld/ELF/LTO.h index 266c70cc26d..bc4d5b053b3 100644 --- a/lld/ELF/LTO.h +++ b/lld/ELF/LTO.h @@ -39,6 +39,8 @@ public: template <class ELFT> std::unique_ptr<ObjectFile<ELFT>> compile(); private: + llvm::TargetMachine *getTargetMachine(); + llvm::LLVMContext Context; llvm::Module Combined{"ld-temp.o", Context}; llvm::IRMover Mover{Combined}; |

