假设 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并找到每对对应的基本块?任何帮助将不胜感激。
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)。
| 归档时间: |
|
| 查看次数: |
482 次 |
| 最近记录: |