La lecture en ligne est gratuite
Le téléchargement nécessite un accès à la bibliothèque YouScribe
Tout savoir sur nos offres
Télécharger Lire

cours sur la compilation (projet)

17 pages
cY[Z"O"NP\]X^X^NWV_KQN-IK`2%xx5xx5xx5xx5xY[Z"O"NP\]X^X^NWV_KQN-IK`l"B-!# $98Fc:$98-!fhgi0!#=8AK!1?j$98Fz2:; :jB-!1?j$FDcy KB;"!1?j$x5x5xx5xxx5xx:S8NO"J\J`AN$Y[Z"O"NJp'L^N-`^Vvu:dk"*l"BA :S8nm :2sr:DFa2?:A@"#BC?:D Kk?:;8E>Fs#!# $cF4:G :;$98FH"IKJMLANPO"NQNSRUTcNWV=NXaY[Z"O"NP\]X^X^NWV_KQN-IK`c2Y[Z"O"NJp'L^N-`^Vvu3Y[Z"O"NP\]X^X^NWV_KQN-IK`234w$57698;:
Voir plus Voir moins

Vous aimerez aussi

c
Y[Z"O"NP\]X^X^NWV_KQN-IK`
2
%

xx5xx5xx5xx5x
Y[Z"O"NP\]X^X^NWV_KQN-IK`
l"B-!# $98
F
c
:
$98-!
fhgi0!#=8AK!1?j$98
Fz
2
:; :jB-!1?j$
F
D
c
y
KB;"!1?j$
x5x5xx5xxx5xx
:S8
NO"J\J`AN
$
Y[Z"O"NJp'L^N-`^Vvu
:dk"*l"BA :S8nm
:
2
s
r
:
D
F
a
2
<s
$K$M698C:
:;$
4
$K$t:;e:;$U!#8
8AK!1?j$
:
<
8W!
2
NO"J\J`AN

2
c
5deK!1#BC?:
:S
F


H*o*p'LA\5R"N)\_9XqL^`C\5JL^N
"!# $
2

3
%
2
'&)(
D
*
+-,".0/1
!
2
:-:
3
:S8
2
:;8-!1?j$
4
:S8
$57698;:=<>?:A@"#BC?:

D
Kk?:;8
E>F
s
#!# $
c
F
4
:G :;$98
F
H"IKJMLANPO"NQNSRUT
c
NWV=NX
a
Y[Z"O"NP\]X^X^NWV_KQN-IK`
c
2
Y[Z"O"NJp'L^N-`^Vvu
3
Y[Z"O"NP\]X^X^NWV_KQN-IK`
2
3
4
w
$57698;:
<ba'c

Selection d’instructions
Projets de compilation.
Didier Remy
Octobre 2000
http://cristal.inria.fr/~remy/poly/compil/4/
http://w3.edu.polytechnique.fr/profs/informatique/Didier.Remy/compil/4/
Slide 1,.-
3
!
;):/*/
,

,
4
&+&'(<*)+


%$

#

2


2

9&'9*):;9


#"
3
2


&'(*)+

)'/*0(1

3

05



768)'


Une etape dans la cha^ ne de compilation
Slide 2
Pourquoi choisir les instructions avant d’allouer les registres ?
{ La selection des depend des conventions d’appel.
{ Elle utilise au besoin de nouveaux temporaires.
{ L’allocation des registres tiendra compte de ces temporaires et
minimisera les mouvements de registres autour des appels.
La selection d’instructions
But
Traduire le code intermediaire en code assembleur.
{ Generer les meilleures combinaisons d’instructions possibles
{ En fonction des conventions d’appel, generer les prologues et
les epilogues des fonctions.
Slide 3
Contrainte
Pour permettre l’allocation de registres, il faut empaquetter le
code assembleur dans une structure permettant ensuite
l’allocation de registres.
{ Choisir de nitivement les instructions,
{ Sans xer le choix des registres (laisse a l’allocateur).
Les instructions sont abstraites par rapport au choix nal des
registres.
2La representation des instructions
On distingue les registres sources (lecture) des registres
destination (ecriture).
Les instructions sont representees par des cha^ nes ; les registres
sont codes par le caractere d’echappement ’^’ suivi d’un code
’d’ pour destination et ’s’ pour source et d’un chi re i indiquant
qu’il s’agit du i-eme registre destination ou source. Ainsi, par
Slide 4
exemple, "add ^d0, ^s0, ^s1" est une representation compacte
de la fonction :
fun d s > "add "^(nth d 0)^", "^(nth s 0)^", "^(nth s 1)
On retrouve celle-ci par decodage de la cha^ ne (cf printf) :
decode : string > (temp list > temp list > string)
d ecode inst src dest retourne une instruction dans laquelle les
registres formels destination et sources ont ete substitues par des reels src et dest.
L’instruction principale
Oper (instr, src, dest, sauts)
type instr =
j Oper of
string temp list temp list label list option
La cha^ ne instr code l’instruction comme indique precedemment.
Slide 5
Les listes de registres src et dest decrivent les temporaires lus
et ecrits par l’instruction.
{ Cette information est utilisee par l’allocateur de registres ;
{ Leurs temporaires seront in ne associes a de vrais registres.
La liste d’etiquette sauts vaut None si le contr^ ole passe
toujours a l’instruction suivante. Sinon, Some ‘ indique
explicitement l’ensemble des instructions (etiquettes) de la
procedure a laquelle le contr^ ole peut suivre.
3Deux instructions particulieres
Instructions de transfert Move (instr, src, dest)
j Move of string temp temp
Ces instructions ne calculent pas et pourront ^etre supprimees
lorsqu’il sera possible d’associer les temporaires src et dest a un
m^eme registre (ce qu’essaye de faire l’allocateur).
Slide 6
Les etiquettes Label (nom, lab)
j Label of string label
Elles permettent de suivre le ux de contr^ ole, ce qui est
indispensable pour le calcul de duree de vie prealable a l’allocation
de registres (et utile aussi pour d’autres optimisations).
Selection des instructions
Le code intermediaire comporte peu d’instructions, bien moins
que le code machine. N’a-t-on pas perdu de l’information dans la
traduction vers le code intermediaire ?
Cette information est contenue dans la richesse de la combinaison
des expressions du code intermediaire qu’il faut reconstituer. La
selection d’instructions ne s’e ecture pas construction par
Slide 7
construction, mais traduit souvent des expressions complexes en
une seule instruction machine (et quelque fois inversement) :
Move temp (t ;Bin (Plus;Temp t ;Const 3))! addu t ;t ; 30 1 0 1
Souvent, plusieurs choix sont possibles.
4
040$1$376
7
/0$12$435
*,+
.
$6
+-,
.(/0/
*

!"$#&%(''