确定 LLVM IR 指令分配给的 reg

Determine the reg that an LLVM IR instruction assigns to

LLVM Instruction 允许您确定运算符和操作数。您如何确定指令分配给的 reg 的名称?

这个问题:询问是否有办法确定是否一个LHS分配,答案是“几乎总是”。但是我们如何确定它的名字呢?例如。我们如何区分 %1 = xor i8 %2, i8 %3%5 = xor i8 %2, i8 %3


更新

为了说明,以下 C 编译为以下 IR:

int c1(int a, int b, int c) {
    int d, e, f;
    if (a < b && b >= c) {
   ...

如何确定c1的第一条指令赋值给%4

; Function Attrs: norecurse nounwind optsize readnone uwtable
define dso_local i32 @c1(i32 %0, i32 %1, i32 %2) local_unnamed_addr #1 {
  %4 = icmp sge i32 %0, %1
  ...

整个%name = add i32 %lhs, %rhs是一条指令。通过调用 myInstruction->getName() 检索字符串 name。如果它没有名称,打印出来时我们会分配从零开始的数字,但该数字仅在打印时计算为 运行 计数。

在您的示例中,%1 = xor i8 %2, i8 %3 是一条指令——它自己的 C++ 对象,在内存中有一个地址——而 %5 = xor i8 %2, i8 %3 是内存中的另一个 C++ llvm::Instruction 对象。