如何在 LLVM 中从 phinode 及其相应的基本块获取标签?

Ein*_*and 0 c++ llvm

假设 IR 代码如下所示:

define void @_Z1mbb(i1 zeroext %r, i1 zeroext %y) nounwind {
entry:
  %r.addr = alloca i8, align 1
  %y.addr = alloca i8, align 1
  %l = alloca i8, align 1
  %frombool = zext i1 %r to i8
  store i8 %frombool, i8* %r.addr, align 1
  %frombool1 = zext i1 %y to i8
  store i8 %frombool1, i8* %y.addr, align 1
  %0 = load i8* %y.addr, align 1
  %tobool = trunc i8 %0 to i1
  br i1 %tobool, label %lor.end, label %lor.rhs

lor.rhs:                                          ; preds = %entry
  %1 = load i8* %r.addr, align 1
  %tobool2 = trunc i8 %1 to i1
  br label %lor.end

lor.end:                                          ; preds = %lor.rhs, %entry
  %2 = phi i1 [ true, %entry ], [ %tobool2, %lor.rhs ]
  %frombool3 = zext i1 %2 to i8
  store i8 %frombool3, i8* %l, align 1
  ret void
}
Run Code Online (Sandbox Code Playgroud)

phinode 有 2 对[ true, %entry ], [ %tobool2, %lor.rhs ]。如何提取%entry%lor.rhs并找到每对对应的基本块?任何帮助将不胜感激。

DTh*_*run 5

PHI->getgetNumIncomingValues() :返回 PHINode 中传入值的数量

对于您的 phi 节点:

 %2 = phi i1 [ true, %entry ], [ %tobool2, %lor.rhs ]
Run Code Online (Sandbox Code Playgroud)

PHI->getIncomingValue(0): 给出true

PHI->getIncomingBlock(0): 给出%entry

还有块和值的迭代器。

http://llvm.org/doxygen/classllvm_1_1PHINode.html

请始终参考 doxygen 文档来查看与类关联的所有 API(例如:PHINode)。