LLVM a phi instruction avec une explication assez bizarre :
L'instruction 'phi' est utilisée pour implémenter le nœud du graphe SSA représentant la fonction.
Il est généralement utilisé pour mettre en œuvre le branchement. Si j'ai bien compris, il est nécessaire pour rendre possible l'analyse des dépendances et, dans certains cas, il pourrait aider à éviter les chargements inutiles. Cependant, il est toujours difficile de comprendre ce qu'il fait exactement.
Kaléidoscope exemple l'explique assez bien pour if
cas. Cependant, la manière d'implémenter des opérations logiques telles que &&
y ||
. Si je tape ce qui suit dans llvm en ligne compilateur :
void main1(bool r, bool y) {
bool l = y || r;
}
Les dernières lignes m'embrouillent 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éfinissait simplement de quels chemins provenaient les valeurs.
Quelqu'un pourrait-il expliquer ce qu'est un nœud Phi, et comment mettre en place ||
avec elle ?