提取 LLVM IR 标识符

Extracting LLVM IR Identifiers

我实施了一个检查 FCmpInst 的指令访问者。在我的 IR 中,我在 C++ 文件中从 clang 生成了几行:

%2 = load float, float* %x, align 4
%3 = fcmp ogt float %2, 1.0000e+00

FCmpInst 期间调用 getOperand(0) 访问 returns 上面的 load 指令。然后,如果我在 load 指令上调用 getPointerOperand(),它会指向首先搁置 %xalloca 指令。我不想要指针 - 相反,我想要标识符名称“%x”。我们如何从 IR 中提取这些名称?我看到在任何指令上调用 dump() 都会显示标识符,但我还没有找到可以提取标识符本身的 API 调用。谢谢!

您可以在 Value 上使用 getName method

请注意,并非每个值都已命名 - 特别是,您将无法检索 %1%2 等名称,因为这些名称是在正在写出IR。

我也在尝试做同样的事情。我需要检测全局标识符。

isa<GlobalValue>(mem_address) 帮我做了。