Compilation. Cours n 7: Allocation de registres par coloriage de graphes. Sandrine Blazy (d après le cours de François Pottier) - 2 e année

Documents pareils
Compilation (INF 564)

Rappels d architecture

Programmation linéaire

Arithmétique binaire. Chapitre. 5.1 Notions Bit Mot

ASR1 TD7 : Un microprocesseur RISC 16 bits

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

IV- Comment fonctionne un ordinateur?

Évaluation et implémentation des langages

Continuité et dérivabilité d une fonction

Fonctions homographiques

Contexte. Pour cela, elles doivent être très compliquées, c est-à-dire elles doivent être très différentes des fonctions simples,

Objectifs du cours d aujourd hui. Informatique II : Cours d introduction à l informatique et à la programmation objet. Complexité d un problème (2)

Pourquoi l apprentissage?

Représentation des Nombres

Cours 1 : La compilation

Documentation d information technique spécifique Education. PGI Open Line PRO

Chap 4: Analyse syntaxique. Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 1

LES OUTILS D ALIMENTATION DU REFERENTIEL DE DB-MAIN

1 Architecture du cœur ARM Cortex M3. Le cœur ARM Cortex M3 sera présenté en classe à partir des éléments suivants :

Cours d algorithmique pour la classe de 2nde

UE Programmation Impérative Licence 2ème Année

Baccalauréat ES Polynésie (spécialité) 10 septembre 2014 Corrigé

Introduction à la théorie des graphes. Solutions des exercices

MICROINFORMATIQUE NOTE D APPLICATION 1 (REV. 2011) ARITHMETIQUE EN ASSEMBLEUR ET EN C

Ne laissez pas le stockage cloud pénaliser votre retour sur investissement

Les Cartes et leur Valeur

Chapitre 2 Le problème de l unicité des solutions

Licence Sciences et Technologies Examen janvier 2010

Gestion des sauvegardes

Chp. 4. Minimisation d une fonction d une variable

BeSpoon et l homme Connecté

FctsAffines.nb 1. Mathématiques, 1-ère année Edition Fonctions affines

Exercices types Algorithmique et simulation numérique Oral Mathématiques et algorithmique Banque PT

Cours de Recherche Opérationnelle IUT d Orsay. Nicolas M. THIÉRY. address: Nicolas.Thiery@u-psud.fr URL:

Souad EL Bernoussi. Groupe d Analyse Numérique et Optimisation Rabat http ://

Genie Logiciel Avancé Projet :Gestion d une chaîne hotelier low cost

Chapitre 5 : Flot maximal dans un graphe

TP Bases de données réparties

Le produit semi-direct

COORDINATION NON COOPÉRATIVE: MÉTHODES D ENCHÈRES

REALISATION d'un. ORDONNANCEUR à ECHEANCES

UML Diagramme de communication (communication diagram) Emmanuel Pichon 2013

Cours de Programmation en Langage Synchrone SIGNAL. Bernard HOUSSAIS IRISA. Équipe ESPRESSO

Chapitre V : La gestion de la mémoire. Hiérarchie de mémoires Objectifs Méthodes d'allocation Simulation de mémoire virtuelle Le mapping

IFT1215 Introduction aux systèmes informatiques

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

V 8.2. Vous allez utiliser les services en ligne de la plate forme de dématérialisation de la Salle des Marchés achatpublic.com.

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Sujet proposé par Yves M. LEROY. Cet examen se compose d un exercice et de deux problèmes. Ces trois parties sont indépendantes.

Atelier C TIA Portal CTIA04 : Programmation des automates S7-300 Opérations numériques

VIII- Circuits séquentiels. Mémoires

INTRODUCTION AUX SYSTEMES D EXPLOITATION. TD2 Exclusion mutuelle / Sémaphores

Jean-Philippe Préaux


L ANALYSE EN COMPOSANTES PRINCIPALES (A.C.P.) Pierre-Louis GONZALEZ

Logiciel Libre Cours 3 Fondements: Génie Logiciel

Exo7. Limites de fonctions. 1 Théorie. 2 Calculs

La NP-complétude. Johanne Cohen. PRISM/CNRS, Versailles, France.

La programmation linéaire : une introduction. Qu est-ce qu un programme linéaire? Terminologie. Écriture mathématique

Support pour les langues s écrivant de droite à gauche

Annexe 6. Notions d ordonnancement.

Communications collectives et ordonnancement en régime permanent pour plates-formes hétérogènes

CREATION D UNE EVALUATION AVEC JADE par Patrick RUER (

Une nouvelle approche de détection de communautés dans les réseaux sociaux

Cours 1 : Introduction Ordinateurs - Langages de haut niveau - Application

avec des nombres entiers

MPI Activité.10 : Logique binaire Portes logiques

Security Products Actualités produits Juin 2014

Programmation Linéaire - Cours 1

LES TYPES DE DONNÉES DU LANGAGE PASCAL

Canevas théoriques du projet sur le poker Partie A

4 Exemples de problèmes MapReduce incrémentaux

Baccalauréat ES/L Amérique du Sud 21 novembre 2013

MANUEL D UTILISATION DE LA SALLE DES MARCHES APPEL D OFFRES OUVERT ACCES ENTREPRISES. Version 8.2

Conception de réseaux de télécommunications : optimisation et expérimentations

Nouvelles propositions pour la résolution exacte du sac à dos multi-objectif unidimensionnel en variables binaires

J AUVRAY Systèmes Electroniques TRANSMISSION DES SIGNAUX NUMERIQUES : SIGNAUX EN BANDE DE BASE

OCL - Object Constraint Language

Le stockage. 1. Architecture de stockage disponible. a. Stockage local ou centralisé. b. Différences entre les architectures

Baccalauréat L spécialité, Métropole et Réunion, 19 juin 2009 Corrigé.

Nouvelles propositions pour la résolution exacte du problème de sac à dos bi-objectif unidimensionnel en variables binaires

Réseaux grande distance

Travaux pratiques. Compression en codage de Huffman Organisation d un projet de programmation

Poker. A rendre pour le 25 avril

TP 1. Prise en main du langage Python

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Plan du cours Cours théoriques. 29 septembre 2014

18 TCP Les protocoles de domaines d applications

Conversion d un entier. Méthode par soustraction

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

CCP PSI Mathématiques 1 : un corrigé

Jeu d instructions NIOS II

Initiation à la Programmation en Logique avec SISCtus Prolog

Organigramme / Algorigramme Dossier élève 1 SI

TSTI 2D CH X : Exemples de lois à densité 1

Ensimag 1ère année Algorithmique 1 Examen 2ième session 24 juin Algorithmique 1

Algorithmique et programmation : les bases (VBA) Corrigé

Fonctions de plusieurs variables

SQL Data Export for PS/PSS

Structure d un programme

Transcription:

Compilation Cours n 7: Allocation de registres par coloriage de graphes Sandrine Blazy (d après le cours de François Pottier) - 2 e année 10 décembre 2007 S.Blazy (ENSIIE) Compilation 10 décembre 2007 1 / 58

Texte source Texte cible Analyse lexicale et syntaxique Affichage Pseudo-Pascal ASM Sélection d'instructions Réalisation des trames de pile UPP LIN Création du graphe de flot de contrôle Linéarisation du graphe de flot de contrôle RTL ERTL LTL Explicitation des conventions d'appel Allocation des registres S.Blazy (ENSIIE) Compilation 10 décembre 2007 2 / 58

Allocation de registres On souhaite réaliser chaque pseudo-registre par un registre physique, ou, à défaut, un emplacement de pile. On s intéresse uniquement aux registres physiques dits allouables, c est-à-dire non réservés pour un usage particulier, comme le sont par exemple $gp ou $sp. Les registres exploités par la convention d appel, à savoir $v0, $a0-$a3, et $ra sont allouables. Les registres $t0-$t9 et $s0-$s7 le sont également. S.Blazy (ENSIIE) Compilation 10 décembre 2007 3 / 58

De l allocation de registres au coloriage de graphes Nous avons construit un graphe d interférences dont : les sommets sont les pseudo-registres et les registres physiques allouables ; une arête d interférence relie deux sommets qui doivent recevoir des emplacements distincts ; une arête de préférence ou arête «move» relie deux sommets à qui on souhaiterait attribuer le même emplacement. S.Blazy (ENSIIE) Compilation 10 décembre 2007 4 / 58

De l allocation de registres au coloriage de graphes Supposons que l on dispose de k registres physiques allouables. Alors le problème de l allocation de registres semble se résumer à : attribuer une couleur parmi k à chaque sommet représentant un pseudo-registre, de façon à ce que deux sommets reliés par une arête d interférence ne reçoivent jamais la même couleur, et si possible de façon à ce que deux sommets reliés par une arête de préférence reçoivent la même couleur. Le graphe est dit k-colorable si ce nouveau problème admet une solution. S.Blazy (ENSIIE) Compilation 10 décembre 2007 5 / 58

Historique L idée de réduire l allocation de registres au coloriage de graphes date des années 1960, mais a été mise en pratique pour la première fois par Chaitin en 1981. Ce cadre théorique est attirant de par sa simplicité, mais quelques problèmes demeurent... S.Blazy (ENSIIE) Compilation 10 décembre 2007 6 / 58

Difficultés et limitations Premier problème : le problème du coloriage de graphes est NP-complet, d où, en pratique, impossibilité de construire une solution optimale. En réponse, tous les compilateurs actuels utilisent des heuristiques de complexité linéaire ou quasi-linéaire. Voir «A generic NP-hardness proof for a variant of Graph Coloring» (Bodlaender, 2001). S.Blazy (ENSIIE) Compilation 10 décembre 2007 7 / 58

Difficultés et limitations Deuxième problème : si le graphe n est pas k-colorable ou si on ne trouve pas de k-coloriage, que faire? L idée la plus simple est de permettre à certains sommets de rester non colorés et de réaliser ensuite ces pseudo-registres par des emplacements de pile. On parle alors de «spill». Les détails de ce processus sont plus subtils qu il n y paraît, et ce problème, dans toute sa généralité, offre lui aussi un espace de choix colossal. S.Blazy (ENSIIE) Compilation 10 décembre 2007 8 / 58

Difficultés et limitations Troisième et dernier problème : certaines architectures existantes n offrent pas k registres physiques indépendants et interchangeables. Heureusement, on peut modifier l algorithme de coloriage de graphes pour refléter les irrégularités et particularités les plus courantes. S.Blazy (ENSIIE) Compilation 10 décembre 2007 9 / 58

1 Algorithmes de coloriage Algorithmes de «spill» Quelques problèmes pratiques S.Blazy (ENSIIE) Compilation 10 décembre 2007 10 / 58

Simplification Kempe (1879) et Chaitin (1981) ont observé qu un sommet s de degré strictement inférieur à k est trivialement colorable : le graphe G est k-colorable si et seulement si G privé de s est k-colorable. On peut répéter cette simplification autant de fois que possible. De plus, le fait de supprimer un sommet trivialement colorable peut rendre d autres sommets trivialement colorables. S.Blazy (ENSIIE) Compilation 10 décembre 2007 11 / 58

L algorithme de Chaitin procédure Colorier(G) si il existe { un sommet s trivialement colorable Colorier(G \ s) alors attribuer une couleur disponible à s sinon { si il existe un sommet s Colorier(G \ s) alors «spiller» s Cet algorithme peut être implanté avec une complexité linéaire. (Comment?) Le comportement de l algorithme est influencé par la façon dont certains choix sont effectués... S.Blazy (ENSIIE) Compilation 10 décembre 2007 12 / 58

Choix de sommets Le choix d un sommet trivialement colorable, lorsqu il en existe plusieurs, n est pas fondamental. (Pourquoi?) Le choix d un sommet à «spiller» est critique : pour une meilleure efficacité, il faut choisir un pseudo-registre peu utilisé ou utilisé en des points peu critiques du code ; pour faciliter la suite du coloriage, il vaut mieux choisir un sommet de fort degré. On fait appel à une fonction de coût qui combine ces critères. S.Blazy (ENSIIE) Compilation 10 décembre 2007 13 / 58

Emploi des registres «callee-save» Cette heuristique permet naturellement un bon emploi des registres «callee-save». En effet, les pseudo-registres introduits pour sauvegarder le contenu des registres «callee-save» sont peu utilisés une écriture et une lecture et ont une très longue durée de vie, donc un fort degré. Ils seront donc «spillés» de préférence. Ainsi, les registres callee-save seront sauvegardés à l entrée, restaurés à la sortie, et disponibles entre les deux. S.Blazy (ENSIIE) Compilation 10 décembre 2007 14 / 58

Choix de couleurs Le choix de la couleur attribuée à un sommet s trivialement colorable après coloriage de G \ s est important : on a ici une occasion de respecter les souhaits exprimés par les arêtes de préférence. Supposons t relié à s par une arête de préférence. On attribuera à s la couleur déjà attribuée à t, s il est déjà coloré ; ou bien une couleur encore permise pour t, s il n est pas encore coloré ; etc. Cette technique de coloriage biaisé est simple mais limitée. Le «coalescing» lui sera supérieur. S.Blazy (ENSIIE) Compilation 10 décembre 2007 15 / 58

Des méfaits du pessimisme Pour k = 2, ce graphe est-il coloriable? Que donne l algorithme de Chaitin? Comment améliorer l algorithme? S.Blazy (ENSIIE) Compilation 10 décembre 2007 16 / 58

Coloriage optimiste procédure Colorier(G) si il existe { un sommet s trivialement colorable Colorier(G \ s) alors attribuer une couleur disponible à s sinon si il existe un sommet s Colorier(G \ s) si une couleur reste disponible pour s alors alors la lui attribuer sinon «spiller» s Voir Improvements to Graph Coloring Register Allocation (Briggs et al., 1994). S.Blazy (ENSIIE) Compilation 10 décembre 2007 17 / 58

«Coalescing» Revenons à la question du respect des arêtes de préférence. Une approche plus radicale que le coloriage biaisé, également due à Chaitin, consiste à d abord fusionner (coalescer) tous les sommets reliés par des arêtes de préférence avant d effectuer le coloriage. La couleur attribuée à deux ou plusieurs sommets fusionnés est celle attribuée à leur agrégat. Fusionner deux sommets peut amener une arête d interférence et une arête de préférence à se chevaucher ; dans ce cas, la seconde disparaît. S.Blazy (ENSIIE) Compilation 10 décembre 2007 18 / 58

Avantages et inconvénients du «coalescing» sauvage Cette forme dite agressive ou sauvage de «coalescing» présente plusieurs avantages : toutes les arêtes de préférence, sauf celles éclipsées par une arête d interférence, sont respectées ; fusionner deux sommets diminue le degré de leurs voisins communs et peut donc les rendre trivialement colorables. Cependant, elle souffre également d un inconvénient : fusionner deux ou plusieurs sommets peut créer un sommet de très fort degré, qui sera probablement «spillé», tandis que, sans fusion, un ou plusieurs des sommets initiaux auraient peut-être pu être colorés. S.Blazy (ENSIIE) Compilation 10 décembre 2007 19 / 58

«Coalescing» conservatif Le «coalescing» conservatif ou prudent consiste à ne fusionner deux sommets que si l on a la certitude de préserver la k-colorabilité du graphe. Briggs et George proposent chacun une condition suffisante pour cela... S.Blazy (ENSIIE) Compilation 10 décembre 2007 20 / 58

Le critère de Briggs Briggs propose le critère suivant : Deux sommets peuvent être fusionnés si le sommet résultant a moins de k voisins non trivialement colorables. On exige en fait que le sommet résultant soit trivialement colorable modulo simplification. Parce que le «coalescing» peut avoir lieu avant certaines étapes de simplification, on anticipe l effet de celles-ci. S.Blazy (ENSIIE) Compilation 10 décembre 2007 21 / 58

Le critère de George George propose le critère suivant : Deux sommets a et b peuvent être fusionnés si tout voisin non trivialement colorable de a est également voisin de b. On anticipe encore une fois l effet des simplifications futures. Une fois celles-ci effectuées, tout voisin de a sera voisin de b, donc toute couleur permise pour b le sera également pour a. Les critères de Briggs et George sont incomparables. (Pourquoi?) S.Blazy (ENSIIE) Compilation 10 décembre 2007 22 / 58

Complications Le «coalescing» conservatif induit quelques subtilités qui viennent compliquer l algorithme... deux sommets non fusionnables peuvent le devenir suite à une simplification ; un sommet non trivialement colorable peut le devenir suite à une fusion. Il faut donc alterner entre les deux phases. Cependant... S.Blazy (ENSIIE) Compilation 10 décembre 2007 23 / 58

Complications Reste un point délicat : la simplification doit éviter de retirer un sommet susceptible d être fusionné à l avenir...... sauf si cela empêche toute simplification. Un sommet portant une arête de préférence («move-related») n est donc jamais simplifié. Lorsque ni simplification ni fusion ne sont possibles, on «gèle» en fait, on supprime certaines arêtes de préférence. Cela peut permettre de nouvelles simplifications, donc de nouvelles fusions, etc. S.Blazy (ENSIIE) Compilation 10 décembre 2007 24 / 58

L algorithme de George et Appel procédure Colorier(G) Simplifier(G) procédure Simplifier(G) si s est trivialement colorable et ne porte aucune arête de préférence soit G = G \ s alors Simplifier(G ) attribuer une couleur disponible à s sinon Fusionner(G) La simplification est restreinte de façon à ne pas supprimer d opportunités de fusion. Lorsqu elle ne s applique plus, la fusion commence. S.Blazy (ENSIIE) Compilation 10 décembre 2007 25 / 58

L algorithme de George et Appel procédure Fusionner(G) si a et b peuvent être fusionnés soit G = G où un unique sommet ab remplace a et b alors Simplifier(G ) attribuer à a et b la couleur attribuée à ab sinon Geler(G) La fusion est restreinte par un critère conservatif (Briggs, George, ou autre). Après chaque fusion, la simplification reprend. Si aucune fusion (donc aucune simplification) n est possible, le gel commence. S.Blazy (ENSIIE) Compilation 10 décembre 2007 26 / 58

L algorithme de George et Appel procédure Geler(G) si s est { trivialement colorable soit G alors = G privé des arêtes de préférence issues de s Simplifier(G ) sinon Spill(G) S il existe un sommet que l on n a pas simplifié dans l espoir d une fusion, le gel consiste à abandonner cet espoir pour permettre la simplification. Si aucun gel (donc ni simplification ni fusion) n est possible, on passe au «spill» optimiste. S.Blazy (ENSIIE) Compilation 10 décembre 2007 27 / 58

L algorithme de George et Appel procédure Spill(G) si s est un sommet de coût minimal soit G = G \ s Simplifier(G ) alors si une couleur reste disponible pour s alors la lui attribuer sinon «spiller» s Le «spill» optimiste est identique à celui discuté précédemment. Cet algorithme peut être implanté avec une complexité linéaire, si on suppose le graphe de degré borné. Toutefois, le code devient complexe. S.Blazy (ENSIIE) Compilation 10 décembre 2007 28 / 58

Exemple On suppose k = 3. On applique le critère de George. r3 c r2 b e r1 a d Aucune simplification, fusion ou gel n est possible... On va donc «spiller» un sommet, par exemple c. S.Blazy (ENSIIE) Compilation 10 décembre 2007 29 / 58

Exemple c a été supprimé du graphe. r3 c r2 b e r1 a d e est trivialement colorable mais non simplifiable. r2 et b ne sont pas fusionnables car r2 n interfère pas avec d. a et e le sont. S.Blazy (ENSIIE) Compilation 10 décembre 2007 30 / 58

Exemple a et e ont été fusionnés. r3 c r2 b e r1 ae d On peut fusionner r2 et b ou bien r1 et ae, car b et d sont trivialement colorables. On choisit les premiers. S.Blazy (ENSIIE) Compilation 10 décembre 2007 31 / 58

Exemple r2 et b ont été fusionnés. r2 interfère maintenant avec d. r3 c r2 b e r1 ae d Tous les sommets sont trivialement colorables. On peut donc fusionner r1 et ae ou bien r1 et d. On choisit les premiers. S.Blazy (ENSIIE) Compilation 10 décembre 2007 32 / 58

Exemple r1 et ae ont été fusionnés. r3 c r2 b e r1 ae d d est trivialement colorable. Il est donc à présent possible de le simplifier. S.Blazy (ENSIIE) Compilation 10 décembre 2007 33 / 58

Exemple Le graphe est maintenant vide. r3 c r2 b e r1 ae d On reprend donc la série de transformations qui nous a mené jusqu ici, dans l ordre inverse, et en attribuant des couleurs. S.Blazy (ENSIIE) Compilation 10 décembre 2007 34 / 58

Exemple d avait été simplifié. r3 c r2 b e r1 ae d Il reçoit l unique couleur disponible, celle que ses deux voisins n exploitent pas, à savoir r3. S.Blazy (ENSIIE) Compilation 10 décembre 2007 35 / 58

Exemple ae avait été coalescé avec r1. r3 c r2 b e r1 ae d Il reçoit donc la couleur r1. Bien sûr, nous savions déjà cela. Et voilà de quoi passer à la ligne. S.Blazy (ENSIIE) Compilation 10 décembre 2007 36 / 58

Exemple De même, b avait été coalescé avec r2. r3 c r2 b e r1 ae d Il reçoit donc la couleur r2. Bien sûr, nous savions déjà cela. Et voilà de quoi passer à la ligne. S.Blazy (ENSIIE) Compilation 10 décembre 2007 37 / 58

Exemple e avait été coalescé avec a. r3 c r2 b e r1 a d Il reçoit donc la même couleur que a, à savoir r1. Et voilà de quoi passer à la ligne. S.Blazy (ENSIIE) Compilation 10 décembre 2007 38 / 58

Exemple Enfin, c était candidat au «spill». r3 c r2 b e r1 a d Parce que ses cinq voisins exploitent les k = 3 couleurs, il doit effectivement être «spillé». S.Blazy (ENSIIE) Compilation 10 décembre 2007 39 / 58

L algorithme de George et Appel L algorithme de George et Appel est efficace et produit du code de bonne qualité. S.Blazy (ENSIIE) Compilation 10 décembre 2007 40 / 58

«Coalescing» optimiste Park et Moon (1998) ont suggéré l optimisme plutôt que la prudence : on fusionne agressivement, ce qui présente l avantage d ouvrir de nouvelles opportunités de simplification ; si on est amené à «spiller» un sommet obtenu par fusion, on défait la fusion dans l espoir d éviter le «spill» ; cela crée une interaction avec la simplification : défaire une fusion peut rendre non trivialement colorable un sommet déjà retiré du graphe car considéré comme trivialement colorable... En bref, l inventivité est sans fin. S.Blazy (ENSIIE) Compilation 10 décembre 2007 41 / 58

Algorithmes de coloriage 2 Algorithmes de «spill» Quelques problèmes pratiques S.Blazy (ENSIIE) Compilation 10 décembre 2007 42 / 58

Problème Lorsque certains sommets n ont pu être colorés, il faut modifier le code pour diminuer le nombre de registres physiques nécessaires simultanément. Mais comment? D innombrables modifications différentes et correctes sont possibles, car on peut, en tout point du code, décider de transférer une valeur d un registre vers la mémoire ou vice-versa. S.Blazy (ENSIIE) Compilation 10 décembre 2007 43 / 58

Une solution simple Soit %p un pseudo-registre «spillé». La solution la plus simple, due toujours à Chaitin, consiste à : réserver un emplacement de pile ; considérer que le contenu de %p sera stocké à tout instant à cet emplacement. Si la machine cible est CISC, les instructions qui définissent ou utilisent %p peuvent donc être traduites en des instructions qui lisent un opérande ou écrivent un résultat directement en mémoire. Mais,... S.Blazy (ENSIIE) Compilation 10 décembre 2007 44 / 58

La poule et l œuf Toutefois, si la machine cible est RISC, seules des instructions dédiées, lw et sw pour le MIPS, permettent d accéder à la mémoire. Il faut donc émettre un sw après chaque écriture dans %p et un lw avant chaque lecture. Une instruction ERTL comme add peut ainsi être traduite, au pire, par une séquence de deux lw, un add, et un sw... Mais quels registres physiques utiliseront ces quatre instructions pour communiquer!? S.Blazy (ENSIIE) Compilation 10 décembre 2007 45 / 58

Quelques œufs de côté Deux réponses sont possibles : on fait apparaître les instructions lw et sw dans le code source, c est-à-dire ERTL ; leurs opérandes sont alors des pseudo-registres ; et on recommence l allocation de registres à partir du début. Pour garantir la terminaison, on interdit de «spiller» les pseudo-registres nouvellement introduits. on réserve deux registres physiques, que l on rend non allouables, et on les emploie ici. La première approche est plus courante dans la littérature et la seule viable lorsque le processeur a peu de registres. La seconde est plus simple et adoptée dans le petit compilateur. S.Blazy (ENSIIE) Compilation 10 décembre 2007 46 / 58

Allocation des emplacements de pile Comment décide-t-on que tel pseudo-registre occupera tel emplacement, en respectant arêtes d interférence et de préférence? C est simple cette fois, réellement. Il s agit d un problème de coloriage du graphe résiduel formé par les pseudo-registres «spillés» seuls, pour k =. On applique les heuristiques de simplification et de «coalescing» agressif. S.Blazy (ENSIIE) Compilation 10 décembre 2007 47 / 58

Au-delà de la solution simple On peut faire mieux qu insérer des lw et sw à chaque utilisation ou définition. Par exemple, si un site d utilisation est «proche» d un site de définition ou d un site d utilisation antérieur, alors un nouveau lw n est pas nécessaire. En d autres termes, on peut exploiter le fait que, par moments, la valeur existe simultanément dans un registre physique et en mémoire. S.Blazy (ENSIIE) Compilation 10 décembre 2007 48 / 58

Au-delà de la solution simple Deuxième amélioration : parfois, il est moins coûteux de recalculer une valeur que de la stocker en mémoire. C est le cas si cette valeur est constante ou bien une expression connue, par exemple la somme des valeurs de deux registres physiques toujours disponibles. On détecte ces situations à l aide d une technique d analyse proche de celle requise pour l élimination des sous-expressions communes (cours n o 6). Cette technique est appelée rematérialisation. S.Blazy (ENSIIE) Compilation 10 décembre 2007 49 / 58

Au-delà de la solution simple D autres techniques encore ont été étudiées : «live range splitting» : effectuer une mise en forme SSA pour décorréler les différents usages d un même pseudo-registre ; «interference region splitting» : supprimer l interférence entre deux pseudo-registres en émettant des lw et sw seulement dans la région où l interférence se produit ; «spill propagation» : effectuer une fusion pour «spiller» sur une région plus grande est parfois bénéfique. Idées de plus en plus complexes et parfois contradictoires! S.Blazy (ENSIIE) Compilation 10 décembre 2007 50 / 58

Une approche optimale On peut être tenté de dire «stop» et de rechercher une fois pour toutes une solution optimale. Diverses méthodes ont été étudiées mais restent pour l instant trop inefficaces. L idée (Goodwin & Wilken, 1996) est de réduire le problème à un système d équations et inéquations entre variables entières ou booléennes et de le soumettre à un solveur spécialisé pré-existant («integer linear programming»). S.Blazy (ENSIIE) Compilation 10 décembre 2007 51 / 58

Algorithmes de coloriage Algorithmes de «spill» 3 Quelques problèmes pratiques S.Blazy (ENSIIE) Compilation 10 décembre 2007 52 / 58

Le registre $zero Le registre $zero du MIPS contient toujours la valeur 0, même si on y a écrit une autre valeur. Est-il inutilisable? En fait, on peut le déclarer allouable si l on considère qu il interfère avec tous les pseudo-registres où l on écrit des valeurs non nulles. Ainsi, le fragment de code : l i %0, 0 sw %0, 0($gp) pourra être traduit par : sw $zero, 0($gp) S.Blazy (ENSIIE) Compilation 10 décembre 2007 53 / 58

Code à deux adresses L Intel x86 a une instruction d addition à deux adresses au lieu de trois : add r 1, r 2 Le registre r 1 est à la fois source et destination. Si le code intermédiaire est à trois adresses, on peut y insérer des instructions move pour garantir que la destination et le premier opérande de chaque addition coïncident. S.Blazy (ENSIIE) Compilation 10 décembre 2007 54 / 58

Classes de registres La plupart des processeurs ont plusieurs classes de registres physiques, par exemple entiers et flottants. Si ces classes sont disjointes, cela donne lieu à deux problèmes d allocation distincts. Mais, parfois, les registres physiques ne sont pas interchangeables ou bien pas indépendants... S.Blazy (ENSIIE) Compilation 10 décembre 2007 55 / 58

Interchangeabilité Deux registres sont interchangeables s ils ont exactement les mêmes usages. Ce n est pas toujours le cas. Par exemple, sur les Motorola 68K, l instruction d addition accepte un registre «d adresse» ou de «de données» en tant que source, mais l instruction de multiplication n accepte qu un registre «de données». S.Blazy (ENSIIE) Compilation 10 décembre 2007 56 / 58

Indépendance Deux registres sont indépendants s il est possible d écrire dans l un sans modifier le contenu de l autre. Ce n est pas toujours le cas. Par exemple, sur certains processeurs ARM, les registres flottants peuvent être organisés au choix en 32 registres simple précision, 16 registres double précision, 8 registres scalaires et 6 vecteurs de 4 éléments, ou bien 8 registres scalaires et 3 vecteurs de 8 éléments! Heureusement, on peut traiter les cas les plus courants à l aide d un algorithme de coloriage généralisé : cf. «A Generalized Algorithm for Graph-Coloring Register Allocation» (Smith et al., 2004). S.Blazy (ENSIIE) Compilation 10 décembre 2007 57 / 58

Pour finir Pour passer de ERTL à LTL, le petit compilateur utilise : Kildall Liveness Interference Zero Build Uses Coloring Spill Ertl2rtlI Ertl2rtl Calcul de point fixe Analyse de durée de vie Opérations sur le graphe d interférences Cas particulier pour $zero Construction du graphe d interférences Comptage des emplois des pseudo-registres Coloriage à la George et Appel Coloriage avec k = Introduction des lw et sw Combinaison du tout S.Blazy (ENSIIE) Compilation 10 décembre 2007 58 / 58