From 2abf2e7c8cf2e4b8080030cb27f9e3d2d524976a Mon Sep 17 00:00:00 2001 From: Davide Italiano Date: Fri, 15 Apr 2016 02:07:03 +0000 Subject: 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 --- llvm/lib/CodeGen/ParallelCG.cpp | 46 ++++++++++++++++++----------------------- 1 file changed, 20 insertions(+), 26 deletions(-) (limited to 'llvm/lib/CodeGen/ParallelCG.cpp') 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()> &TMFactory, - TargetMachine::CodeGenFileType FileType) { - std::unique_ptr 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 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 -llvm::splitCodeGen(std::unique_ptr M, ArrayRef OSs, - ArrayRef 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 llvm::splitCodeGen( + std::unique_ptr M, ArrayRef OSs, + ArrayRef 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(TheTarget->createTargetMachine( - TripleStr, CPU, Features, Options, RM, CM, OL)); - }, FileType, PreserveLocals); -} -std::unique_ptr llvm::splitCodeGen( - std::unique_ptr M, ArrayRef OSs, - ArrayRef BCOSs, - const std::function()> &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 llvm::splitCodeGen( llvm::raw_pwrite_stream *ThreadOS = OSs[ThreadCount++]; // Enqueue the task CodegenThreadPool.async( - [&TMFactory, FileType, ThreadOS](const SmallVector &BC) { + [TheTarget, CPU, Features, Options, RM, CM, OL, FileType, + ThreadOS](const SmallVector &BC) { LLVMContext Ctx; ErrorOr> MOrErr = parseBitcodeFile( MemoryBufferRef(StringRef(BC.data(), BC.size()), @@ -106,7 +99,8 @@ std::unique_ptr llvm::splitCodeGen( report_fatal_error("Failed to read bitcode"); std::unique_ptr 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. -- cgit v1.2.3