Z:gnu-www-ja-stallman-kth--f993e3-This compiler currently works/fr

Ce compilateur fonctionne actuellement avec un analyseur syntaxique qui transforme efficacement le code C en arbre syntaxique, annoté d'informations sur le type de données C. Après ça, un autre passage examine cet arbre et produit du code comme celui-là [comme du Lisp]. Ensuite viennent plusieurs passages d'optimisation : un pour traiter par exemple les sauts à travers des sauts, les sauts aboutissant à des sauts, les sauts à .+1 et tout ce qui peut être immédiatement simplifié ; puis la reconnaissance des sous-expressions communes ; puis la recherche des blocs de base et l'analyse du flux de données, afin de pouvoir indiquer pour chaque instruction quelles valeurs sont utilisées dans l'instruction et nulle part ailleurs ; et aussi la liaison entre chaque instruction et les endroits où les valeurs utilisées ont été créées. Ainsi, quand j'ai une instruction qui crée un pseudo-registre R[28] et une autre instruction plus tard qui utilise R[28], sachant que c'est le premier endroit qui utilise R[28], je fais pointer la seconde en arrière sur la première et ce pointeur est celui qui servira pour contrôler les essais de combinaison des instructions. Vous ne combinez pas des instructions adjacentes, vous combinez une instruction qui utilise une valeur avec l'instruction qui a produit cette valeur. Même s'il y a d'autres instructions au milieu, elles ne sont pas concernées ; vous avez juste à vous assurer qu'elles n'interviennent pas. Et après le combinateur vient l'allocateur dynamique de registres, et enfin quelque chose pour faire la conversion en code assembleur.