[llvm] r266408 - Revert "[LTO] Add a new splitCodeGen() API which takes a TargetMachineFactory."

Davide Italiano via llvm-commits llvm-commits at lists.llvm.org
Thu Apr 14 19:07:04 PDT 2016


Author: davide
Date: Thu Apr 14 21:07:03 2016
New Revision: 266408

URL: http://llvm.org/viewvc/llvm-project?rev=266408&view=rev
Log:
Revert "[LTO] Add a new splitCodeGen() API which takes a TargetMachineFactory."

This reverts commits r266390 and r266396 as they broke some bots.

Modified:
    llvm/trunk/include/llvm/CodeGen/ParallelCG.h
    llvm/trunk/lib/CodeGen/ParallelCG.cpp

Modified: llvm/trunk/include/llvm/CodeGen/ParallelCG.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/ParallelCG.h?rev=266408&r1=266407&r2=266408&view=diff
==============================================================================
--- llvm/trunk/include/llvm/CodeGen/ParallelCG.h (original)
+++ llvm/trunk/include/llvm/CodeGen/ParallelCG.h Thu Apr 14 21:07:03 2016
@@ -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,
              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

Modified: llvm/trunk/lib/CodeGen/ParallelCG.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/ParallelCG.cpp?rev=266408&r1=266407&r2=266408&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/ParallelCG.cpp (original)
+++ llvm/trunk/lib/CodeGen/ParallelCG.cpp Thu Apr 14 21:07:03 2016
@@ -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::splitCodeG
           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::splitCodeG
                   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.




More information about the llvm-commits mailing list