LLVM có hướng dẫn phi với giải thích khá kỳ lạ:
Lệnh 'phi' được sử dụng để triển khai nút φ trong biểu đồ SSA biểu diễn hàm.
Thông thường, nó được sử dụng để thực hiện phân nhánh. Nếu tôi hiểu đúng, cần phải thực hiện phân tích phụ thuộc và trong một số trường hợp, nó có thể giúp tránh tải không cần thiết. Tuy nhiên, vẫn khó để hiểu chính xác nó làm gì.
Ví dụ về Kaleidoscope giải thích nó khá độc đáo cho if
trường hợp. Tuy nhiên, nó không rõ ràng như thế nào để thực hiện các phép toán logic như &&
và ||
. Nếu tôi nhập nội dung sau vào trình biên dịch llvm trực tuyến :
void main1(bool r, bool y) {
bool l = y || r;
}
Vài dòng cuối cùng hoàn toàn làm tôi bối rối:
; <label>:10 ; preds = %7, %0
%11 = phi i1 [ true, %0 ], [ %9, %7 ]
%12 = zext i1 %11 to i8
Có vẻ như nút phi tạo ra một kết quả có thể được sử dụng. Và tôi có ấn tượng rằng nút phi chỉ xác định giá trị đường dẫn nào đến.
Ai đó có thể giải thích nút Phi là gì và cách triển khai ||
với nó không?
phi
nút là một giải pháp của vấn đề trong trình biên dịch để chuyển đổi IR vào dạng "tĩnh đơn chuyển nhượng". Để hiểu rõ hơn giải pháp tôi sẽ đề nghị hiểu rõ hơn vấn đề. Vì vậy, tôi sẽ giới thiệu cho bạn " Tại sao lại làphi
nút ".