LLVM має Фі інструкцію з досить дивним поясненням:
Інструкція 'phi' використовується для реалізації φ-вузла на графіку SSA, що представляє функцію.
Зазвичай він використовується для здійснення розгалуження. Якщо я правильно зрозумів, це необхідно, щоб зробити можливим аналіз залежності, і в деяких випадках це може допомогти уникнути зайвого навантаження. Однак досі важко зрозуміти, чим саме він займається.
Приклад калейдоскопа пояснює це досить добре для 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 вузол просто визначає, з яких шляхів виходять цінності.
Хтось може пояснити, що таке вузол Phi і як його реалізувати ||
?
phi
Вузол є рішення задачі в компіляторах для перетворення ІК в «Статичний сингл призначення» формі. Щоб краще зрозуміти рішення, я б запропонував краще зрозуміти проблему. Тож я підкажу вам " Чому цеphi
вузол ".