LLVM a une instruction phi avec une explication assez étrange:
L'instruction 'phi' est utilisée pour implémenter le nœud φ dans le graphe SSA représentant la fonction.
Il est généralement utilisé pour implémenter le branchement. Si j'ai bien compris, il est nécessaire de rendre l'analyse des dépendances possible et dans certains cas, cela pourrait aider à éviter un chargement inutile. Cependant, il est encore difficile de comprendre ce qu'il fait exactement.
L' exemple de Kaléidoscope l' explique assez bien pour le if
cas. Cependant, la manière d'implémenter des opérations logiques telles que &&
et ||
. Si je tape ce qui suit dans le compilateur llvm en ligne :
void main1(bool r, bool y) {
bool l = y || r;
}
Les dernières lignes me confondent complètement:
; <label>:10 ; preds = %7, %0
%11 = phi i1 [ true, %0 ], [ %9, %7 ]
%12 = zext i1 %11 to i8
On dirait que le nœud phi produit un résultat qui peut être utilisé. Et j'avais l'impression que le nœud phi définit simplement de quels chemins les valeurs proviennent.
Quelqu'un pourrait-il expliquer ce qu'est un nœud Phi et comment l'implémenter ||
?
phi
nœud est une solution du problème dans les compilateurs pour convertir l'IR en forme «d'affectation unique statique». Pour comprendre mieux comprendre la solution, je suggérerais de mieux comprendre le problème. Donc, je vais vous dire " Pourquoi est lephi
nœud ".