ELF: Split BitcodeCompiler::compile.

http://reviews.llvm.org/D18410

llvm-svn: 264193
This commit is contained in:
Rui Ueyama 2016-03-23 21:19:27 +00:00
parent f2e71244c6
commit 961f2ff21e
2 changed files with 14 additions and 17 deletions

View File

@ -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();

View File

@ -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};