Je travaille sur un compilateur pour une machine de pile (spécifiquement CIL) et j'ai analysé le code dans un graphique de blocs de base. De là, je cherche à appliquer SSA aux méthodes, mais ça ne va pas trop bien. Ma première tentative (en travaillant avec un listing plat, plutôt qu'avec le graphique) consistait à parcourir le code et à conserver une pile d'identifiants SSA (c'est-à-dire pour les cibles assignées), à les pousser quand je produisais une assignation. ils sont utilisés. Cela fonctionne très bien pour un seul bloc de base, mais je n'arrive tout simplement pas à comprendre comment gérer les fonctions Φ. L'idée que j'ai jetée est d'attacher une position de pile aux identifiants SSA et de regarder ce qui est encore sur la pile quand les chemins de code convergent, mais cela ne semble pas être le bon chemin (TM) de faire des choses.SSA pour le code machine de la pile
Existe-t-il un algorithme simple pour suivre les manipulations de pile sur plusieurs chemins de code et déterminer les collisions lorsqu'elles convergent?
Est-ce que quelque chose est jamais arrivé du compilateur? Je pense faire exactement la même chose. –