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.