Release Notes: RegisterScheduler::setDefault removed; by Mehdi Amini
[oota-llvm.git] / include / llvm / LTO / LTOCodeGenerator.h
index 68ef3d5f22cccb3185e406c98cae266f699fcb50..3820b211a381d94ec65354534a1f8574b545bfab 100644 (file)
@@ -39,7 +39,7 @@
 #include "llvm/ADT/ArrayRef.h"
 #include "llvm/ADT/SmallPtrSet.h"
 #include "llvm/ADT/StringMap.h"
-#include "llvm/Linker/Linker.h"
+#include "llvm/Target/TargetMachine.h"
 #include "llvm/Target/TargetOptions.h"
 #include <string>
 #include <vector>
@@ -48,6 +48,7 @@ namespace llvm {
   class LLVMContext;
   class DiagnosticInfo;
   class GlobalValue;
+  class Linker;
   class Mangler;
   class MemoryBuffer;
   class TargetLibraryInfo;
@@ -61,8 +62,7 @@ namespace llvm {
 struct LTOCodeGenerator {
   static const char *getVersionString();
 
-  LTOCodeGenerator();
-  LTOCodeGenerator(std::unique_ptr<LLVMContext> Context);
+  LTOCodeGenerator(LLVMContext &Context);
   ~LTOCodeGenerator();
 
   /// Merge given module.  Return true on success.
@@ -74,6 +74,10 @@ struct LTOCodeGenerator {
   void setTargetOptions(TargetOptions Options);
   void setDebugInfo(lto_debug_model);
   void setCodePICModel(Reloc::Model Model) { RelocModel = Model; }
+  
+  /// Set the file type to be emitted (assembly or object code).
+  /// The default is TargetMachine::CGFT_ObjectFile. 
+  void setFileType(TargetMachine::CodeGenFileType FT) { FileType = FT; }
 
   void setCpu(const char *MCpu) { this->MCpu = MCpu; }
   void setAttr(const char *MAttr) { this->MAttr = MAttr; }
@@ -103,21 +107,21 @@ struct LTOCodeGenerator {
   /// true on success.
   bool writeMergedModules(const char *Path);
 
-  /// Compile the merged module into a *single* object file; the path to object
+  /// Compile the merged module into a *single* output file; the path to output
   /// 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
+  /// \note It is up to the linker to remove the intermediate output 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.
+  /// don't who (LTOCodeGenerator or the output file) will last longer.
   bool compile_to_file(const char **Name, bool DisableVerify,
                        bool DisableInline, bool DisableGVNLoadPRE,
                        bool DisableVectorization);
 
   /// 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
+  /// single output file. Instead of returning the output file path to the
+  /// caller (linker), it brings the output to a buffer, and returns the buffer
+  /// to the caller. This function should delete the intermediate 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,
@@ -128,15 +132,15 @@ struct LTOCodeGenerator {
   bool optimize(bool DisableVerify, bool DisableInline, bool DisableGVNLoadPRE,
                 bool DisableVectorization);
 
-  /// 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
+  /// Compiles the merged optimized module into a single output file. It brings
+  /// the output to a buffer, and returns the buffer to the caller. Return NULL
   /// if the compilation was not successful.
   std::unique_ptr<MemoryBuffer> compileOptimized();
 
-  /// Compile the merged optimized module into out.size() object files each
+  /// Compile the merged optimized module into out.size() output 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
+  /// threads.  Output files will be written to members of out. Returns true on
   /// success.
   bool compileOptimized(ArrayRef<raw_pwrite_stream *> Out);
 
@@ -144,6 +148,8 @@ struct LTOCodeGenerator {
 
   LLVMContext &getContext() { return Context; }
 
+  void resetMergedModule() { MergedModule.reset(); }
+
 private:
   void initializeLTOPasses();
 
@@ -163,10 +169,9 @@ private:
 
   typedef StringMap<uint8_t> StringSet;
 
-  std::unique_ptr<LLVMContext> OwnedContext;
   LLVMContext &Context;
   std::unique_ptr<Module> MergedModule;
-  Linker IRLinker;
+  std::unique_ptr<Linker> TheLinker;
   std::unique_ptr<TargetMachine> TargetMach;
   bool EmitDwarfDebugInfo = false;
   bool ScopeRestrictionsDone = false;
@@ -185,6 +190,7 @@ private:
   void *DiagContext = nullptr;
   bool ShouldInternalize = true;
   bool ShouldEmbedUselists = false;
+  TargetMachine::CodeGenFileType FileType = TargetMachine::CGFT_ObjectFile;
 };
 }
 #endif