diff options
| author | Peter Collingbourne <peter@pcc.me.uk> | 2016-12-13 20:01:58 +0000 |
|---|---|---|
| committer | Peter Collingbourne <peter@pcc.me.uk> | 2016-12-13 20:01:58 +0000 |
| commit | 77f4c30d6f60271a1093228956f83f10352d8f07 (patch) | |
| tree | 8cd6d54299359a869b5ac08c894ae2696724baea /llvm/lib/LTO | |
| parent | 06df402b066162ef819e65d92d0d729bb9cbf13d (diff) | |
| download | bcm5719-llvm-77f4c30d6f60271a1093228956f83f10352d8f07.tar.gz bcm5719-llvm-77f4c30d6f60271a1093228956f83f10352d8f07.zip | |
LTO: Port the legacy LTO API to ModuleSymbolTable.
Differential Revision: https://reviews.llvm.org/D27078
llvm-svn: 289576
Diffstat (limited to 'llvm/lib/LTO')
| -rw-r--r-- | llvm/lib/LTO/LTOModule.cpp | 40 |
1 files changed, 19 insertions, 21 deletions
diff --git a/llvm/lib/LTO/LTOModule.cpp b/llvm/lib/LTO/LTOModule.cpp index 876b43d08ca..e61a10e5b9e 100644 --- a/llvm/lib/LTO/LTOModule.cpp +++ b/llvm/lib/LTO/LTOModule.cpp @@ -48,9 +48,11 @@ using namespace llvm; using namespace llvm::object; -LTOModule::LTOModule(std::unique_ptr<object::IRObjectFile> Obj, +LTOModule::LTOModule(std::unique_ptr<Module> M, MemoryBufferRef MBRef, llvm::TargetMachine *TM) - : IRFile(std::move(Obj)), _target(TM) {} + : Mod(std::move(M)), MBRef(MBRef), _target(TM) { + SymTab.addModule(Mod.get()); +} LTOModule::~LTOModule() {} @@ -76,7 +78,7 @@ bool LTOModule::isBitcodeFile(StringRef Path) { bool LTOModule::isThinLTO() { // Right now the detection is only based on the summary presence. We may want // to add a dedicated flag at some point. - Expected<bool> Result = hasGlobalValueSummary(IRFile->getMemoryBufferRef()); + Expected<bool> Result = hasGlobalValueSummary(MBRef); if (!Result) { logAllUnhandledErrors(Result.takeError(), errs(), ""); return false; @@ -233,10 +235,7 @@ LTOModule::makeLTOModule(MemoryBufferRef Buffer, const TargetOptions &options, march->createTargetMachine(TripleStr, CPU, FeatureStr, options, None); M->setDataLayout(target->createDataLayout()); - std::unique_ptr<object::IRObjectFile> IRObj( - new object::IRObjectFile(Buffer, std::move(M))); - - std::unique_ptr<LTOModule> Ret(new LTOModule(std::move(IRObj), target)); + std::unique_ptr<LTOModule> Ret(new LTOModule(std::move(M), Buffer, target)); Ret->parseSymbols(); Ret->parseMetadata(); @@ -344,15 +343,15 @@ void LTOModule::addObjCClassRef(const GlobalVariable *clgv) { info.symbol = clgv; } -void LTOModule::addDefinedDataSymbol(const object::BasicSymbolRef &Sym) { +void LTOModule::addDefinedDataSymbol(ModuleSymbolTable::Symbol Sym) { SmallString<64> Buffer; { raw_svector_ostream OS(Buffer); - Sym.printName(OS); + SymTab.printSymbolName(OS, Sym); Buffer.c_str(); } - const GlobalValue *V = IRFile->getSymbolGV(Sym.getRawDataRefImpl()); + const GlobalValue *V = Sym.get<GlobalValue *>(); addDefinedDataSymbol(Buffer, V); } @@ -406,16 +405,15 @@ void LTOModule::addDefinedDataSymbol(StringRef Name, const GlobalValue *v) { } } -void LTOModule::addDefinedFunctionSymbol(const object::BasicSymbolRef &Sym) { +void LTOModule::addDefinedFunctionSymbol(ModuleSymbolTable::Symbol Sym) { SmallString<64> Buffer; { raw_svector_ostream OS(Buffer); - Sym.printName(OS); + SymTab.printSymbolName(OS, Sym); Buffer.c_str(); } - const Function *F = - cast<Function>(IRFile->getSymbolGV(Sym.getRawDataRefImpl())); + const Function *F = cast<Function>(Sym.get<GlobalValue *>()); addDefinedFunctionSymbol(Buffer, F); } @@ -546,12 +544,12 @@ void LTOModule::addAsmGlobalSymbolUndef(StringRef name) { } /// Add a symbol which isn't defined just yet to a list to be resolved later. -void LTOModule::addPotentialUndefinedSymbol(const object::BasicSymbolRef &Sym, +void LTOModule::addPotentialUndefinedSymbol(ModuleSymbolTable::Symbol Sym, bool isFunc) { SmallString<64> name; { raw_svector_ostream OS(name); - Sym.printName(OS); + SymTab.printSymbolName(OS, Sym); name.c_str(); } @@ -565,7 +563,7 @@ void LTOModule::addPotentialUndefinedSymbol(const object::BasicSymbolRef &Sym, info.name = IterBool.first->first(); - const GlobalValue *decl = IRFile->getSymbolGV(Sym.getRawDataRefImpl()); + const GlobalValue *decl = Sym.dyn_cast<GlobalValue *>(); if (decl->hasExternalWeakLinkage()) info.attributes = LTO_SYMBOL_DEFINITION_WEAKUNDEF; @@ -577,9 +575,9 @@ void LTOModule::addPotentialUndefinedSymbol(const object::BasicSymbolRef &Sym, } void LTOModule::parseSymbols() { - for (auto &Sym : IRFile->symbols()) { - const GlobalValue *GV = IRFile->getSymbolGV(Sym.getRawDataRefImpl()); - uint32_t Flags = Sym.getFlags(); + for (auto Sym : SymTab.symbols()) { + auto *GV = Sym.dyn_cast<GlobalValue *>(); + uint32_t Flags = SymTab.getSymbolFlags(Sym); if (Flags & object::BasicSymbolRef::SF_FormatSpecific) continue; @@ -589,7 +587,7 @@ void LTOModule::parseSymbols() { SmallString<64> Buffer; { raw_svector_ostream OS(Buffer); - Sym.printName(OS); + SymTab.printSymbolName(OS, Sym); Buffer.c_str(); } StringRef Name(Buffer); |

