Contribution à l'allocation de registres dans les boucles
Institution:
OrléansDisciplines:
Directors:
Abstract EN:
Pas de résumé disponible.
Abstract FR:
La génération de code est un des problèmes majeurs dans les compilateurs modernes en raison de l'évolution rapide des processeurs et de l'introduction de parallélisme interne entre instructions appelé parallélisme à grain fin. Nous nous sommes intéressés à la partie la plus sensible des programmes à savoir les boucles. En effet ce sont les instructions les plus exécutées dans un programme, et c'est donc là que les gains les plus significatifs du point de vue temps d'exécution peuvent être réalises. Dans notre cas, l'allocation de registres intervient après une phase d'ordonnancement des instructions par pipeline logiciel. Notre but a été d'étudier les interactions entre l'allocation de registres et le déroulage de boucles. Après avoir élaboré des heuristiques de coloriage pour les graphes d'intervalles circulaires, qui sont les graphes d'interférences issus du problème de l'allocation de registres dans les boucles, nous les avons comparées aux heuristiques existantes. Nous avons également pu observer le comportement du nombre chromatique de ces graphes en fonction du déroulage des boucles. Après cette étape où les insuffisances des graphes d'interférences usuels sont apparues, nous introduisons un nouveau graphe, baptise meeting graph, qui nous permet de résoudre le problème du déroulage optimal de la boucle. Après une étude des propriétés intrinsèques à ce graphe, nous présentons un algorithme complet d'allocation de registres incluant la gestion du code de vidage, ainsi qu'une méthode de minimisation du déroulage. Nous concluons ces applications du meeting graph par une application à une machine particulière, la cydra 5, pourvue d'un système original de registres. Nous proposons pour finir d'étendre notre méthode aux boucles multiples et avec conditionnelles.