summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavide Italiano <davide@freebsd.org>2016-04-15 02:07:03 +0000
committerDavide Italiano <davide@freebsd.org>2016-04-15 02:07:03 +0000
commit2abf2e7c8cf2e4b8080030cb27f9e3d2d524976a (patch)
tree1c61d25872b724e32a3affc430b7347475c09c43
parent4cd7c3b7d573647d1dd5c57cdbdb21054f134d88 (diff)
downloadbcm5719-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.h15
-rw-r--r--llvm/lib/CodeGen/ParallelCG.cpp46
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.
OpenPOWER on IntegriCloud