diff options
author | Davide Italiano <davide@freebsd.org> | 2016-04-15 02:07:03 +0000 |
---|---|---|
committer | Davide Italiano <davide@freebsd.org> | 2016-04-15 02:07:03 +0000 |
commit | 2abf2e7c8cf2e4b8080030cb27f9e3d2d524976a (patch) | |
tree | 1c61d25872b724e32a3affc430b7347475c09c43 | |
parent | 4cd7c3b7d573647d1dd5c57cdbdb21054f134d88 (diff) | |
download | bcm5719-llvm-2abf2e7c8cf2e4b8080030cb27f9e3d2d524976a.tar.gz bcm5719-llvm-2abf2e7c8cf2e4b8080030cb27f9e3d2d524976a.zip |
Revert "[LTO] Add a new splitCodeGen() API which takes a TargetMachineFactory."
This reverts commits r266390 and r266396 as they broke some bots.
llvm-svn: 266408
-rw-r--r-- | llvm/include/llvm/CodeGen/ParallelCG.h | 15 | ||||
-rw-r--r-- | llvm/lib/CodeGen/ParallelCG.cpp | 46 |
2 files changed, 20 insertions, 41 deletions
diff --git a/llvm/include/llvm/CodeGen/ParallelCG.h b/llvm/include/llvm/CodeGen/ParallelCG.h index 6a04d1e27aa..723ea6a9fe2 100644 --- a/llvm/include/llvm/CodeGen/ParallelCG.h +++ b/llvm/include/llvm/CodeGen/ParallelCG.h @@ -18,8 +18,6 @@ #include "llvm/Support/CodeGen.h" #include "llvm/Target/TargetMachine.h" -#include <functional> - namespace llvm { class Module; @@ -45,19 +43,6 @@ splitCodeGen(std::unique_ptr<Module> M, ArrayRef<raw_pwrite_stream *> OSs, TargetMachine::CodeGenFileType FT = TargetMachine::CGFT_ObjectFile, bool PreserveLocals = false); -/// Split M into OSs.size() partitions, and generate code for each. -/// It is a variant that takes a factory function for the TargetMachine -/// TMFactory. TMFactory needs to be thread safe on the client side. -/// See the other splitCodeGen() for a more detailed description. -/// -/// \returns M if OSs.size() == 1, otherwise returns std::unique_ptr<Module>(). -std::unique_ptr<Module> -splitCodeGen(std::unique_ptr<Module> M, ArrayRef<raw_pwrite_stream *> OSs, - ArrayRef<llvm::raw_pwrite_stream *> BCOSs, - const std::function<std::unique_ptr<TargetMachine>()> &TMFactory, - TargetMachine::CodeGenFileType FT = TargetMachine::CGFT_ObjectFile, - bool PreserveLocals = false); - } // namespace llvm #endif diff --git a/llvm/lib/CodeGen/ParallelCG.cpp b/llvm/lib/CodeGen/ParallelCG.cpp index 7085cb562df..1486af14d4b 100644 --- a/llvm/lib/CodeGen/ParallelCG.cpp +++ b/llvm/lib/CodeGen/ParallelCG.cpp @@ -25,47 +25,39 @@ using namespace llvm; -static void -codegen(Module *M, llvm::raw_pwrite_stream &OS, - const std::function<std::unique_ptr<TargetMachine>()> &TMFactory, - TargetMachine::CodeGenFileType FileType) { - std::unique_ptr<TargetMachine> TM = TMFactory(); +static void codegen(Module *M, llvm::raw_pwrite_stream &OS, + const Target *TheTarget, StringRef CPU, StringRef Features, + const TargetOptions &Options, Reloc::Model RM, + CodeModel::Model CM, CodeGenOpt::Level OL, + TargetMachine::CodeGenFileType FileType) { + std::unique_ptr<TargetMachine> TM(TheTarget->createTargetMachine( + M->getTargetTriple(), CPU, Features, Options, RM, CM, OL)); + legacy::PassManager CodeGenPasses; if (TM->addPassesToEmitFile(CodeGenPasses, OS, FileType)) report_fatal_error("Failed to setup codegen"); CodeGenPasses.run(*M); } -std::unique_ptr<Module> -llvm::splitCodeGen(std::unique_ptr<Module> M, ArrayRef<raw_pwrite_stream *> OSs, - ArrayRef<llvm::raw_pwrite_stream *> BCOSs, StringRef CPU, - StringRef Features, const TargetOptions &Options, - Reloc::Model RM, CodeModel::Model CM, CodeGenOpt::Level OL, - TargetMachine::CodeGenFileType FileType, - bool PreserveLocals) { +std::unique_ptr<Module> llvm::splitCodeGen( + std::unique_ptr<Module> M, ArrayRef<llvm::raw_pwrite_stream *> OSs, + ArrayRef<llvm::raw_pwrite_stream *> BCOSs, StringRef CPU, + StringRef Features, const TargetOptions &Options, Reloc::Model RM, + CodeModel::Model CM, CodeGenOpt::Level OL, + TargetMachine::CodeGenFileType FileType, bool PreserveLocals) { StringRef TripleStr = M->getTargetTriple(); std::string ErrMsg; - const Target *TheTarget = TargetRegistry::lookupTarget(TripleStr, ErrMsg); if (!TheTarget) report_fatal_error(Twine("Target not found: ") + ErrMsg); - return splitCodeGen(std::move(M), OSs, BCOSs, [&]() { - return std::unique_ptr<TargetMachine>(TheTarget->createTargetMachine( - TripleStr, CPU, Features, Options, RM, CM, OL)); - }, FileType, PreserveLocals); -} -std::unique_ptr<Module> llvm::splitCodeGen( - std::unique_ptr<Module> M, ArrayRef<llvm::raw_pwrite_stream *> OSs, - ArrayRef<llvm::raw_pwrite_stream *> BCOSs, - const std::function<std::unique_ptr<TargetMachine>()> &TMFactory, - TargetMachine::CodeGenFileType FileType, bool PreserveLocals) { assert(BCOSs.empty() || BCOSs.size() == OSs.size()); if (OSs.size() == 1) { if (!BCOSs.empty()) WriteBitcodeToFile(M.get(), *BCOSs[0]); - codegen(M.get(), *OSs[0], TMFactory, FileType); + codegen(M.get(), *OSs[0], TheTarget, CPU, Features, Options, RM, CM, OL, + FileType); return M; } @@ -96,7 +88,8 @@ std::unique_ptr<Module> llvm::splitCodeGen( llvm::raw_pwrite_stream *ThreadOS = OSs[ThreadCount++]; // Enqueue the task CodegenThreadPool.async( - [&TMFactory, FileType, ThreadOS](const SmallVector<char, 0> &BC) { + [TheTarget, CPU, Features, Options, RM, CM, OL, FileType, + ThreadOS](const SmallVector<char, 0> &BC) { LLVMContext Ctx; ErrorOr<std::unique_ptr<Module>> MOrErr = parseBitcodeFile( MemoryBufferRef(StringRef(BC.data(), BC.size()), @@ -106,7 +99,8 @@ std::unique_ptr<Module> llvm::splitCodeGen( report_fatal_error("Failed to read bitcode"); std::unique_ptr<Module> MPartInCtx = std::move(MOrErr.get()); - codegen(MPartInCtx.get(), *ThreadOS, TMFactory, FileType); + codegen(MPartInCtx.get(), *ThreadOS, TheTarget, CPU, Features, + Options, RM, CM, OL, FileType); }, // Pass BC using std::move to ensure that it get moved rather than // copied into the thread's context. |