- // 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 disableOpt,
- bool disableInline,
- bool disableGVNLoadPRE,
- 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.
- const void *compile(size_t *length,
- bool disableOpt,
- bool disableInline,
- bool disableGVNLoadPRE,
- std::string &errMsg);
+ /// Write the merged module to the file specified by the given path. Return
+ /// true on success.
+ bool writeMergedModules(const char *Path);
+
+ /// 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 output file. Do
+ /// not try to remove the object file in LTOCodeGenerator's destructor as we
+ /// 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 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,
+ bool DisableGVNLoadPRE,
+ bool DisableVectorization);
+
+ /// Optimizes the merged module. Returns true on success.
+ bool optimize(bool DisableVerify, bool DisableInline, bool DisableGVNLoadPRE,
+ bool DisableVectorization);
+
+ /// 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() 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. Output files will be written to members of out. Returns true on
+ /// success.
+ bool compileOptimized(ArrayRef<raw_pwrite_stream *> Out);