एलएलवीएम में काफी अजीब स्पष्टीकरण के साथ फी निर्देश है:
'Phi' निर्देश का उपयोग एसएसए ग्राफ में function नोड को लागू करने के लिए किया जाता है जो फ़ंक्शन का प्रतिनिधित्व करता है।
आमतौर पर इसका उपयोग ब्रांचिंग को लागू करने के लिए किया जाता है। अगर मुझे सही तरीके से समझ में आता है, तो निर्भरता विश्लेषण को संभव बनाना आवश्यक है और कुछ मामलों में यह अनावश्यक लोडिंग से बचने में मदद कर सकता है। हालाँकि यह समझना अभी भी कठिन है कि यह वास्तव में क्या करता है।
बहुरूपदर्शक उदाहरण इसे 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
नोड compilers में समस्या का एक समाधान "स्टैटिक एकल काम" के रूप में परिवर्तित करने के लिए आईआर है। समाधान को बेहतर ढंग से समझने के लिए मैं बेहतर समस्या को समझने का सुझाव दूंगा। तो मैं आपको " क्योंphi
नोड है " एक कर दूंगा ।