llvm中的跟踪寄存器值

llvm中的跟踪寄存器值,llvm,Llvm,在llvm中,可以追溯到为特定寄存器定义值的指令吗?例如,如果我有如下说明: %add14 = add i32 %add7, %add5 这里有没有一种方法可以让我追溯到定义add5的指令 首先,LLVM IR中没有寄存器:所有名称中带有%的东西都只是值的名称。这些东西里面没有存储信息,它们不是变量或内存位置,它们只是名称。我建议阅读,这有助于进一步解释这一点 在任何情况下,您需要做的是调用指令上的getOperand(n)方法来获取其第n个操作数-例如,示例中的getOperand(0)

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

  %add14 = add i32 %add7, %add5

这里有没有一种方法可以让我追溯到定义add5的指令

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

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

为了强调-调用
getOperand
方法将为您提供定义操作数的实际位置,无需其他任何操作