提取 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()
,它会指向首先搁置 %x
的 alloca
指令。我不想要指针 - 相反,我想要标识符名称“%x”。我们如何从 IR 中提取这些名称?我看到在任何指令上调用 dump()
都会显示标识符,但我还没有找到可以提取标识符本身的 API 调用。谢谢!
您可以在 Value
上使用 getName
method。
请注意,并非每个值都已命名 - 特别是,您将无法检索 %1
、%2
等名称,因为这些名称是在正在写出IR。
我也在尝试做同样的事情。我需要检测全局标识符。
isa<GlobalValue>(mem_address)
帮我做了。
我实施了一个检查 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()
,它会指向首先搁置 %x
的 alloca
指令。我不想要指针 - 相反,我想要标识符名称“%x”。我们如何从 IR 中提取这些名称?我看到在任何指令上调用 dump()
都会显示标识符,但我还没有找到可以提取标识符本身的 API 调用。谢谢!
您可以在 Value
上使用 getName
method。
请注意,并非每个值都已命名 - 特别是,您将无法检索 %1
、%2
等名称,因为这些名称是在正在写出IR。
我也在尝试做同样的事情。我需要检测全局标识符。
isa<GlobalValue>(mem_address)
帮我做了。