获取 LLVM 模块中的所有值

Getting all Values in LLVM Module

我正在处理分析过程,我需要找到所有 InlineAsm values in a module

我试过使用 Module::getValueSymbolTable(),但它看起来只包含全局符号和函数符号。

我还尝试为模块中的每个函数调用 Function::getValueSymbolTable(),但文档并不清楚它包含哪些符号,而且它似乎仍然缺少我正在寻找的 InlineAsm 值对于.

仅供参考,我目前的(非工作)方法是这样的:

llvm::Module M = ...;
auto &MS = M.getValueSymbolTable();
for (auto it = MS.begin(), end = MS.end(); it != end; ++it) {
    if (isa<InlineAsm>(it->second)) {
        // do something
    }
}

for (auto &F : M) {
    auto FS = F.getValueSymbolTable();
    for (auto it = FS->begin(), end = FS->end(); it != end; ++it) {
        if (isa<InlineAsm>(it->second)) {
            // do something
        }
    }
}

如何获取 llvm 模块上的所有值?

我假设您需要收集所有内联指令(而不是模块级内联汇编程序节点)。为此,您需要遍历模块的所有功能。在 Function 内部,您需要遍历所有 Instructions 检查相关指令是否表示 InlineAsm 指令。 http://llvm.org/docs/ProgrammersManual.html#iterating-over-the-instruction-in-a-function 之类的内容会有所帮助。