Je construis un CFG à partir d'un IL arbitraire et je veux convertir ce CFG en IL. L'ordre des sommets dans le CFG n'est bien sûr pas égal à l'ordre des instructions IL originales.Conversion d'un CFG en IL
C'est très bien mais trop compliqué. Imaginez:
Jump 'B'
'C': Return
'B': Jump 'C'
Cela se traduirait par un graphique de flux comme ceci: (Jump B) -> (Jump C) -> (retour) Ceci est bien sûr un exemple simplifié, mais il montre le problème lors de la conversion des du CFG.
Y at-il des informations disponibles sur ce sujet dans le milieu universitaire? Je pensais que traverser le graphique du bas vers le haut serait très élégant, mais cela ne fonctionne pas dans les cas plus compliqués.
Une solution pourrait être de marcher de haut en bas et de rechercher une fusion CF, mais dans ce cas, je ne serais pas en mesure de gérer correctement les boucles. Donc, la seule façon d'obtenir ce droit semble être de rechercher une fusion CF possible si cela se produit. Sinon, nous devons avoir une boucle, ce qui signifie que la boucle est préférée et que le chemin continu est évalué par la suite. Cela ressemble à un problème résoluble, mais il est également très coûteux et il pourrait exister une solution plus élégante au problème. En outre, une boucle peut également entraîner une fusion CF en pensant à une déclaration de "break".
Une instruction a besoin d'une étiquette car elle est le leader d'un bloc de base, qui n'a pas de prédécesseur, ou plus d'un prédécesseur, ou un seul prédécesseur mais le prédécesseur a plus d'un successeur. – inv