llvm中的跟踪寄存器值

时间:2012-12-13 06:45:18

标签: llvm

在llvm中,是否可以追溯到定义特定寄存器值的指令?例如,如果我有一条指令:

  %add14 = add i32 %add7, %add5

这是一种让我追溯到定义add5的指令的方法吗?

1 个答案:

答案 0 :(得分:2)

首先,LLVM IR中没有寄存器:名称中%的所有内容都只是值的名称。您不会将信息存储在这些内容中,它们不是变量或内存位置,它们只是名称。我建议阅读SSA form,这有助于进一步解释这一点。

在任何情况下,您需要做的是调用指令上的getOperand(n)方法来获取其第n个操作数 - 例如,示例中的getOperand(0)将返回名为{{1}的值}。然后,您可以通过检查其类型(%add7)来检查该值是否确实是一条指令(而不是函数参数)。

要强调 - 调用isa<Instruction>方法为您提供定义操作数的实际位置,不需要其他任何内容。