Что именно делает инструкция PHI и как ее использовать в LLVM

В LLVM есть инструкция phi с довольно странным объяснением:

The 'phi' instruction is used to implement the φ node in the SSA graph representing the function.

Обычно он используется для реализации ветвления. Если я правильно понял, это нужно для того, чтобы был возможен анализ зависимостей и в некоторых случаях это могло бы помочь избежать лишней загрузки. Однако все еще трудно понять, что именно он делает.

Калейдоскоп пример довольно хорошо объясняет это для случая if. Однако не совсем понятно, как реализовать такие логические операции, как &&и ||. Если я наберу следующее в онлайн-компилятор llvm :

void main1(bool r, bool y) {
    bool l = y || r;
}

Последние несколько строк меня совершенно сбивают с толку:

; 

Похоже, что фи-узел выдает результат, который можно использовать. И у меня сложилось впечатление, что фи-узел просто определяет, по каким путям приходят значения.

Может ли кто-нибудь объяснить, что такое Phi-узел и как с ним реализовать ||?

77
задан vasilyrud 7 February 2019 в 03:07
поделиться