LLVM, oldukça garip bir açıklamayla phi talimatına sahiptir:
'Phi' talimatı, işlevi temsil eden SSA grafiğindeki φ düğümünü uygulamak için kullanılır.
Tipik olarak, dallanma uygulamak için kullanılır. Doğru anladıysam, bağımlılık analizini mümkün kılmak gerekir ve bazı durumlarda gereksiz yüklemelerden kaçınmaya yardımcı olabilir. Ancak yine de tam olarak ne yaptığını anlamak zor.
Kaleidoscope örneği , durum için oldukça güzel açıklıyor if
. Ancak, &&
ve gibi mantıksal işlemlerin nasıl uygulanacağı o kadar net değil ||
. Ben aşağıdakileri yazarsanız çevrimiçi LLVM derleyici:
void main1(bool r, bool y) {
bool l = y || r;
}
Son birkaç satır tamamen kafamı karıştırıyor:
; <label>:10 ; preds = %7, %0
%11 = phi i1 [ true, %0 ], [ %9, %7 ]
%12 = zext i1 %11 to i8
Görünüşe göre phi düğümü kullanılabilecek bir sonuç veriyor. Ve phi düğümünün sadece hangi yollardan gelen değerleri tanımladığını düşünüyordum.
Birisi Phi düğümünün ne olduğunu ve ||
onunla nasıl uygulanacağını açıklayabilir mi?
phi
Düğüm "Statik bir atama" forma IR dönüştürmek Derleyiciler sorunun bir çözümdür. Çözümü daha iyi anlamak için sorunu daha iyi anlamanızı öneririm. Bu yüzden size " Nedenphi
düğümdür " diyeceğim .