Les processeurs modernes comportent de nombreux mécanismes complexes pour atteindre des performances crêtes très élevées. Les compilateurs ne fournissent pas un fort pourcentage de ces performances crêtes à moins que le programmeur ne fasse appel à des options d'optimisation aggressives. Les niveaux d'optimisation les plus élevés permettent de prendre en compte le contexte interprocédural.
Quand un compilateur prend en compte des informations provenant de la procédure A pour compiler la procédure B, la cohérence et la terminaison de la compilation n'est plus assurée. En effet, des informations calculées à partir de A peuvent induire des optimisations de la procédure B qui modifient les informations sur B utilisées pour analyser A. Ceci est vrai même s'il n'existe pas d'appels récursifs entre A et B.
L'objectif premier de ce travail est de voir comment on peut faire converger efficacement les phases d'analyse et les phases d'optimisation des procédures. Les objectifs secondaires consistent à étendre ce premier résultat (1) au cas des procédures récursives, (2) à celui des analyses partielles qui peuvent être nécessaires pour un environnement de programmation, et à l'adapter pour exploiter le parallélisme sous-jacent à la compilation interprocédurale sur des machines parallèles.
Le problème des procédures dont le code source n'est pas disponible doit aussi être traité. Il faut aussi minimiser la recompilation en cas de modification d'une procédure pour ne pas rendre prohibitif l'utilisation de l'optimiseur en phase de développement.
Ce travail est défini dans le cadre du projet PIPS. De nombreuses analyses interprocédurales ont déjà été développées. Elles permettront d'étudier le problème de manière très concrète.
Contact: François Irigoin - 01 64 69 48 48 - irigoin@cri.ensmp.fr
Voir aussi
la description du projet PIPS.