[llvm] r267103 - Refactor IRObjectFile, extract a static CollectAsmUndefinedRefs() method to parse inline assembly (NFC)
Mehdi Amini via llvm-commits
llvm-commits at lists.llvm.org
Thu Apr 21 21:28:05 PDT 2016
Author: mehdi_amini
Date: Thu Apr 21 23:28:05 2016
New Revision: 267103
URL: http://llvm.org/viewvc/llvm-project?rev=267103&view=rev
Log:
Refactor IRObjectFile, extract a static CollectAsmUndefinedRefs() method to parse inline assembly (NFC)
I plan to call this from ThinLTOCodeGenerator.
From: Mehdi Amini <mehdi.amini at apple.com>
Modified:
llvm/trunk/include/llvm/Object/IRObjectFile.h
llvm/trunk/lib/Object/IRObjectFile.cpp
Modified: llvm/trunk/include/llvm/Object/IRObjectFile.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Object/IRObjectFile.h?rev=267103&r1=267102&r2=267103&view=diff
==============================================================================
--- llvm/trunk/include/llvm/Object/IRObjectFile.h (original)
+++ llvm/trunk/include/llvm/Object/IRObjectFile.h Thu Apr 21 23:28:05 2016
@@ -59,6 +59,16 @@ public:
/// error code if not found.
static ErrorOr<MemoryBufferRef> findBitcodeInObject(const ObjectFile &Obj);
+ /// Parse inline ASM and collect the symbols that are not defined in
+ /// the current module.
+ ///
+ /// For each found symbol, call \p AsmUndefinedRefs with the name of the
+ /// symbol found and the associated flags.
+ static void CollectAsmUndefinedRefs(
+ Module &TheModule,
+ const std::function<void(StringRef, BasicSymbolRef::Flags)> &
+ AsmUndefinedRefs);
+
/// \brief Finds and returns bitcode in the given memory buffer (which may
/// be either a bitcode file or a native object file with embedded bitcode),
/// or an error code if not found.
Modified: llvm/trunk/lib/Object/IRObjectFile.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Object/IRObjectFile.cpp?rev=267103&r1=267102&r2=267103&view=diff
==============================================================================
--- llvm/trunk/lib/Object/IRObjectFile.cpp (original)
+++ llvm/trunk/lib/Object/IRObjectFile.cpp Thu Apr 21 23:28:05 2016
@@ -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));
+ });
+}
+
+// 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 = M->getModuleInlineAsm();
+ 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(MemoryBufferR
Res |= BasicSymbolRef::SF_Global;
break;
}
- AsmSymbols.push_back(
- std::make_pair<std::string, uint32_t>(Key, std::move(Res)));
+ AsmUndefinedRefs(Key, BasicSymbolRef::Flags(Res));
}
}
More information about the llvm-commits
mailing list