35 #ifndef LLVM_LTO_LTOCODEGENERATOR_H
36 #define LLVM_LTO_LTOCODEGENERATOR_H
51 template <
typename T>
class ArrayRef;
57 class TargetLibraryInfo;
60 class raw_pwrite_stream;
79 void setModule(std::unique_ptr<LTOModule> M);
110 ShouldRestoreGlobalsLinkage = Value;
144 bool DisableInline,
bool DisableGVNLoadPRE,
145 bool DisableVectorization);
153 std::unique_ptr<MemoryBuffer>
compile(
bool DisableVerify,
bool DisableInline,
154 bool DisableGVNLoadPRE,
155 bool DisableVectorization);
160 bool optimize(
bool DisableVerify,
bool DisableInline,
bool DisableGVNLoadPRE,
161 bool DisableVectorization);
184 void initializeLTOPasses();
190 void verifyMergedModuleOnce();
192 bool compileOptimizedToFile(
const char **
Name);
193 void restoreLinkageForExternals();
194 void applyScopeRestrictions();
195 void preserveDiscardableGVs(
199 bool determineTarget();
200 std::unique_ptr<TargetMachine> createTargetMachine();
202 static void DiagnosticHandler(
const DiagnosticInfo &DI,
void *Context);
206 void emitError(
const std::string &ErrMsg);
207 void emitWarning(
const std::string &ErrMsg);
209 bool setupOptimizationRemarks();
210 void finishOptimizationRemarks();
213 std::unique_ptr<Module> MergedModule;
214 std::unique_ptr<Linker> TheLinker;
215 std::unique_ptr<TargetMachine> TargetMach;
216 bool EmitDwarfDebugInfo =
false;
217 bool ScopeRestrictionsDone =
false;
218 bool HasVerifiedInput =
false;
223 std::vector<std::string> CodegenOptions;
224 std::string FeatureStr;
227 std::string NativeObjectPath;
230 const Target *MArch =
nullptr;
231 std::string TripleStr;
232 unsigned OptLevel = 2;
234 void *DiagContext =
nullptr;
235 bool ShouldInternalize =
true;
236 bool ShouldEmbedUselists =
false;
237 bool ShouldRestoreGlobalsLinkage =
false;
239 std::unique_ptr<tool_output_file> DiagnosticOutputFile;
LLVMContext & getContext()
std::unique_ptr< MemoryBuffer > compileOptimized()
Compiles the merged optimized module into a single output file.
A Module instance is used to store all the information related to an LLVM module. ...
An efficient, type-erasing, non-owning reference to a callable.
bool addModule(struct LTOModule *)
Merge given module.
bool optimize(bool DisableVerify, bool DisableInline, bool DisableGVNLoadPRE, bool DisableVectorization)
Optimizes the merged module.
void setShouldRestoreGlobalsLinkage(bool Value)
Restore linkage of globals.
void setAttr(StringRef MAttr)
std::unique_ptr< MemoryBuffer > compile(bool DisableVerify, bool DisableInline, bool DisableGVNLoadPRE, bool DisableVectorization)
As with compile_to_file(), this function compiles the merged module into single output file...
void setFileType(TargetMachine::CodeGenFileType FT)
Set the file type to be emitted (assembly or object code).
bool writeMergedModules(StringRef Path)
Write the merged module to the file specified by the given path.
static const char * getVersionString()
ArrayRef - Represent a constant reference to an array (0 or more elements consecutively in memory)...
void setShouldEmbedUselists(bool Value)
void setCodePICModel(Optional< Reloc::Model > Model)
This is the base abstract class for diagnostic reporting in the backend.
This is an important class for using LLVM in a threaded context.
void setOptLevel(unsigned OptLevel)
void setTargetOptions(const TargetOptions &Options)
void setShouldInternalize(bool Value)
C++ class which implements the opaque lto_module_t type.
void setCodeGenDebugOptions(StringRef Opts)
Pass options to the driver and optimization passes.
void(* lto_diagnostic_handler_t)(lto_codegen_diagnostic_severity_t severity, const char *diag, void *ctxt)
Diagnostic handler type.
C++ class which implements the opaque lto_code_gen_t type.
void setCpu(StringRef MCpu)
Module.h This file contains the declarations for the Module class.
StringMap - This is an unconventional map that is specialized for handling keys that are "strings"...
Target - Wrapper for Target specific information.
void addMustPreserveSymbol(StringRef Sym)
bool compile_to_file(const char **Name, bool DisableVerify, bool DisableInline, bool DisableGVNLoadPRE, bool DisableVectorization)
Compile the merged module into a single output file; the path to output file is returned to the calle...
void setAsmUndefinedRefs(struct LTOModule *)
LLVM Value Representation.
LTOCodeGenerator(LLVMContext &Context)
StringSet - A wrapper for StringMap that provides set-like functionality.
StringRef - Represent a constant reference to a string, i.e.
void parseCodeGenDebugOptions()
Parse the options set in setCodeGenDebugOptions.
CodeGenFileType
These enums are meant to be passed into addPassesToEmitFile to indicate what type of file to emit...
void setModule(std::unique_ptr< LTOModule > M)
Set the destination module.
void setDiagnosticHandler(lto_diagnostic_handler_t, void *)
void setDebugInfo(lto_debug_model)