Génération de code
Frédéric Béchet
Carlos Ramisch
Sylvain Sené 1
Compilation – L3 Informatique
Département Informatique et Interactions
Aix Marseille Université
1. Adapté des diapos de Alexis Nasr
1 / 35
Données programme =machine
Machine
Registres
Instructions opèrent sur les registres
Accès rapide
Nombre limité (MIPS 32)
Mémoire
Capacité “illimitée” (très grande)
Accès plus lent
Programme source
Variables (et temporaires)
Contiennent des valeurs d’un certain type
Temporaires utilisés pour évaluer des expressions
Pas d’adresse machine explicitée par programmeur
Décision registre ×mémoire compilateur
2 / 35
Allocation de registres
Dans quel registre/case mémoire seront représentées les variables ?
Le générateur de code doit affecter des registres aux variables
Généralement, nb. de registres <nb. de variables
Générer des instructions de transfert mémoire registres
Attention : temporaires t0,t16=registres $t0 ...
Probablement, certaines variables (ou temporaires) ne seront
jamais en mémoire
3 / 35
Algorithmes d’allocation de registres
Assigner des registres : quelles variables en mémoire/registres ?
Allouer des registres : dans quels registres ?
Critères d’optimisation :
maximiser l’utilisation des registres
minimiser le nombre d’instructions de transfert
Cas général : NP-complet heuristiques
Registres spéciaux ($fp,$sp,$ra)
4 / 35
Stratégie 0 : basique
Toutes les variables sont en mémoire
Tous les temporaires sont stockés sur la pile
MIPS est utilisé comme une “machine à pile”
Seulement 3 registres temporaires utilisés
5 / 35
1 / 44 100%