【问题标题】:trace register value in llvm跟踪llvm中的寄存器值
【发布时间】:2013-01-25 17:39:00
【问题描述】:

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

  %add14 = add i32 %add7, %add5

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

【问题讨论】:

    标签: llvm


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2013-03-07
      • 1970-01-01
      • 2022-01-18
      • 2012-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-02
      • 1970-01-01
      相关资源
      最近更新 更多