next up previous
Next: Normalisation Up: 2.2.3 Les différentes étapes Previous: 2.2.3 Les différentes étapes

Quelques précisions


Le problème auquel nous nous attaquons est connu pour être d'une complexité importante, et donc, nous souhaitons construire notre approche en relachant certaines contraintes pour en ajouter d'autres. Contrairement aux travaux présentés dans [2], nous souhaitons travailler sur une structure de code plus simple, et ne pas manipuler directement le graphe de flot de contrôle. Nous supposons donc que le code que nous étudions peut-être mis sous la forme d'une liste (structure hiérarchique) d'instructions simples (boucle, condition ou affectation). Toute structure plus "complexe" étant alors traitée par morceaux (nous rajouterons éventuellement une phase supplémentaire permettant de faire une synthèse de tous les résultats).

Par ailleurs, notre approche s'appuie sur l'exploitation des propriétés opératoires classiques, et donc nécessite de conserver les expressions arithmétiques sous une forme moins réductrice que celle utilisée en général par les compilateurs (du code 3 adresses).

Enfin, nous supposons dans un premier temps que le code sur lequel nous travaillons est à assignation unique. Cette hypothèse n'est pas réductrice puisque l'on peut facilement se ramener à ce genre de code en effectuant un renommage des variables scalaires (suppression des anti-dépendances). L'hypothèse contraire nécessiterait l'utilisation d'analyses plus poussées comme les used-def chains pour connaître les contraintes du flot de données.



Julien Zory
Thu Mar 12 17:35:23 MET 1998