0

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

  %add14 = add i32 %add7, %add5

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

4

1 回答 1

2

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

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

强调一下 - 调用该getOperand方法将为您提供定义操作数的实际位置,不需要其他任何东西。

于 2012-12-13T07:38:58.387 回答