ELF: Split BitcodeCompiler::compile.
authorRui Ueyama <ruiu@google.com>
Wed, 23 Mar 2016 21:19:27 +0000 (21:19 +0000)
committerRui Ueyama <ruiu@google.com>
Wed, 23 Mar 2016 21:19:27 +0000 (21:19 +0000)
http://reviews.llvm.org/D18410

llvm-svn: 264193

lld/ELF/LTO.cpp
lld/ELF/LTO.h

index 7197227..7b1c31a 100644 (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();
index 266c70c..bc4d5b0 100644 (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};