Refactor IRObjectFile, extract a static CollectAsmUndefinedRefs() method to parse inline assembly (NFC)

I plan to call this from ThinLTOCodeGenerator.

From: Mehdi Amini <mehdi.amini@apple.com>
llvm-svn: 267103
This commit is contained in:
Mehdi Amini
2016-04-22 04:28:05 +00:00
parent b0c9748709
commit e9cffafdf7
2 changed files with 25 additions and 4 deletions

View File

@@ -38,12 +38,24 @@ using namespace object;
IRObjectFile::IRObjectFile(MemoryBufferRef Object, std::unique_ptr<Module> Mod)
: SymbolicFile(Binary::ID_IR, Object), M(std::move(Mod)) {
Mang.reset(new Mangler());
CollectAsmUndefinedRefs(*M, [this](StringRef Name,
BasicSymbolRef::Flags Flags) {
AsmSymbols.push_back(std::make_pair<std::string, uint32_t>(Name, Flags));
});
}
const std::string &InlineAsm = M->getModuleInlineAsm();
// Parse inline ASM and collect the list of symbols that are not defined in
// the current module. This is inspired from IRObjectFile.
void IRObjectFile::CollectAsmUndefinedRefs(
Module &TheModule,
const std::function<void(StringRef, BasicSymbolRef::Flags)> &
AsmUndefinedRefs) {
const std::string &InlineAsm = TheModule.getModuleInlineAsm();
if (InlineAsm.empty())
return;
Triple TT(M->getTargetTriple());
Triple TT(TheModule.getTargetTriple());
std::string Err;
const Target *T = TargetRegistry::lookupTarget(TT.str(), Err);
if (!T)
@@ -106,8 +118,7 @@ IRObjectFile::IRObjectFile(MemoryBufferRef Object, std::unique_ptr<Module> Mod)
Res |= BasicSymbolRef::SF_Global;
break;
}
AsmSymbols.push_back(
std::make_pair<std::string, uint32_t>(Key, std::move(Res)));
AsmUndefinedRefs(Key, BasicSymbolRef::Flags(Res));
}
}