LLVM有phi指令,但解释很奇怪:
'phi‘指令用于在表示函数的SSA图中实现φ节点。
通常,它用于实现分支。如果我理解正确的话,它需要使依赖分析成为可能,在某些情况下,它可以帮助避免不必要的加载。然而,仍然很难理解它到底是做什么的。
对于if案例,万花筒example很好地解释了这一点。然而,如何实现像&&和||这样的逻辑操作还不是很清楚。如果我在online llvm编译器中输入以下内容:
void main1(bool r, bool y) {
bool l = y || r;
}最后几行完全把我搞糊涂了:
; <label>:10 ; preds = %7, %0
%11 = phi i1 [ true, %0 ], [ %9, %7 ]
%12 = zext i1 %11 to i8看起来phi节点生成了一个可以使用的结果。我的印象是,phi节点只定义了来自哪些路径的值。
有人能解释一下什么是Phi节点,以及如何用它实现||吗?
https://stackoverflow.com/questions/11485531
复制相似问题