Add missing #include, found by modules build.
[oota-llvm.git] / include / llvm / LTO / LTOCodeGenerator.h
index c079f791c24f104e4c38de2fd444fbb53684fa19..f69dfb1e7f6c1ce255df6142e24704f12e4c682b 100644 (file)
@@ -65,73 +65,81 @@ struct LTOCodeGenerator {
   LTOCodeGenerator(std::unique_ptr<LLVMContext> Context);
   ~LTOCodeGenerator();
 
-  // Merge given module, return true on success.
+  /// Merge given module.  Return true on success.
   bool addModule(struct LTOModule *);
 
-  // Set the destination module.
-  void setModule(struct LTOModule *);
+  /// Set the destination module.
+  void setModule(std::unique_ptr<LTOModule> M);
 
-  void setTargetOptions(TargetOptions options);
+  void setTargetOptions(TargetOptions Options);
   void setDebugInfo(lto_debug_model);
-  void setCodePICModel(lto_codegen_model);
+  void setCodePICModel(Reloc::Model Model) { RelocModel = Model; }
 
-  void setCpu(const char *mCpu) { MCpu = mCpu; }
-  void setAttr(const char *mAttr) { MAttr = mAttr; }
-  void setOptLevel(unsigned optLevel) { OptLevel = optLevel; }
+  void setCpu(const char *MCpu) { this->MCpu = MCpu; }
+  void setAttr(const char *MAttr) { this->MAttr = MAttr; }
+  void setOptLevel(unsigned OptLevel);
 
   void setShouldInternalize(bool Value) { ShouldInternalize = Value; }
   void setShouldEmbedUselists(bool Value) { ShouldEmbedUselists = Value; }
 
-  void addMustPreserveSymbol(StringRef sym) { MustPreserveSymbols[sym] = 1; }
-
-  // To pass options to the driver and optimization passes. These options are
-  // not necessarily for debugging purpose (The function name is misleading).
-  // This function should be called before LTOCodeGenerator::compilexxx(),
-  // and LTOCodeGenerator::writeMergedModules().
-  void setCodeGenDebugOptions(const char *opts);
-
-  // Parse the options set in setCodeGenDebugOptions. Like
-  // setCodeGenDebugOptions, this must be called before
-  // LTOCodeGenerator::compilexxx() and LTOCodeGenerator::writeMergedModules()
+  void addMustPreserveSymbol(StringRef Sym) { MustPreserveSymbols[Sym] = 1; }
+
+  /// Pass options to the driver and optimization passes.
+  ///
+  /// These options are not necessarily for debugging purpose (the function
+  /// name is misleading).  This function should be called before
+  /// LTOCodeGenerator::compilexxx(), and
+  /// LTOCodeGenerator::writeMergedModules().
+  void setCodeGenDebugOptions(const char *Opts);
+
+  /// Parse the options set in setCodeGenDebugOptions.
+  ///
+  /// Like \a setCodeGenDebugOptions(), this must be called before
+  /// LTOCodeGenerator::compilexxx() and
+  /// LTOCodeGenerator::writeMergedModules().
   void parseCodeGenDebugOptions();
 
-  // Write the merged module to the file specified by the given path.
-  // Return true on success.
-  bool writeMergedModules(const char *path, std::string &errMsg);
-
-  // Compile the merged module into a *single* object file; the path to object
-  // file is returned to the caller via argument "name". Return true on
-  // success.
-  //
-  // NOTE that it is up to the linker to remove the intermediate object file.
-  //  Do not try to remove the object file in LTOCodeGenerator's destructor
-  //  as we don't who (LTOCodeGenerator or the obj file) will last longer.
-  bool compile_to_file(const char **name,
-                       bool disableInline,
-                       bool disableGVNLoadPRE,
-                       bool disableVectorization,
-                       std::string &errMsg);
-
-  // As with compile_to_file(), this function compiles the merged module into
-  // single object file. Instead of returning the object-file-path to the caller
-  // (linker), it brings the object to a buffer, and return the buffer to the
-  // caller. This function should delete intermediate object file once its content
-  // is brought to memory. Return NULL if the compilation was not successful.
-  std::unique_ptr<MemoryBuffer> compile(bool disableInline,
-                                        bool disableGVNLoadPRE,
-                                        bool disableVectorization,
+  /// Write the merged module to the file specified by the given path.  Return
+  /// true on success.
+  bool writeMergedModules(const char *Path, std::string &ErrMsg);
+
+  /// Compile the merged module into a *single* object file; the path to object
+  /// file is returned to the caller via argument "name". Return true on
+  /// success.
+  ///
+  /// \note It is up to the linker to remove the intermediate object file.  Do
+  /// not try to remove the object file in LTOCodeGenerator's destructor as we
+  /// don't who (LTOCodeGenerator or the obj file) will last longer.
+  bool compile_to_file(const char **Name, bool DisableVerify,
+                       bool DisableInline, bool DisableGVNLoadPRE,
+                       bool DisableVectorization, std::string &ErrMsg);
+
+  /// As with compile_to_file(), this function compiles the merged module into
+  /// single object file. Instead of returning the object-file-path to the
+  /// caller (linker), it brings the object to a buffer, and return the buffer
+  /// to the caller. This function should delete intermediate object file once
+  /// its content is brought to memory. Return NULL if the compilation was not
+  /// successful.
+  std::unique_ptr<MemoryBuffer> compile(bool DisableVerify, bool DisableInline,
+                                        bool DisableGVNLoadPRE,
+                                        bool DisableVectorization,
                                         std::string &errMsg);
 
-  // Optimizes the merged module. Returns true on success.
-  bool optimize(bool disableInline,
-                bool disableGVNLoadPRE,
-                bool disableVectorization,
-                std::string &errMsg);
+  /// Optimizes the merged module.  Returns true on success.
+  bool optimize(bool DisableVerify, bool DisableInline, bool DisableGVNLoadPRE,
+                bool DisableVectorization, std::string &ErrMsg);
+
+  /// Compiles the merged optimized module into a single object file. It brings
+  /// the object to a buffer, and returns the buffer to the caller. Return NULL
+  /// if the compilation was not successful.
+  std::unique_ptr<MemoryBuffer> compileOptimized(std::string &ErrMsg);
 
-  // Compiles the merged optimized module into a single object file. It brings
-  // the object to a buffer, and returns the buffer to the caller. Return NULL
-  // if the compilation was not successful.
-  std::unique_ptr<MemoryBuffer> compileOptimized(std::string &errMsg);
+  /// Compile the merged optimized module into out.size() object files each
+  /// representing a linkable partition of the module. If out contains more
+  /// than one element, code generation is done in parallel with out.size()
+  /// threads.  Object files will be written to members of out. Returns true on
+  /// success.
+  bool compileOptimized(ArrayRef<raw_pwrite_stream *> Out, std::string &ErrMsg);
 
   void setDiagnosticHandler(lto_diagnostic_handler_t, void *);
 
@@ -140,14 +148,13 @@ struct LTOCodeGenerator {
 private:
   void initializeLTOPasses();
 
-  bool compileOptimized(raw_pwrite_stream &out, std::string &errMsg);
-  bool compileOptimizedToFile(const char **name, std::string &errMsg);
+  bool compileOptimizedToFile(const char **Name, std::string &ErrMsg);
   void applyScopeRestrictions();
   void applyRestriction(GlobalValue &GV, ArrayRef<StringRef> Libcalls,
                         std::vector<const char *> &MustPreserveList,
                         SmallPtrSetImpl<GlobalValue *> &AsmUsed,
                         Mangler &Mangler);
-  bool determineTarget(std::string &errMsg);
+  bool determineTarget(std::string &ErrMsg);
 
   static void DiagnosticHandler(const DiagnosticInfo &DI, void *Context);
 
@@ -155,27 +162,28 @@ private:
 
   typedef StringMap<uint8_t> StringSet;
 
-  void destroyMergedModule();
   std::unique_ptr<LLVMContext> OwnedContext;
   LLVMContext &Context;
+  std::unique_ptr<Module> MergedModule;
   Linker IRLinker;
-  TargetMachine *TargetMach = nullptr;
+  std::unique_ptr<TargetMachine> TargetMach;
   bool EmitDwarfDebugInfo = false;
   bool ScopeRestrictionsDone = false;
-  lto_codegen_model CodeModel = LTO_CODEGEN_PIC_MODEL_DEFAULT;
+  Reloc::Model RelocModel = Reloc::Default;
   StringSet MustPreserveSymbols;
   StringSet AsmUndefinedRefs;
-  std::vector<char *> CodegenOptions;
+  std::vector<std::string> CodegenOptions;
+  std::string FeatureStr;
   std::string MCpu;
   std::string MAttr;
   std::string NativeObjectPath;
   TargetOptions Options;
+  CodeGenOpt::Level CGOptLevel = CodeGenOpt::Default;
   unsigned OptLevel = 2;
   lto_diagnostic_handler_t DiagHandler = nullptr;
   void *DiagContext = nullptr;
-  LTOModule *OwnedModule = nullptr;
   bool ShouldInternalize = true;
   bool ShouldEmbedUselists = false;
 };
-} // namespace llvm
+}
 #endif