diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2014-11-24 09:08:18 +0000 |
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2014-11-24 09:08:18 +0000 |
| commit | 5ca98fd98791947eba83a1ed3f2c8191ef7afa6c (patch) | |
| tree | f5944309621cee4fe0976be6f9ac619b7ebfc4c2 /include/llvm/LTO/LTOCodeGenerator.h | |
| parent | 68bcb7db193e4bc81430063148253d30a791023e (diff) | |
Notes
Diffstat (limited to 'include/llvm/LTO/LTOCodeGenerator.h')
| -rw-r--r-- | include/llvm/LTO/LTOCodeGenerator.h | 66 |
1 files changed, 34 insertions, 32 deletions
diff --git a/include/llvm/LTO/LTOCodeGenerator.h b/include/llvm/LTO/LTOCodeGenerator.h index c478bd980d4f6..b19b2325f73b3 100644 --- a/include/llvm/LTO/LTOCodeGenerator.h +++ b/include/llvm/LTO/LTOCodeGenerator.h @@ -9,7 +9,7 @@ // // This file declares the LTOCodeGenerator class. // -// LTO compilation consists of three phases: Pre-IPO, IPO and Post-IPO. +// LTO compilation consists of three phases: Pre-IPO, IPO and Post-IPO. // // The Pre-IPO phase compiles source code into bitcode file. The resulting // bitcode files, along with object files and libraries, will be fed to the @@ -21,12 +21,12 @@ // The IPO phase perform inter-procedural analyses and optimizations, and // the Post-IPO consists two sub-phases: intra-procedural scalar optimizations // (SOPT), and intra-procedural target-dependent code generator (CG). -// +// // As of this writing, we don't separate IPO and the Post-IPO SOPT. They // are intermingled together, and are driven by a single pass manager (see // PassManagerBuilder::populateLTOPassManager()). -// -// The "LTOCodeGenerator" is the driver for the IPO and Post-IPO stages. +// +// The "LTOCodeGenerator" is the driver for the IPO and Post-IPO stages. // The "CodeGenerator" here is bit confusing. Don't confuse the "CodeGenerator" // with the machine specific code generator. // @@ -36,27 +36,26 @@ #define LTO_CODE_GENERATOR_H #include "llvm-c/lto.h" +#include "llvm/ADT/ArrayRef.h" #include "llvm/ADT/SmallPtrSet.h" #include "llvm/ADT/StringMap.h" -#include "llvm/ADT/ArrayRef.h" -#include "llvm/Linker.h" +#include "llvm/Linker/Linker.h" #include "llvm/Target/TargetOptions.h" #include <string> #include <vector> namespace llvm { class LLVMContext; + class DiagnosticInfo; class GlobalValue; class Mangler; class MemoryBuffer; class TargetLibraryInfo; class TargetMachine; class raw_ostream; -} //===----------------------------------------------------------------------===// -/// LTOCodeGenerator - C++ class which implements the opaque lto_code_gen_t -/// type. +/// C++ class which implements the opaque lto_code_gen_t type. /// struct LTOCodeGenerator { static const char *getVersionString(); @@ -67,11 +66,12 @@ struct LTOCodeGenerator { // Merge given module, return true on success. bool addModule(struct LTOModule*, std::string &errMsg); - void setTargetOptions(llvm::TargetOptions options); + void setTargetOptions(TargetOptions options); void setDebugInfo(lto_debug_model); void setCodePICModel(lto_codegen_model); void setCpu(const char *mCpu) { MCpu = mCpu; } + void setAttr(const char *mAttr) { MAttr = mAttr; } void addMustPreserveSymbol(const char *sym) { MustPreserveSymbols[sym] = 1; } @@ -79,9 +79,8 @@ struct LTOCodeGenerator { // 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() @@ -98,7 +97,6 @@ struct LTOCodeGenerator { // 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, @@ -109,45 +107,49 @@ struct LTOCodeGenerator { // 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. - // + // 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); + void setDiagnosticHandler(lto_diagnostic_handler_t, void *); + private: void initializeLTOPasses(); - bool generateObjectFile(llvm::raw_ostream &out, - bool disableOpt, - bool disableInline, - bool disableGVNLoadPRE, - std::string &errMsg); + bool generateObjectFile(raw_ostream &out, bool disableOpt, bool disableInline, + bool disableGVNLoadPRE, std::string &errMsg); void applyScopeRestrictions(); - void applyRestriction(llvm::GlobalValue &GV, - const llvm::ArrayRef<llvm::StringRef> &Libcalls, - std::vector<const char*> &MustPreserveList, - llvm::SmallPtrSet<llvm::GlobalValue*, 8> &AsmUsed, - llvm::Mangler &Mangler); + void applyRestriction(GlobalValue &GV, const ArrayRef<StringRef> &Libcalls, + std::vector<const char *> &MustPreserveList, + SmallPtrSet<GlobalValue *, 8> &AsmUsed, + Mangler &Mangler); bool determineTarget(std::string &errMsg); - typedef llvm::StringMap<uint8_t> StringSet; + static void DiagnosticHandler(const DiagnosticInfo &DI, void *Context); + + void DiagnosticHandler2(const DiagnosticInfo &DI); - llvm::LLVMContext &Context; - llvm::Linker Linker; - llvm::TargetMachine *TargetMach; + typedef StringMap<uint8_t> StringSet; + + LLVMContext &Context; + Linker IRLinker; + TargetMachine *TargetMach; bool EmitDwarfDebugInfo; bool ScopeRestrictionsDone; lto_codegen_model CodeModel; StringSet MustPreserveSymbols; StringSet AsmUndefinedRefs; - llvm::MemoryBuffer *NativeObjectFile; + MemoryBuffer *NativeObjectFile; std::vector<char *> CodegenOptions; std::string MCpu; + std::string MAttr; std::string NativeObjectPath; - llvm::TargetOptions Options; + TargetOptions Options; + lto_diagnostic_handler_t DiagHandler; + void *DiagContext; }; - +} #endif // LTO_CODE_GENERATOR_H |
