diff options
Diffstat (limited to 'tools/lto')
-rw-r--r-- | tools/lto/LTOCodeGenerator.cpp | 3 | ||||
-rw-r--r-- | tools/lto/LTOCodeGenerator.h | 2 | ||||
-rw-r--r-- | tools/lto/LTOModule.cpp | 17 | ||||
-rw-r--r-- | tools/lto/LTOModule.h | 13 | ||||
-rw-r--r-- | tools/lto/lto.cpp | 12 |
5 files changed, 32 insertions, 15 deletions
diff --git a/tools/lto/LTOCodeGenerator.cpp b/tools/lto/LTOCodeGenerator.cpp index 52624ebe91..8ae196fe94 100644 --- a/tools/lto/LTOCodeGenerator.cpp +++ b/tools/lto/LTOCodeGenerator.cpp @@ -70,7 +70,8 @@ const char* LTOCodeGenerator::getVersionString() LTOCodeGenerator::LTOCodeGenerator() - : _linker("LinkTimeOptimizer", "ld-temp.o"), _target(NULL), + : _context(new LLVMContext()), + _linker("LinkTimeOptimizer", "ld-temp.o", _context), _target(NULL), _emitDwarfDebugInfo(false), _scopeRestrictionsDone(false), _codeModel(LTO_CODEGEN_PIC_MODEL_DYNAMIC), _nativeObjectFile(NULL), _gccPath(NULL), _assemblerPath(NULL) diff --git a/tools/lto/LTOCodeGenerator.h b/tools/lto/LTOCodeGenerator.h index e02a7ab115..d412626fbf 100644 --- a/tools/lto/LTOCodeGenerator.h +++ b/tools/lto/LTOCodeGenerator.h @@ -16,6 +16,7 @@ #define LTO_CODE_GENERATOR_H #include "llvm/Linker.h" +#include "llvm/LLVMContext.h" #include "llvm/ADT/StringMap.h" #include "llvm/ADT/SmallVector.h" @@ -53,6 +54,7 @@ private: typedef llvm::StringMap<uint8_t> StringSet; + llvm::LLVMContext* _context; llvm::Linker _linker; llvm::TargetMachine* _target; bool _emitDwarfDebugInfo; diff --git a/tools/lto/LTOModule.cpp b/tools/lto/LTOModule.cpp index 939d0eacd1..64e7950901 100644 --- a/tools/lto/LTOModule.cpp +++ b/tools/lto/LTOModule.cpp @@ -15,6 +15,7 @@ #include "LTOModule.h" #include "llvm/Constants.h" +#include "llvm/LLVMContext.h" #include "llvm/Module.h" #include "llvm/ModuleProvider.h" #include "llvm/ADT/OwningPtr.h" @@ -67,7 +68,8 @@ bool LTOModule::isBitcodeFileForTarget(const char* path, // takes ownership of buffer bool LTOModule::isTargetMatch(MemoryBuffer* buffer, const char* triplePrefix) { - OwningPtr<ModuleProvider> mp(getBitcodeModuleProvider(buffer)); + OwningPtr<ModuleProvider> mp(getBitcodeModuleProvider(buffer, + new LLVMContext())); // on success, mp owns buffer and both are deleted at end of this method if ( !mp ) { delete buffer; @@ -84,12 +86,13 @@ LTOModule::LTOModule(Module* m, TargetMachine* t) { } -LTOModule* LTOModule::makeLTOModule(const char* path, std::string& errMsg) +LTOModule* LTOModule::makeLTOModule(const char* path, LLVMContext* Context, + std::string& errMsg) { OwningPtr<MemoryBuffer> buffer(MemoryBuffer::getFile(path, &errMsg)); if ( !buffer ) return NULL; - return makeLTOModule(buffer.get(), errMsg); + return makeLTOModule(buffer.get(), Context, errMsg); } /// makeBuffer - create a MemoryBuffer from a memory range. @@ -109,12 +112,13 @@ MemoryBuffer* LTOModule::makeBuffer(const void* mem, size_t length) LTOModule* LTOModule::makeLTOModule(const void* mem, size_t length, + LLVMContext* Context, std::string& errMsg) { OwningPtr<MemoryBuffer> buffer(makeBuffer(mem, length)); if ( !buffer ) return NULL; - return makeLTOModule(buffer.get(), errMsg); + return makeLTOModule(buffer.get(), Context, errMsg); } /// getFeatureString - Return a string listing the features associated with the @@ -136,10 +140,11 @@ std::string getFeatureString(const char *TargetTriple) { return Features.getString(); } -LTOModule* LTOModule::makeLTOModule(MemoryBuffer* buffer, std::string& errMsg) +LTOModule* LTOModule::makeLTOModule(MemoryBuffer* buffer, LLVMContext* Context, + std::string& errMsg) { // parse bitcode buffer - OwningPtr<Module> m(ParseBitcodeFile(buffer, &errMsg)); + OwningPtr<Module> m(ParseBitcodeFile(buffer, Context, &errMsg)); if ( !m ) return NULL; // find machine architecture for this module diff --git a/tools/lto/LTOModule.h b/tools/lto/LTOModule.h index 9de02a2a4e..bfdf6e7fd0 100644 --- a/tools/lto/LTOModule.h +++ b/tools/lto/LTOModule.h @@ -32,6 +32,7 @@ namespace llvm { class GlobalValue; class Value; class Function; + class LLVMContext; } @@ -50,9 +51,12 @@ public: static bool isBitcodeFileForTarget(const char* path, const char* triplePrefix); - static LTOModule* makeLTOModule(const char* path, std::string& errMsg); + static LTOModule* makeLTOModule(const char* path, + llvm::LLVMContext* Context, + std::string& errMsg); static LTOModule* makeLTOModule(const void* mem, size_t length, - std::string& errMsg); + llvm::LLVMContext* Context, + std::string& errMsg); const char* getTargetTriple(); uint32_t getSymbolCount(); @@ -83,10 +87,11 @@ private: bool objcClassNameFromExpression(llvm::Constant* c, std::string& name); - static bool isTargetMatch(llvm::MemoryBuffer* memBuffer, + static bool isTargetMatch(llvm::MemoryBuffer* memBuffer, const char* triplePrefix); - static LTOModule* makeLTOModule(llvm::MemoryBuffer* buffer, + static LTOModule* makeLTOModule(llvm::MemoryBuffer* buffer, + llvm::LLVMContext* Context, std::string& errMsg); static llvm::MemoryBuffer* makeBuffer(const void* mem, size_t length); diff --git a/tools/lto/lto.cpp b/tools/lto/lto.cpp index a0f67b44f5..c25f87c340 100644 --- a/tools/lto/lto.cpp +++ b/tools/lto/lto.cpp @@ -13,6 +13,7 @@ //===----------------------------------------------------------------------===// #include "llvm-c/lto.h" +#include "llvm-c/Core.h" #include "LTOModule.h" #include "LTOCodeGenerator.h" @@ -85,9 +86,10 @@ bool lto_module_is_object_file_in_memory_for_target(const void* mem, // loads an object file from disk // returns NULL on error (check lto_get_error_message() for details) // -lto_module_t lto_module_create(const char* path) +lto_module_t lto_module_create(const char* path, LLVMContextRef Ctxt) { - return LTOModule::makeLTOModule(path, sLastErrorString); + return LTOModule::makeLTOModule(path, llvm::unwrap(Ctxt), + sLastErrorString); } @@ -95,9 +97,11 @@ lto_module_t lto_module_create(const char* path) // loads an object file from memory // returns NULL on error (check lto_get_error_message() for details) // -lto_module_t lto_module_create_from_memory(const void* mem, size_t length) +lto_module_t lto_module_create_from_memory(const void* mem, size_t length, + LLVMContextRef Ctxt) { - return LTOModule::makeLTOModule(mem, length, sLastErrorString); + return LTOModule::makeLTOModule(mem, length, llvm::unwrap(Ctxt), + sLastErrorString); } |