LLVM에는 매우 이상한 설명 이 포함 된 파이 명령어가 있습니다.
'phi'명령어는 함수를 나타내는 SSA 그래프에서 φ 노드를 구현하는 데 사용됩니다.
일반적으로 분기를 구현하는 데 사용됩니다. 올바르게 이해했다면 종속성 분석을 가능하게해야하며 경우에 따라 불필요한로드를 피하는 데 도움이 될 수 있습니다. 그러나 정확히 무엇을하는지 이해하기는 여전히 어렵습니다.
Kaleidoscope 예제 는 사례에 대해 꽤 잘 설명합니다 if
. 그러나 같은 논리 연산을 구현하는 방법이 명확하지 않다 &&
와 ||
. 온라인 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
노드는 "정적 단일 배정"형태로 IR을 변환하는 컴파일러의 문제에 대한 솔루션입니다. 해결책을 더 잘 이해하려면 문제를 더 잘 이해하는 것이 좋습니다. 그래서 나는 당신에게 " 왜phi
노드 인가 "를 하나 할 것 입니다.