diff options
Diffstat (limited to 'llvm')
| -rw-r--r-- | llvm/include/llvm/LinkTimeOptimizer.h | 11 | ||||
| -rw-r--r-- | llvm/tools/lto/lto.cpp | 35 | 
2 files changed, 31 insertions, 15 deletions
diff --git a/llvm/include/llvm/LinkTimeOptimizer.h b/llvm/include/llvm/LinkTimeOptimizer.h index c126bb23620..50c1613eb00 100644 --- a/llvm/include/llvm/LinkTimeOptimizer.h +++ b/llvm/include/llvm/LinkTimeOptimizer.h @@ -91,8 +91,9 @@ namespace llvm {                                                NameToSymbolMap &,                                                std::set<std::string> &) = 0;      virtual enum LTOStatus optimizeModules(const std::string &, -                                   std::vector<const char*> &, -                                   std::string &) = 0; +                                           std::vector<const char*> &, +                                           std::string &, bool,  +                                           const char *) = 0;      virtual void getTargetTriple(const std::string &, std::string &) = 0;      virtual void removeModule (const std::string &InputFilename) = 0;      virtual ~LinkTimeOptimizer() = 0; @@ -113,8 +114,10 @@ namespace llvm {                                        std::set<std::string> &references);      enum LTOStatus optimizeModules(const std::string &OutputFilename,                                     std::vector<const char*> &exportList, -                                   std::string &targetTriple); -    void getTargetTriple(const std::string &InputFilename, std::string &targetTriple); +                                   std::string &targetTriple, bool saveTemps, +                                   const char *); +    void getTargetTriple(const std::string &InputFilename,  +                         std::string &targetTriple);      void removeModule (const std::string &InputFilename);      // Constructors and destructors diff --git a/llvm/tools/lto/lto.cpp b/llvm/tools/lto/lto.cpp index b08b1a62dc3..6a7677244e0 100644 --- a/llvm/tools/lto/lto.cpp +++ b/llvm/tools/lto/lto.cpp @@ -129,7 +129,7 @@ LTO::getModule(const std::string &InputFilename)  /// set corresponding target triplet string.  void  LTO::getTargetTriple(const std::string &InputFilename,  -				   std::string &targetTriple) +                     std::string &targetTriple)  {    Module *m = getModule(InputFilename);    if (m) @@ -142,8 +142,8 @@ LTO::getTargetTriple(const std::string &InputFilename,  /// Return LTO_READ_SUCCESS if there is no error.  enum LTOStatus  LTO::readLLVMObjectFile(const std::string &InputFilename, -                                      NameToSymbolMap &symbols, -                                      std::set<std::string> &references) +                        NameToSymbolMap &symbols, +                        std::set<std::string> &references)  {    Module *m = getModule(InputFilename);    if (!m) @@ -316,7 +316,7 @@ LTO::optimize(Module *M, std::ostream &Out,    CodeGenPasses->add(new TargetData(*Target->getTargetData()));    Target->addPassesToEmitFile(*CodeGenPasses, Out, TargetMachine::AssemblyFile,  -			     true); +                              true);    // Run our queue of passes all at once now, efficiently.    Passes.run(*M); @@ -337,8 +337,10 @@ LTO::optimize(Module *M, std::ostream &Out,  /// Return appropriate LTOStatus.  enum LTOStatus  LTO::optimizeModules(const std::string &OutputFilename, -                                   std::vector<const char *> &exportList, -                                   std::string &targetTriple) +                     std::vector<const char *> &exportList, +                     std::string &targetTriple, +                     bool saveTemps, +                     const char *FinalOutputFilename)  {    if (modules.empty())      return LTO_NO_WORK; @@ -352,11 +354,15 @@ LTO::optimizeModules(const std::string &OutputFilename,      if (theLinker.LinkModules(bigOne, modules[i], errMsg))        return LTO_MODULE_MERGE_FAILURE; -#if 0 -  // Enable this when -save-temps is used -  std::ofstream Out("big.bc", io_mode); -  WriteBytecodeToFile(bigOne, Out, true); -#endif +  sys::Path FinalOutputPath(FinalOutputFilename); +  FinalOutputPath.eraseSuffix(); + +  if (saveTemps) { +    std::string tempFileName(FinalOutputPath.c_str()); +    tempFileName += "0.bc"; +    std::ofstream Out(tempFileName.c_str(), io_mode); +    WriteBytecodeToFile(bigOne, Out, true); +  }    // Strip leading underscore because it was added to match names    // seen by linker. @@ -404,6 +410,13 @@ LTO::optimizeModules(const std::string &OutputFilename,      return status;    } +  if (saveTemps) { +    std::string tempFileName(FinalOutputPath.c_str()); +    tempFileName += "1.bc"; +    std::ofstream Out(tempFileName.c_str(), io_mode); +    WriteBytecodeToFile(bigOne, Out, true); +  } +    targetTriple = bigOne->getTargetTriple();    // Run GCC to assemble and link the program into native code.  | 

