Résumé
Le graphe de flot de contrôle est une représentation intermédiaire classique des programmes dans les compilateurs optimisants pour les langages impératifs. Cette représentation a permis de formuler et de développer de nombreuses optimisations de programmes, des plus simples jusqu'aux plus sophistiquées.
Dans sa forme originelle, le graphe de flot de contrôle présente toutefois deux inconvénients pour optimiser les programmes. D’une part, beaucoup d'analyses de programmes sont sensibles au nommage des variables du programme. D'autre part, un modèle d’exécution entièrement dirigé par le contrôle rend parfois difficile le réordonnancement des instructions.
Dans cet exposé, nous nous intéresserons à des représentations intermédiaires emblématiques qui visent à pallier ces inconvénients. La première, SSA, permet d'exposer, à travers un schéma spécifique de nommage, quelques relations de dépendances entre instructions. La seconde, Sea-of-Nodes, s'appuie sur SSA et relâche certaines contraintes d'ordre d'exécution au sein de régions du graphe. Issues de travaux de recherche, elles sont aujourd'hui utilisées avec succès dans des compilateurs optimisants de référence. Nous présenterons leur modèle d'exécution respectif, ainsi que leurs propriétés sémantiques clefs dans le cadre de l'optimisation de programmes. Enfin, nous présenterons quelques enjeux actuels du domaine, où des représentations intermédiaires similaires sont utilisées pour basculer dans un modèle d'exécution dirigé par les données.