Вы находитесь на странице: 1из 143

Cours de compilation

Denis Barthou dbarthou@enseirb.fr

Cours compilation 2011-2012

1 D. Barthou

Sujets abords en compilation

Description d'un compilateur Description des langages de programmation Analyse de code, optimisation Mthodes de typage ro!l"mes thori#ues $graphes, langages% et prati#ues $&aire un compilateur%

Cours compilation 2011-2012

2 D. Barthou

Sujets abords en compilation

Description d'un compilateur Description des langages de programmation Analyse de code, optimisation Mthodes de typage ro!l"mes thori#ues $graphes, langages% et prati#ues $&aire un compilateur% Cours et (D sur les aspects thori#ues, sur les mthodes de compilation )cances prati#ues sur les outils de compilation, sur l'asm *+, ro-et de compilation
' D. Barthou

Dans ce module:

Cours compilation 2011-2012

1- Introduction
Intrt de la compilation

/util incontourna!le, #uel#ue soit le langage Meilleure connaissance des compilateurs 0 meilleure programmation (echni#ues de compilation rutilisa!les dans nom!reu* conte*tes $notamment analyse de code% )u-et acti& de recherche1

2angages pour le paralllisme, pour les machines a3ec acclrateurs matriels Domain )peci&ic 2anguages Compilation pour l'em!ar#u
. D. Barthou

Cours compilation 2011-2012

1- Introduction
Description d'un compilateur

De&initions1 Un compilateur est un programme qui prend en entre un programme et le transforme en un autre programme. Un interprteur est un programme qui prend en entre un programme et l'excute.

2e compilateur est un traducteur. 2'interprteur une machine 3irtuelle.

Cours compilation 2011-2012

4 D. Barthou

1- Introduction
Description d'un compilateur

De&initions1 Un compilateur est un programme qui prend en entre un programme et le transforme en un autre programme. Un interprteur est un programme qui prend en entre un programme et l'excute.

2e compilateur est un traducteur. 2'interprteur une machine 3irtuelle.

2angages compils ou interprts 5 C, 6a3a, perl, lisp, s#l, assem!leur Compilateur, interprteur ou autre chose 5 2a(e7, ma8e, 3isualiseur postscript, matla!
, D. Barthou

Cours compilation 2011-2012

1- Introduction
Objectifs possibles du compilateur

rser3er la smanti#ue $o!ligatoire% :nrer un code le plus rapidement possi!le (rou3er toutes les erreurs le*icales, synta*i#ues et smanti#ues

rou3er #ue le code gnr est correct, #ue le code d'entre respecte une spec. )'e*cutant le plus rapidement possi!le Consommant le moins d'nergie possi!le 2e plus petit possi!le
9 D. Barthou

:nrer un code

Cours compilation 2011-2012

1- Structure du compilateur
Dcomposition en couches

=*cuta!le langage A
Analyse lexicale Analyse syntaxique Analyse smantique Gnration de representation intermdiaire (RI) Optimisation de RI Gnration de code Optimisation

Analyse le*icale1 lit le programme, reconnait cha#ue mot Analyse synta*i#ue1 3ri&ie la grammaire Analyse smanti#ue1 3ri&ie le sens du programme $e*1 types% ;<1 une inter&ace sparant les &ront-end, middle-end et !ac8end du compilateur

=*cuta!le langage B
+ D. Barthou

Cours compilation 2011-2012

1- Structure du compilateur
Dcomposition en couches Changement de langage d'entre

=*cuta!le langage C
Analyse lexicale Analyse syntaxique Analyse smantique Gnration de representation intermdiaire (RI) Optimisation de RI Gnration de code Optimisation

/n ne change #ue le &ront-end

=*cuta!le langage B
Cours compilation 2011-2012
> D. Barthou

1- Structure du compilateur
Dcomposition en couches Changement de langage ci!le

=*cuta!le langage A
Analyse lexicale Analyse syntaxique Analyse smantique Gnration de representation intermdiaire (RI) Optimisation de RI Gnration de code Optimisation

/n ne change #ue le !ac8-end

=*cuta!le langage D
Cours compilation 2011-2012
10 D. Barthou

1- Structure du compilateur
E emples de dcomposition !cc1

=*cuta!le langage A
Analyse lexicale Analyse syntaxique Analyse smantique Gnration de representation intermdiaire (RI) Optimisation de RI Gnration de code Optimisation

2angage d'entre1 C, C??, 6a3a, @ortran, A Asm ci!le1 *+, $multiples 3ariantes%, arm, mips, ... (ree-ssa $gimple%1 plutot haut ni3eau ;(21 pour la gnration de code asm $lisp-li8e%

Deu* ;< !ien distinctes

=*cuta!le langage B
11 D. Barthou

Cours compilation 2011-2012

1- "iblio#raphie pour le cours

Compilateurs, principes, techniques et outils, Aho, )ethi et Bllman, <nterditions Modern Compiler Design, :rune, Bal, 6aco!s, 2angendoen, Ciley Modern Compiler, Implementation in C. Appel, :ins!urg, Cam!ridge B. ress Optimizing compilers for modern architectures, Allen, Dennedy, Morgan-Dau&man d!anced compiler design implementation, Muchnic8, MorganDau&man
12 D. Barthou

our aller plus loin

Cours compilation 2011-2012

$- %nal&se le icale
Objectif1

=*cuta!le langage A
Analyse lexicale Analyse syntaxique Analyse smantique Gnration de representation intermdiaire (RI) Optimisation de RI Gnration de code Optimisation

2ecture du programme d'entre ;econnaissance des le*"mes $to8ens%1 lments constituti&s du langage, mots cls, noms de 3aria!les, sym!oles de ponctuation...

=*cuta!le langage B
Cours compilation 2011-2012
1' D. Barthou

$- 'an#a#es r#uliers
Cadre thori(ue pour l'anal&se le icale

Alpha!et1 ensem!le &ini de sym!oles $lettres% Mot1 suite &inie de lettres, operation1 concatnation. Mot 3ide1 2angage1 ensem!le de mots =*pressions rguli"res $rappels%

Dcri3ent les langages rguliers $ou rationnels% @ormes a3ec les oprateurs E, F , la concatnation et

Cours compilation 2011-2012

1. D. Barthou

$- 'an#a#es r#uliers
%utomates r#uliers

;econnaissent les e*pressions rguli"res Distinction importante1 automates dterministes et automates nondterministes )chmas d'e#ui3alences

Cours compilation 2011-2012

14 D. Barthou

$- %utomate fini dterministe


=*emple d'automate &ini dterministe

;econnaissance de GlolH

Cours compilation 2011-2012

1, D. Barthou

$- %utomates finis
=*emple d'automate &ini non dterministe

;econnaissance de Gs8ateH

Cours compilation 2011-2012

19 D. Barthou

$- E pression re#uli)re * %utomate


Construction de +hompson Mthode simple de construction d'automate non dterministe

Construction de ;1 . ;2

Cours compilation 2011-2012

1+ D. Barthou

$- E pression r#uli)re * %utomate

Construction de ;1 F ;2

Cours compilation 2011-2012

1> D. Barthou

$- E pression r#uli)re * %utomate

Construction de ;E

Cours compilation 2011-2012

20 D. Barthou

$- Dterminisation de l'automate
%l#o de dterminisation /n part d'un automate $I,,,n0,NF) /n construit un automate $J,,,#0,J@%

#0 K -&ermeture$n0% <nitialiser J a3ec #0 Cor8list K #0 (ant #ue $Cor8list LK empty% Choisir #i dans Cor8list our cha#ue caract"re c q = -&ermeture$$#i,c%% $#i,c% K # )i # pas dans J, a-outer # M Cor8list et A-outer # M J

2es tats du nou3el automate sont des ensem!les d'tat de l'ancien. Algo par calcul de point &i*e Comple*it e*ponentielle au pire.

J@ est l'ensem!le des tats contenant un


tat &inal de N
F

Cours compilation 2011-2012

21 D. Barthou

$- ,inimisation de l'automate
%l#o de minimisation

art d'une partition des tats1


=tats &inau*, =tats non &inau*

;a&&ine la partition en sparant les tats #ui n'ont pas le mNme comportement Algorithme par calcul de point &i*e =*emple complet
22 D. Barthou

Cours compilation 2011-2012

$- !nration de le )mes
Objectif de l'anal&seur le ical:

;econnaissance de tous les le*"mes du langage Bn le*"me1


Bn type $3er!e, nom, mot cl, identi&icateur, A% Bne 3aleur $manger, lion, &or, toto, ...%

Action M cha#ue reconnaissance de le*"me1 transmettre le le*"me pour l'analyse synta*i#ue 2e*"mes pre&i*es d'autres1 on prend les plus longs Am!iguit entre le*"mes1 rsolution conte*tuelle $a3ec analyse synta*i#ue% ou pr&rence donne M un type de le*"me
2' D. Barthou

Difficults:

Cours compilation 2011-2012

-- %nal&se s&nta i(ue


Objectifs:

Ori&ier #ue le programme est !ien &orm, appartient au langage de programmation

=*cuta!le langage A
Analyse lexicale Analyse syntaxique Analyse smantique Gnration de representation intermdiaire (RI) Optimisation de RI Gnration de code Optimisation

0 la grammaire du langage peut gnrer ce programme

)i o8, gn"re un ar!re synta*i#ue )inon, gnre des messages d'erreurs appropris

=*cuta!le langage B
Cours compilation 2011-2012
2. D. Barthou

-- !rammaires al#bri(ues
!rammaire:

Oaria!les $non terminau*% et sym!oles terminau* $le*"mes% )ym!ole initial $)% ;"gles de production du type A0

A3ec un mot de 3aria!lesPle*"mes

Cours compilation 2011-2012

24 D. Barthou

-- !rammaires al#bri(ues
!rammaire:

E emple:

Oaria!les $non terminau*% et )0= sym!oles terminau* $le*"mes% = 0 = ? =F = Q =F= E =F( )ym!ole initial $)% ( 0 id F n F $=% ;"gles de production du type A3ec A0 ),=,( les 3aria!les de la grammaire, A3ec un mot de 3aria!lesPle*"mes ?,-,E,$,%,R,id,n les le*"mes de la grammaire

Cours compilation 2011-2012

2, D. Barthou

-- !rammaires al#bri(ues
.appels: Dri/ation1 application d'une r"gle M un mot =*1 id ? = E ( 0 id ? ( E ( %rbre de dri/ation: reprsentation des dri3ations sous &orme d'ar!re. 2es &euilles1 les le*"mes. ;acine1 ) !rammaire ambi#0e: il e*iste un mot reconnu par la grammaire, a3ec 2 ar!res de dri3ation =*1 n ? n E n
Cours compilation 2011-2012
29 D. Barthou

Dri/ation 1 #auche2droite: Application d'une r"gle sur la 3aria!le la plus M gauchePdroite du mot. =*1 n ? = ? (Eid 0 n ? ( ? (Eid

-- .econnaissance de mots
.econnaissance de mots:

Construction d'automate M pile :rammaire alg!ri#ue 0 automate M pile non dterministe $3u l'anne derni"re%

Cours compilation 2011-2012

2+ D. Barthou

-- .econnaissance de mots
.econnaissance de mots:

3robl)me:

Construction d'automate M pile

:rammaire alg!ri#ue 0 automate M pile non dterministe $3u l'anne derni"re% Solution:

as d'algo de dterminisation d'automates M pile L Certains langages alg!ri#ues pas reconnus par automates dterministes...

;estreindre les langages M des langages non am!igus )ous classe des langages alg!ri#ues pour a3oir algo de reconnaissance e&&icaces.

Deu* classes d'algo1 analyse descendante et ascendante


2> D. Barthou

Cours compilation 2011-2012

-- %nal&se descendante
3rincipe:

E emple )ym!ole initial1 )

artir de ),

(rou3er la r"gle M appli#uer en ) 0 = R =0(; &onction de la prochaine lettre (0nF$=% $le*"me% M lire ; 0 ?= F -= F E= F Classe '' d'anal&se:

2e&t to right parsing, le&tmost deri3ation

Comment gnrer le mot n ? n E n 5 =t $n ? n% E n 5

Dterminer le*"mes en premi"re position de production Ceu* #ui peu3ent sui3re une 3ar.
'0 D. Barthou

Cours compilation 2011-2012

-- %nal&se descendante
Calcul des prem par point fi e

Calcul de sui/

prem$=% Sprem$%F=0T prem$a% K SaT prem$% prem$% prem$% prem$U% si prem$% prem$=% sui3$=% si prem$E%

sui3$A% S prem$% F B 0 A T sui3$A% sui3$B% si prem$% et B 0 A

Cours compilation 2011-2012

'1 D. Barthou

-- E emple de calcul des prem2sui/

prem$)% K prem$=% prem$=% K Sn , $T prem $(% K Sn, $T prem$;% K S?, - , E, %, RT )ui3$;% K sui3$=% K S%, RT

)ym!ole initial1 ) )0=R (0nF$=% ; 0 ?= F -= F E= F =0(;

Comment gnrer n?nEn 5 $nEn%?n 5

Cours compilation 2011-2012

'2 D. Barthou

-- %nal&se descendante par automate 1 pile


3rincipe de l'automate

ile1 tat de la reconnaissance 2es prem et sui31 constituent la ta!le de transition des tats de l'automate (a!le des premsPsui31 ta!le de prdiction )'arrNte sur pile 3ide. @acile M implmenter, M comprendre.
'' D. Barthou

=mpiler ) (ant #ue pile pas 3ide )i a sur pile, a M lire 0 dpiler et lire a )inon si A sur pile, a M lire 0 remplacer A par si a prem$w% et A 0 V )inon erreur.

%nal&se '' par automate:

Cours compilation 2011-2012

-- %nal&se descendante: probl)mes


3robl)mes:

Solutions: * 'e3er am!iguit si possi!le $pas tou-ours &aisa!le% 0 Drcursi3er. = 0 (;, ; 0 ?= F 0 =ssayer 2, ', A caract"res d'a3ance. LL Augmente comple*it automate 0 C& solutions prcdentes. /u Changer de type d'analyse...
'. D. Barthou

:rammaires am!igues =0=?=F=E= ;"gles rcursi3es gauche =0=?(F( 1 caract"re d'a3ance $loo8 ahead% ne su&&it pas1 = 0 id ? = F id Q = lusieurs r"gles appli#ua!les pour un caract"re $con&lit%

Cours compilation 2011-2012

-- %nal&se ascendante
3rincipe:

/n part du mot, on appli#ue M l'en3ers les r"gles -us#u'M retrou3er ).

0 on a plus d'in&ormation #ue analyse descendante $tout le mot au lieu de 1 seul caract"re pour choisir la r"gle% 0 analyses plus puissantes

Di&&rentes 3ariantes d'analyse


(erme gnri#ue1 2;, 2e&t to right parsing, ;ightmost deri3ation 2;$0%, 2;$1%, )2;$1%, 2A2;$1%, 2;$8%, ...
'4 D. Barthou

Cours compilation 2011-2012

-- %nal&se ascendante: e emple


,ot 1 reconnaitre: id ? $id E id% R Chaine de dri/ation4ri#htmost5: ) 0 =R 0 =?(R 0 =?$=%R 0 =?$=E(%R 0 =?$=Eid%R 0 =?$(Eid%R 0 =?$idEid%R 0 (?$idEid%R 0 id?$idEid%R Ide '.: artir de la &in, remonter la chaine de dri3ation -us#u'M )
Cours compilation 2011-2012
', D. Barthou

!rammaire: )0=R = 0 = ? (F = Q (F= E (F( ( 0 id F n F $=%

-- %nal&se ascendante par automate 1 pile


%utomate 1 pile '.

Base sur une ta!le de prdiction (a!le utilise 2 actions, pou3ant Ntre dcomposes en actions lmentaires d'automate M pile

* on ne 3erra pas comment la crer, -uste l'utiliser

2a ta!le dit #uelle action &aire en &onction de l'tat courant et du sym!ole M lire $loo8 ahead% ou du sym!ole sur la pile

)ur la pile1 initialement tat 0, puis on alterne sym!ole et tat.

Cours compilation 2011-2012

'9 D. Barthou

-- %nal&se ascendante par automate 1 pile


%ctions de l'automate:

Shift 4s51 on lit le le*"me en entre, et l'empile, on change d'tat et on l'empile

/n part de l'tat 1, le prochain le*"me est GaH 0 action s41 shi&t et on passe dans l'tat 4
5 a 1 1

Cours compilation 2011-2012

'+ D. Barthou

-- %nal&se ascendante par automate 1 pile


%ctions de l'automate:

;educe $r %1 on a reconnu une partie droite de r"gle A 0 V. /n dpile 2FVF sym!oles $le*"mes et tats%, on regarde l'tat sur le sommet de pile et on empile A et le nou3el tat.

/n part de l'tat 4, le sym!ole du haut de pile est (, &aire l'action reduce = 0 =?(
5

T
4

+
"

! 1 2011-2012 Cours compilation

'> D. Barthou

-- %nal&se ascendante par automate 1 pile


E emple: Dans la table

11 ) 0 = R 21 = 0 ( '1 = 0 = ? ( .1 ( 0 id 41 ( 0 $ = %

s n 3eut dire shi&t et passe dans l'tat n r n 3eut dire #u'on &ait un reduce de la r"gle numro n

;econnaissance de id ? $id ? id%R


.0 D. Barthou

Cours compilation 2011-2012

-- %nal&se ascendante par automate 1 pile +able de prdiction


Etat id 0 1 2 3 ! 5 6 s5 " # s3 r5 s5 r3 r! r2 s s# r5 r5 .1 D. Barthou s r3 r! r2 r3 r! r2 s" s6 s5 s3 s3 s2 r1 s! Lexme lire ou symbole sur le sommet de pile + ( ) $ E s1 T s6

Cours compilation 2011-2012

-- %nal&se ascendante: probl)mes


2a ta!le doit a3oir une action au plus par case )inon, il y a un conflit1

2'automate est alors non dterministe (ou-ours un pro!l"me en cas de grammaire am!igue )2;$0%, 2;$0%, )2;$1%, 2A2;$1%, 2;$1%

uissance des 3ariantes d'analyses ascendantes1

ar rapport M l'analyse descendante,

as de di&&icult a3ec rcursi3it gauche


.2 D. Barthou

Cours compilation 2011-2012

-- %nal&se le icale2s&nta i(ue


=*cuta!le langage A
Analyse lexicale Analyse syntaxique Analyse smantique Gnration de representation intermdiaire (RI) Optimisation de RI Gnration de code Optimisation

=*cuta!le langage B
Cours compilation 2011-2012
.' D. Barthou

-- %nal&se le icale2s&nta i(ue


=*cuta!le langage A
Analyse lexicale Analyse syntaxique Analyse smantique Gnration de representation intermdiaire (RI) Optimisation de RI Gnration de code Optimisation

=*cuta!le langage B
Cours compilation 2011-2012
.. D. Barthou

-- %nal&se le icale2s&nta i(ue


Outils1

2e* pour gnrateur d'analyseur le*ical 2lgen, AI(2; pour gnrateurs d'analyseurs 22 $22$8%% Wacc pour gnrateur d'analyseur 2; $2A2;$1%%

0 Btilisent des ta!les comprsses 0 (r"s e&&icaces ossi!le d'crire un analyseur le*ical M la main, Di&&icile pour un analyseur synta*i#ue.
Cours compilation 2011-2012
.4 D. Barthou

-- %nal&se le icale2s&nta i(ue: 6rap-up


Ce (u'on a /u

;appel e*pressions reguli"res, automates assage des e*pressions rguli"res au* automates dterministes :nration de le*"me M cha#ue tat &inal 0 analyseur synta*i#ue :rammaire pour d&inir un langage our l'analyse synta*i#ue1 2 approches, ascendante et descendante

Construction de la ta!le de prdiction analyseur 22, &onctionnement automate M pile 2imites analyse 22 @onctionnement automate M pile pour 2;, M partir de la ta!le de prdiction
., D. Barthou

Cours compilation 2011-2012

7- %nal&se smanti(ue
2a smanti#ue d&init le sens du programme C'est #uoi le sens d'un programme5

=*cuta!le langage A
Analyse lexicale Analyse syntaxique Analyse smantique Gnration de representation intermdiaire (RI) Optimisation de RI Gnration de code Optimisation

)ert M 3ri&ier la 3alidit du code 2e code assem!leur #ui3alent au code source 2e type de ses e*pressions

=*cuta!le langage B
Cours compilation 2011-2012
.9 D. Barthou

7- %nal&se smanti(ue
Ce (ue fait l'anal&se smanti(ue:

3oid &$int *, int y% S dou!le X K '.2Y * K X E t ? Ghello L GY i& $y LK 0% y K &$0,1%Y y K y E *Y Z* K ZyY return yY T

Ori&ier les types, les dclarations des 3aria!les 2es oprations lgales Ori&ier #ue le programme s'arrNte Jue les calculs sont corrects ...

Ce (ue ne fait pas l'anal&se:

Cours compilation 2011-2012

.+ D. Barthou

7- %nal&se smanti(ue
a% D&inition des attri!uts, grammaires attri!ues !% =3aluation des attri!uts, ordres d'3aluation c% Application1 Ori&ication du type des e*pressions

Cours compilation 2011-2012

.> D. Barthou

7-a !rammaires attribues


3our manipuler les /aleurs ncessaires 1 l'anal&se smanti(ue 0 attri!uts sur les sym!oles non-terminau* de la grammaire 0 r"gles de calcul des attri!uts pour cha#ue r"gle

Cours compilation 2011-2012

40 D. Barthou

7-a !rammaires attribues


3our manipuler les /aleurs ncessaires 1 l'anal&se smanti(ue 0 attri!uts sur les sym!oles non-terminau* de la grammaire 0 r"gles de calcul des attri!uts pour cha#ue r"gle )0= =1 0 =2 ? ( F =2 Q ( =0( (1 0 (2 E n Fn 3our cha(ue s&mbole non terminal1 attri!ut 3al, donnant la 3aleur de l'e*pression. 2es occurences d'une mNme 3aria!le dans une r"gle sont numrotes pour distinguer leurs attri!uts 3our n: sa 3aleur est celle du le*"me .)#les de calcul: comment calculer la 3aleur d'une e*pression M partir des 3aleurs pour les le*"mes n 5

Cours compilation 2011-2012

41 D. Barthou

7-a !rammaires attribues


3our manipuler les /aleurs ncessaires 1 l'anal&se smanti(ue 0 attri!uts sur les sym!oles non-terminau* de la grammaire 0 r"gles de calcul des attri!uts pour cha#ue r"gle )0= =1 0 =2 ? ( F =2 Q ( =0( (1 0 (2 E n Fn S8/al 9 E8/al E18/al 9 E$8/al : +8/al E18/al 9 E$8/al ; +8/al E8/al 9 +8/al +18/al 9 +$8/al < n8/al +18/al 9 n8/al
42 D. Barthou

Cours compilation 2011-2012

7-a !rammaires attribues


3our manipuler les /aleurs ncessaires 1 l'anal&se smanti(ue 0 attri!uts sur les sym!oles non-terminau* de la grammaire 0 r"gles de calcul des attri!uts pour cha#ue r"gle )0= =1 0 =2 ? ( F =2 Q ( =0( (1 0 (2 E n Fn S8/al 9 E8/al E18/al 9 E$8/al : +8/al E18/al 9 E$8/al ; +8/al E8/al 9 +8/al +18/al 9 +$8/al < n8/al +18/al 9 n8/al
4' D. Barthou

E emple: 1= : $=<7

Cours compilation 2011-2012

7-a !rammaires attribues


.)#les d'/aluation des attributs:

Donnes pour les r"gles de grammaire %ttributs hrits:

%ttributs s&nthtiss:

Attri!uts des le*"mes 2es attri!uts de A dans une r"gle A 0 u 3alus par cette r"gle

2es attri!uts de A dans une r"gle B 0 uA3 3alus par cette r"gle 2es attri!uts dpendent alors de ceu* de B etPou de ceu* des sym!oles de u,3.
4. D. Barthou

Cours compilation 2011-2012

7-a Ordre d'/aluation des attributs


Ordre d'/aluation des attributs:

Dans ar!re synta*i#ue, cha#ue 3aria!le1 un noeud dcor a3ec ses attri!uts Dpendances entre attri!uts1

Bn attri!ut a de M ne peut Ntre 3alu #ue si la 3aleur de l'attri!ut ! de I est connue M.a 0 I.! )ur un ar!re synta*i#ue particulier, l'ens. des dpendances donne le #raphe des dpendances <l &aut #ue le graphe de dpendance soit un DA: L D&init des parcours de l'ar!re synta*i#ue permettant e3al.
44 D. Barthou

/rdre d'3aluation des attri!uts


Cours compilation 2011-2012

7-b Ordre d'/aluation des attributs


E emple 1 )0D2Y D 0 int F dou!le 20< 21 0 < , 22 < 0 id 2.t K D.t D.t K i D.t K d <.t K 2.t <.t K 21.t 22.t K 21.t <.nom K id.nom
4, D. Barthou

int toto > tata> titi? @uel est le #raphe de dpendance entre attributs A @uel ordre de parcours est /alide A

Cours compilation 2011-2012

7-b Ordre d'/aluation des attributs


E emple $ 1= < 7 < B : @uel est le #raphe de dpendance entre attributs A @uel ordre de parcours est /alide A )02?A 2.h K A.s A.s K A.h, A.sK2.h 21 0 22 E A 22.h K 21.h 21.s K A.s A.h K 22.s 20n A0n
Cours compilation 2011-2012

2.s K 2.h ? n.3al A.s K A.h ? n.3al


49 D. Barthou

7-b %nal&se #uide par la s&nta e


E/iter les c&cles d'/aluation

Dynami#uement1

Ori&ier a!sence de circuit pour cha#ue ar!re synta*i#ue =rreur sinon $msg peut comprhensi!le% Attri!uts synthtiss1 #rammaire S-attribue Dpendent des attri!uts des sym!oles plus M gauche dans la r"gle de grammaire, ou synthtiss1 #rammaire '-attribue

)tati#uement1

A 0 B C D 1 attri!uts de

A1 pas de contrainte. B1 dpendent de A. C1 de A, B. D1 de A,B,C

Cours compilation 2011-2012

4+ D. Barthou

7-b %nal&se #uide par la s&nta e


Ordre d'/aluation

)uit l'ordre de reconnaissance des r"gles

A cha#ue &ois #u'une r"gle est rduite, on appli#ue l'action smanti#ue

as de circuit dans le graphe de dpendances 2es 3aleurs des attri!uts peu3ent Ntre places sur la pile $admis%

Cours compilation 2011-2012

4> D. Barthou

7-b Construction d'un arbre s&nta i(ue abstrait


Cn %S+ 4%bstract S&nta +ree5

Construit e*plicitement par analyse guide par la synta*e Attri!uts synthtiss1 les noeuds de l'ar!re. ermet de ne garder #ue les noeuds signi&icati&s pour l'analyse smanti#ue $supprime les le*"mes de ponctuation% ermet de constrainte pour les parcours de l'ar!re, pas li M l'analyse synta*i#ue Icessite 2 passesPparcourts $une pour construire l'ar!re, une pour &aire l'analyse% ,0
D. Barthou

%/anta#e de l'%S+:

Incon/nients de l'%S+:

Cours compilation 2011-2012

7-c Drification de t&pes


Cn t&pe:

Bn ensem!le de 3aleurs Bn ensem!le d'oprateurs sur ces 3aleurs )tati#ue1 3ri&ie M la compilation #ue toutes les oprations sont compati!les a3ec les types, ne pas laisser de doutes M l'e*cution Dynami#ue1 3ri&ie M l'e*cution la 3alidit des oprations. lus prcis #ue l'analyse stati#ue, sou3ent moins e&&icace.

Drification des t&pes:

Cours compilation 2011-2012

,1 D. Barthou

7-c Drification des t&pes: +able des s&mboles> un prre(uis


+able des s&mboles:

)toc8e les in&ormations relati3es M cha#ue 3aria!le du code


(ype Oaleur $si constante% ;egistre ou elle sera stoc8e, ou adresse mmoire

Bne ta!le des sym!oles par &onction $plus gnralement, par portePscope% eut Ntre utilise par toutes les tapes d'un compilateur

Cours compilation 2011-2012

,2 D. Barthou

7-c Drification des t&pes


=*emple de 3ri&ication de type $a3ec &loatPintPchar% )0= = 0 = ? ( F = Q ( F $int% = F $&loat% = ( 0 $=% F n F & F c

Cours compilation 2011-2012

,' D. Barthou

B- !nration de reprsentation intermdiaire


;eprsentation intermdiaire

=*cuta!le langage A
Analyse lexicale Analyse syntaxique Analyse smantique Gnration de representation intermdiaire (RI) Optimisation de RI Gnration de code Optimisation

hase &inale du &ront-end du compilateur But1 gn"re code pour !ac8end


Code indpendant du hardVare $!ac8end% Code pas optimis $&ait par !ac8end%

Code interpret1 e*cution &in analyse smanti#ue


Cours compilation 2011-2012

=*cuta!le langage B
,. D. Barthou

B- !nration de .I
3our(uoi une .I A

)egmente le tra3ail du compilateur ;end possi!le le d3eloppement des &ront ends indpendamment des !ac8ends $et in3ersement%

:cc a de nom!reu* &ront-ends et !ac8-ends Iecessaire par&ois d'a3oir plusieurs ;<, en &onction de ce #u'on 3eut optimiser

Beaucoup d'optimisations peu3ent se &aire sur la ;<

Cours compilation 2011-2012

,4 D. Barthou

B- !nration de .I
%rchitecture de #cc

[istori#uement, ;(2 tres proche du code machine 6a3a !ytecode erl4, Cpython !ytecode 22OM <; Cuda et (7 $!ase /pen,. compiler pour le &rontend%

)ource

%utres .I

Binaire
Cours compilation 2011-2012

,, D. Barthou

B- !nration de .I
3lan

Ju'est-ce #u'on manipule 5


a% =ncodage des 3aria!les !% /u stoc8e-t-on ces donnes 5 c% =ncodage des &onctions, appels de &onction

d% Comment gnrer du code de ;< 5

Cours compilation 2011-2012

,9 D. Barthou

B-a +&pes primitifs

our char, short, int, dou!le, &loat, char, A1 manipuls directement par l'architecture

2a &a\on de ranger les octets $!yte order% dpend de l'architecture

our les pointeurs1 manipuls directement par l'architecture $des adresses%, gnralement sur ,. !its ou '2 !its.

Cours compilation 2011-2012

,+ D. Barthou

B-a +ableau 1D

=ncodage des ta!leau* monodimensionnels1

2es lments sont rangs M la suite les uns des autres $en C%

=n 6a3a, la longueur pre&i*e les lments de ta!leau

Cours compilation 2011-2012

,> D. Barthou

B-a +ableau multidimensionnels

=ncodage des ta!leau* multidimensionnels1

=n C, le ta!leau est linaris

Juelle &ormule pour trou3er l'adresse de a]i^]-^]8^ dans a]n^]m^]p^ 5


90 D. Barthou

Cours compilation 2011-2012

B-a +ableau multidimensionnels

=n 6a3a $et !ien d'autres langages%, ta!leau de ta!leau

Cours compilation 2011-2012

91 D. Barthou

B-a +ableau multidimensionnels

=n 6a3a $et !ien d'autres langages%, ta!leau de ta!leau

Cours compilation 2011-2012

92 D. Barthou

B-a Structures

our les structures 0 une structure est un ta!leau int a; char c; float d;

struct {

}; o&&set 0
a

.
c

4
d

Cours compilation 2011-2012

9' D. Barthou

B-b Eones mmoires


- Fones:

2es donnes glo!ales1 gr par compilateur 2a pile1 gre par compilateur 2e tas1 inter&ace de programmation propose par /)

Cours compilation 2011-2012

9. D. Barthou

B-b %llocation stati(ue

2'allocation stati#ue s'occupe des donnes de taille &i*e dans le programme 0 le compilateur doit connaitre la taille de ces donnes

Compilateur calcule la taille des 3aria!les localesPglo!ales, alloue l'espace pour ces 3aria!les

Oars glo!ales1 adresse mmoire stati#ue Oar locale1 sur la pile, dplacement par rapport sommet
94 D. Barthou

Cours compilation 2011-2012

B-b %llocation stati(ue

Certaines 3aria!les ne sont pas utilises tout le long du programme1


ossi!le de rutiliser leur emplacement en cours de l'e*cution

=*emple1 3aria!les dclares localement dans des !locs { int a; { int b, x, c[3]; } { int x[4]; int y; } }

Cours compilation 2011-2012

9, D. Barthou

B-b %llocation d&nami(ue

Constructions de langage neVP&ree

ar&ois implicites $e*1 ta!les en lua%

2e compilateur ins"re des appels au* &onctions syst"me pour o!tenir la place ncessaire 0 &ragmentation possi!le 0 ncessaire de li!rer la mmoire non utilise1

eut etre ncessaire M dtecter M la compilation Btilisation d'un ramasse miettes1 li!"re la mmoire #ui n'a plus de pointeur la dsignant.
99 D. Barthou

ro!l"mes du ramasse-miettes1 Juand l'appeler 5 Comment dtecter les Xones Xom!ies 5 Jui s'occupe de la &ragmentation 5

Cours compilation 2011-2012

B-c Gonctions
Doi3ent Ntre gres e&&icacements ''appel d'une fonction:

@ournir un conte*te d'e*cution $3ars glo!ales, autres &onctions, ...% asser des param"tres (rans&rer le &lot de contr_le @ournir une 3aleur de retour

Cours compilation 2011-2012

9+ D. Barthou

B-c Eone d'acti/ation


`one mmoire correspondant au stoc8age de ces 3aleurs

=n gnral, sur la pile pour stoc8er Xone d'acti3ation A minima1

Cours compilation 2011-2012

9> D. Barthou

B-c Eone d'acti/ation: oH la stocIer A

)i la dure d'utilisation de la Xone d'acti3ation $`A% correspond M la dure de l'appel, et &onction retourne normalement1 0 Sur la pile 4cas le plus courant5 )i dure d'utilisation de la `A au delM d'un appel, ou &onction retourne une adresse #ui re&rence son tat d'e*cution 0 )ur le tas, allocation dynami#ue $c& co-routine% )i pas d'appels en cascade, pas de rcursi3it 0 )tati#ue

Cours compilation 2011-2012

+0 D. Barthou

B-c Eone d'acti/ation: protocole d'appel


Jcessit d'appeler les fonctions toujours de la mme faKon:

2es &onctions appeles ne sont pas tou-ours connues $appels syst"mes, &onctions d&inies dans d'autres &ichiers .c, !i!lioth"#ues% 2es compilateurs utiliss pour compiler di&&rents codes peu3ent Ntre di&&rents D&init #ui &ait #uoi entre l'appelant et l'appel (outes les &onctions sui3ent la mNme s#uence standardise artage des responsa!ilits entre l'appelant et l'appel
+1 D. Barthou

3rotocole d'appel:

Cours compilation 2011-2012

B-c 3rotocole d'appel


rotocole d'appel dcompos en

Appelant
pr#appel post#appel

Appel
prolo$ue

r-appel1 &ait par l'appelant rologue1 &ait par l'appel =pilogue1 &ait par l'appel ost-appel1 &ait par l'appelant

pilo$ue

Cours compilation 2011-2012

+2 D. Barthou

B-c 3rotocole d'appel


3r-appel:

)au3egarde ses registres dans sa `A <nitialise la `A de l'appel


%aram&tres 'rame pointer (ars) locales

@rame pointer

pile

Adresse de retour aram"tres

Grame pointer:

Adresse du conte*te d'e*cution de la &onction courante )ou3ent un registre de pile


+' D. Barthou

Cours compilation 2011-2012

B-c 3rotocole d'appel


3r-appel:

)au3egarde des registres de l'appelant dans sa `A, pou3ant Ntre rcrits par l'appel <nitialise la `A de l'appel

%aram&tres 'rame pointer (ars) locales *au+e$arde des re$istres %aram&tre n ))) %aram&tre 1 Adresse de retour 'rame pointer @rame pointer +. D. Barthou

pile

Adresse de retour aram"tres

@aire un saut 3ers l'adresse de l'appele

Cours compilation 2011-2012

B-c 3rotocole d'appel


3rolo#ue

)au3egarde de registres 3entuellement dont il est responsa!le AllouePinitialise les 3aria!les locales pile

%aram&tres 'rame pointer (ars) locales *au+e$arde des re$istres %aram&tre n ))) %aram&tre 1 Adresse de retour 'rame pointer *au+e$arde de re$istres (ars) ,ocales - l.appel @rame pointer +4 D. Barthou

Cours compilation 2011-2012

B-c 3rotocole d'appel


Epilo#ue

Dsalloue les 3aria!les


%aram&tres 'rame pointer (ars) locales *au+e$arde des re$istres %aram&tre n ))) %aram&tre 1 Adresse de retour 'rame pointer @rame pointer

)ur le tas $si ncessaire% )ur la pile $3ars locales%

;estore les registres, la pile comme elle tait a3ant prologue ;estore le conte*te d'e*cution de l'appelant $&rame pointer% ;eprend l'e*cution de l'appelant $adresse de retour%

pile

Cours compilation 2011-2012

+, D. Barthou

B-c 3rotocole d'appel


3ost-appel:

;estore la pile a3ant appel


pile

%aram&tres 'rame pointer (ars) locales @rame pointer

;estore les registres sau3egards ;eprend l'e*cution apres l'appel

Cours compilation 2011-2012

+9 D. Barthou

B-c Eone d'acti/ation: passer des param)tres


3assa#e de param)tres> $ mthodes

assage par adresse1 on donne l'adresse de la 3aria!le M la &onction. 2a &onction peut modi&ier la 3aria!le assage par 3aleur1 on donne la 3aleur de la 3aria!le M la &onction. 2a &onction peut modi&ier la 3aria!le

0 changement 3isi!le au retour de la &onction

0 changement non 3isi!le au retour de la &onction "xemples en C de passage par !aleur#adresse


++ D. Barthou

Cours compilation 2011-2012

B-c Eone d'acti/ations


Co-.outines Clotures

6a3a, python, ru!y, perl,lua ... ython, Ca, D, =i&&el, ... 0 co-routines et clotures ont !esoin de `A alloues sur le tas etPou d'autres ;&rences #ue la 3aleur de retour $plusieurs `A acti3es%
Cours compilation 2011-2012
+> D. Barthou

B- !nration de .I
3lan

Ju'est-ce #u'on manipule 5


a% =ncodage des 3aria!les !% /u stoc8e-t-on ces donnes 5 c% =ncodage des &onctions, appels de &onction

d% Comment gnrer du code de ;< 5

Cours compilation 2011-2012

>0 D. Barthou

B-d !nration de code


.eprsentation intermdiaire sous forme de #raphe

Bn ar!re de synta*e a!strait $a!stract synta* tree, A)(%

*E2?*E2Ey peut Ntre reprsent par1

A)(
Cours compilation 2011-2012

DA:
>1 D. Barthou

B-d !nration de code


.eprsentation sous forme de #raphe

Bn graphe de &lot de contr_le $control &loV graph, C@:%1 reprsente la &a\on dont le programme enchaine les !locs d'instructions

Cours compilation 2011-2012

>2 D. Barthou

B-d !nration de code


.eprsentation sous forme de #raphe

:raphe de &lot de contr_le1

2es noeuds1 des !locs de !ase. Bn !loc de !ase est une s#uence d'instruction dans la#uelle aucun !ranchement n'a lieu, et s'il y a des !ranchements 3ers des instructions de ce !loc, c'est sur la premi"re instruction. 2es arcs1 2 !locs sont relis par un arc si le contr_le peut passer d'un !loc M l'autre.

Cours compilation 2011-2012

>' D. Barthou

B-d !nration de code


.eprsentation sous forme de #raphe

:raphe de dpendances1 reprsente le &lot des !aleurs, des instructions #ui les d&inissent au* instructions #ui les utilisent. 2 . -1 -1 1

'
Arcs a3ec -11 criture sur une <tration, lecture sur la sui3ante

4 9

-1
>. D. Barthou

Cours compilation 2011-2012

B-d !nration de code


.eprsentation sous forme de #raphe

:raphe de dpendance

lusieurs arcs possi!les1 criture 0 lecture, lecture 0 criture, criture 0 criture Ce graphe d&init un ordre partiel en instructions (oute trans&ormation de l'ordre d'e*cution des instructions #ui prser3e les dpendances prser3e la smanti#ue 0 tr"s utilis par les compilateurs optimisant le code.

Cours compilation 2011-2012

>4 D. Barthou

B-d !nration de code


.eprsentation sous forme de code linaire 4s(uence d'instructions5

our une machine M pile1


pasPpeu de registres, toutes les 3aleurs intermdiaires passent sur la pile 6eu d'instruction asm pour pile sur de nom!reuses machines, !ytecode -a3a Iom!re in&ini de registres $comme des temporaires% Bytecode perl, 22OM, ...
>, D. Barthou

our une machine M registres1


Cours compilation 2011-2012

B-d ,achine 1 pile


!nration de code )imple parcours de l'ar!re synta*i#ue, de !as en haut

"xemple$ :rammaire1 =0=?= F=E= Fn Machine M pile utilisant1 push n, add, mul

:nrer les codes des sous ar!res 2es 3aleurs M utiliser sont sur la pile :nrer le code utilisant la pile pour le noeud courant.

Cours compilation 2011-2012

>9 D. Barthou

B-d Code $ ou - adresses


Cha(ue instruction utilise au plus $ oprandes

Cha(ue instruction utilise au plus - oprandes

Autorise les instructions du type * K * op y =*1 Code <ntel *+, Bn triplet $op,*,y% Bn couple $op, astmt% a3ec astmt le numro de l'instruction produisant la 3aleur

Autorise les instructions du type * K y op X =*1 code <ntel <tanium #uadruplet $op, *,y,X,% triplet1 $op, astmt1, astmt2% a3ec astmt le numro de l'instruction produisant la 3aleur

Cha#ue instruction1

Cha#ue instruction1

Cours compilation 2011-2012

>+ D. Barthou

B-d Code $ ou - adresses


Instructions $ adresses:

Instructions - adresses:

<& $7% goto la!el1 saute au la!el si 7 n'est pas nul 7 K 7 op W 7 K op W

<& $7KKW% goto 2a!el1 saute au la!el si 7 est egal M W $autres conditions possi!les% 7 K W op ` 7 K op W

2es !oucles $&or, Vhile% sont toutes traduites a3ec des i&..goto. 2es instructions utilisent des la!els. "xemple
Cours compilation 2011-2012
>> D. Barthou

B-d Code $ ou - adresses


.e#istres temporaires 4en nombre infini> pseudo-re#istres5

Com!ien en &aut-il pour calculer une e*pression !inaire #uelcon#ue 5 Btile pour minimiser le nom!re de pseudo registres dans le code

0 dpend de la hauteur h de l'e*pression1 au plus h.

)urtout utile pour gnration de 3rai code machine =n gnral, ne pas hsiter M consommer !eaucoup de pseudos registres $optimisation ensuite plus simple%

Cours compilation 2011-2012

100 D. Barthou

B-d Static Sin#le %ssi#nment


.eprsentation en SS%

Com!ine graphe de &lot de contr_le et de dpendance (r"s utilis dans compilateurs actuels 2a reprsentation ))A1

Cha#ue nom de 3aria!le n'est d&ini #u'en un endroit Cha#ue utilisation r&"re M un endroit $une instruction%

our trans&ormer un code linaire en ))A, on utilise des &onctions phi $ %


Ces &onctions ne ser3ent #ue pour la ;< Aucun code n'est gnr $on met des copies si ncessaire%
101 D. Barthou

Cours compilation 2011-2012

B-d Static Sin#le %ssi#nment

+ransformation en SS%

Cours compilation 2011-2012

102 D. Barthou

B-d Static Sin#le %ssi#nment

+ransformation du #raphe

Cours compilation 2011-2012

10' D. Barthou

B-d +able des s&mboles 4pour du C5


3orte stati(ue: Xone de code ob our trou3er #uelle 3ar. est 3i3ante M un une 3aria!le est 3i3ante $un !loc, endroit du code une &onction, le code%. Bne ta!le des sym!oles par !locP&onction et une ta!le pour 3ars. glo!ales 2es ta!les des sym!oles sont chaines dans une liste Imbrication de blocs: les 3aria!les utilises dans un !loc mais pas dclares dans ce !loc 0 3iennent !loc englo!ant ou sont glo!ales.
Cours compilation 2011-2012

/n cherche dans la ta!le courante. )i pas trou3, on cherche dans la ta!le du !loc englo!ant. (a!le des 3ars. glo!ales en dernier
10. D. Barthou

B-d +able des s&mboles 4en C5


+aille mmoire pour les /ars8 dclares dans un bloc: c calculer par la ta!le des sym!oles 0 A cha#ue 3ar. a-oute M une ta!le, recalcule com!ien il &aut d'octets. Btilis pour rser3er espace sur pile 'ocalisation des donnes locales sur la pile: lace les 3ars. les unes derri"re les autres, apres le &rame pointer 0 )toc8e pour cha#ue 3ar. sa position par rapport au &rame pointer

Cours compilation 2011-2012

104 D. Barthou

B-d !nration de code: un e emple


Interface pour la table des s&mboles:

nou/elletabledess&mboles$%, liberetabledess&mboles$ta!le% ajoute$ta!le,identi&icateur% nou/elle/ar$ta!le,type% cherche$ta!le,nom% ta!le.sui3 K la ta!le de la porte englo!ante ta!le.tailleK la taille en octets des 3ars dans la ta!le

Cours compilation 2011-2012

10, D. Barthou

B-d .)#les smanti(ues pour cration table des s&mboles


'a table tsNcourante est ici une /ar8 #lobale Bloc 0 BB listedinsns =B PP pour tout !loc BB 0 L PP on a-oute une nou3elle ta!le t K nou/elletabledess&mboles$%Y t.sui3 K tsdcouranteY tsdcouranteKt.sui3Y =B 0 M PP on #uitte le !loc 0 on enle3e la PP ta!le actuelle tKtsdcouranteY tsdcouranteKtsdcourante.sui3Y
Cours compilation 2011-2012

liberetabledess&mboles$t%Y

109 D. Barthou

B-d .)#les smanti(ues pour dclaration de /ar8


Declaration 0 int id iKnou/elidentificateur$% i.nomKid.3alY i.taille K .Y i.type K <I(Y i.positionKtsdcourante.tailleY PP /n augmente la taille de la ta!le courante tsdcourante.taille?Ki.tailleY ajoute$tsdcourante, i%

Cours compilation 2011-2012

10+ D. Barthou

B-d .)#les smanti(ues pour la rser/ation des /ars locales


Bloc 0 BB listedinsns =B Bloc.code K Gempile &ramepointerH ? G&ramepointer K sommet pileH ? Gsommet de pile -KH ? tsdcourante.taille ? listedinsns.code ? Gsommet de pile ?KH ? tsdcourante.taille ? Gdepile &ramepointerH

Cours compilation 2011-2012

10> D. Barthou

B-d .)#les smanti(ues pour la rser/ation des /ars locales


Bloc 0 BB listedinsns =B Cration de la Fone des /ars locales sur la pile Bloc.code K Gempile &ramepointerH ? G&ramepointer K sommet pileH ? Gsommet de pile -KH ? tsdcourante.taille ? listedinsns.code ? Gsommet de pile ?KH ? tsdcourante.taille ? Gdepile &ramepointerH

Cours compilation 2011-2012

110 D. Barthou

B-d .)#les smanti(ues pour la rser/ation des /ars locales


Bloc 0 BB listedinsns =B Bloc.code K Gempile &ramepointerH ? G&ramepointer K sommet pileH ? Gsommet de pile -KH ? tsdcourante.taille E cution du code du bloc ? listedinsns.code ? Gsommet de pile ?KH ? tsdcourante.taille ? Gdepile &ramepointerH

Cours compilation 2011-2012

111 D. Barthou

B-d .)#les smanti(ues pour la rser/ation des /ars locales


Bloc 0 BB listedinsns =B Bloc.code K Gempile &ramepointerH ? G&ramepointer K sommet pileH ? Gsommet de pile -KH ? tsdcourante.taille ? listedinsns.code Destruction des /ars locales et restauration de l'ancien frame pointer ? Gsommet de pile ?KH ? tsdcourante.taille ? Gdepile &ramepointerH

Cours compilation 2011-2012

112 D. Barthou

B-d .)#les smanti(ues pour l'utilisation de /ariables 415


=*pression 0 id PP /n cherche id dans les ta!les des sym!oles tKtsdcouranteY (ant #ue Lcherche$t,id.3al% tKtsdcourante.sui3Y i K cherche$t, id.3al%Y PP 2'e*pression est stoc8e dans une nou3elle 3ar. =*pression.3ar K nou/elle/ar$tsdcourante,i.type%Y ajoute$t, =*pression.3ar% =*pression.code K Gload G ? =*pression.3ar ? G,$&ramepointer - . -H ? i.position H%H
Cours compilation 2011-2012
11' D. Barthou

B-d .)#les smanti(ues pour l'utilisation de /ariables 4$5


,odification pour prendre en compte l'empilement des conte tes
(ant #ue Lcherche$t,id.3al% tKtsdcourante.sui3Y

'es framepointers forment une liste chaine (u'il faut parcourir


code K Gempile le &ramepointer H PP sau3egarde du &p courant (ant #ue Lcherche$t,id.3al% S tKtsdcourante.sui3Y code ?K Gload &ramepointer, $&ramepointer%H T =*pression.code K code ? GloadH ?=*pression.3ar ? G$&ramepointer -. -H?Hi.position?H%H =*pression.code ?K Gdepile le &ramepointerH PPre3ient au &p courant

Idem pour une affectation 4id est crit au lieu d'tre lu5
Cours compilation 2011-2012

11. D. Barthou

B-d .)#les smanti(ues pour l'affectation


=1 0 id 9 =2 ? PP /n cherche id dans les ta!les des sym!oles tKtsdcouranteY (ant #ue Lcherche$t,id.3al% tKtsdcourante.sui3Y =1.3ar K cherche$t, id.3al%Y =*pression.code K =2.code ? Gstore G ? =2.3ar ? G,$&ramepointer - . -H ? =1.3ar.position H%H

Cours compilation 2011-2012

114 D. Barthou

B-d .)#les smanti(ues pour les e pressions> code $ adresses


=*pression1 0 =*pression2 : ( =*pression1.3ar K =*pression2.3ar PP on reprend la 3aria!le de =2 =*pression1.code K =*pression2.code ? (.codeY =*pression1.code ?K Gadd G ? =*pression2.3ar ? G,H ? (.3arY =*pression1 0 J

=*pression1.3ar K nou/elle/ar$tsdcourante,=*pression1.type%Y =*pression1.code K =*pression1.3ar ? GKH ? J.3al

Cours compilation 2011-2012

11, D. Barthou

B-d .)#les smanti(ues pour les appels de fonction


= 0 id$ =1, =2% tKtsdcouranteY PP /n cherche id (ant #ue Lcherche$t,id.3al% tKtsdcourante.sui3Y i K cherche$t, id.3al%Y PP pour 3ri&ication de type =.3ar K nou/elle/ar$tsdcourante,t&peretour$id%% =.code K =1.code ? =2.code ? PP calcul des param"tres GempileH ? =2.3ar ? PP empile les param"tres GempileH ? =1.3ar ? =.3ar ? G K appel de &onctionG ? id.3al ? GdepileH ? GdepileH PP -ette la 3aleur de =1 et =2
Cours compilation 2011-2012
119 D. Barthou

B-d .)#les smanti(ues pour boucles 6hile


<1 0 6hile 4=15 <2 end6hile 2a!elVh K nou/eaulabel$%Y 2a!elendVh K nou/eaulabel$%Y <1.code K 2a!elVh ? G1H ? =1.code ? Gi& not G? =1.3ar ? GgotoH ? 2a!elendVh ? <2.code ? 2a!elendVh ? G1H

Cours compilation 2011-2012

11+ D. Barthou

B-d .)#les smanti(ues pour les boucles for


<1 0 for =1 to =2 2a!el&or K nou/eaulabel$%Y <2 endfor 2a!elend&or K nou/eaulabel$%Y <1.code K =1.code ? 2a!el&or ? G1H ? =2.code ? Gi& not G? =2.3ar ? GgotoH ? 2a!elend&or ? <2.code ? 2a!elend&or ? G1H

Cours compilation 2011-2012

11> D. Barthou

B- .sum #nration de .I

Di&&rentes &ormes de ;<1


:raphes $control &loV graph, dependence graph, A)(% )ous &orme d'instructions $code 2P' adresses, code a pile, ))A%

2e code est gnr $sous &orme de te*te ou de structures% et non e*cut 2a ta!le des sym!oles -oue un r_le central

Ori&ication des types, des dclarations, taille des 3aria!les, gestion des portes

ar rapport au code asm1 pas de registres, pas d'instructions asm


120 D. Barthou

Cours compilation 2011-2012

O- !nration de code assembleur


a% Allocation de registres

Coloriage de graphe, approche (op-DoVn )au3egarde des registres, spillP&ill

!% /rdonnancement d'instructions c% 6us#u'M l'e*cution


=dition de lien Chargeur


121 D. Barthou

Cours compilation 2011-2012

O-a %llocation de re#istres


3robl)me initial /n a cr plein de temporaires a3ec la ;< /b les stoc8er 5

(1 ?K (2Y (' K 4Y (. ?K ('Y (4 K ,Y (9 EK (4Y (. ?K (9Y (1 ?K (.Y

)ur la pile1 possi!le, tr"s lourd, comme une machine a pile Dans les registres 0 mais en nom!re insu&&isant en gnral

Cours compilation 2011-2012

122 D. Barthou

O-a %llocation de re#istres


Combien de re#istres ncessaires A /n 3eut en utiliser le moins possi!le. 3remiere solution:

(1 ?K (2Y (' K 4Y (. ?K ('Y (4 K ,Y (9 EK (4Y (. ?K (9Y (1 ?K (.Y

Bne 3ar K un registre Juand plus de registre disponi!le, on sau3egarde registres sur la pile pour les li!rer =*emple a3ec . registres

Cours compilation 2011-2012

12' D. Barthou

O-a %llocation de re#istres


Combien de re#istres ncessaires A /n 3eut en utiliser le moins possi!le. 3remiere solution:

r1 ?K r2Y r' K 4Y r. ?K r'Y empile r'Y empile r.Y r' K ,Y r. EK r'Y dpile r'Y r' ?K r.Y r1 ?K r'Y

Bne 3ar K un registre ro!l"me1 #ui empilerPdpiler 5 Juand 5 r' est empil et pas dpil...

Cours compilation 2011-2012

12. D. Barthou

O-a %llocation de re#istres


Combien de re#istres ncessaires A /n 3eut en utiliser le moins possi!le. Deu i)me solution:

(1 ?K (2Y (' K 4Y (. ?K ('Y (4 K ,Y (9 EK (4Y (. ?K (9Y (1 ?K (.Y +1 +7 ++B +P

Calculer la dure de 3ie de cha#ue 3aria!le 2es 3aria!les 3i3antes simultanment doi3ent Ntre dans des registres di&&rents

Cours compilation 2011-2012

124 D. Barthou

O-a %llocation de re#istres


!raphe d'interfrence

Bn noeud par 3aria!le Bn arc1 les deu* 3aria!les sont 3i3antes simultanment 2 noeuds relis doi3ent a3oir un registre di&&rent.

(1 (' (.

(4 (9

Contrainte:

;egistre K couleur 0 probleme de coloria#e de #raphe [euristi#ue de coloriage dans les compilateurs.
Cours compilation 2011-2012
12, D. Barthou

O-a %llocation de re#istres


Qeuristi(ue

Donner les couleurs en parcourant les noeuds, ordonns par arit $de la plus grande M la plus petite% (1 ?K (2Y ;1 ?K (2Y (' K 4Y (. ?K ('Y (4 K ,Y (9 EK (4Y (. ?K (9Y (1 ?K (.Y ;2 K 4Y ;2 ?K ;2Y ;' K ,Y ;' EK ;'Y ;2 ?K ;'Y ;1 ?K ;2Y

+1 (' (.

(4 (9

Cours compilation 2011-2012

129 D. Barthou

O-a %llocation de re#istres


Dure de 3ie des 3aria!les1 plus longue si rutilisation des 3aria!les 0 necessite plus de registres... Mthode choue si pas asseX de registres $couleurs% pour le programme Solution

)au3egarder la 3aleur du registre en mmoire. r3oir une case mmoire par 3aria!le. )'appelle le Gregister spillH Juand on a !esoin de cette 3aleur, on la charge de la mmoire. )'appelle le Gregister

3robl)me d'optimisation1 minimiser le nom!re de spillP&ill.


Cours compilation 2011-2012
12+ D. Barthou

O-a %llocation de re#istres


Spill2fill: )i seulement 2 registres1 ;1 ?K (2Y (1 ?K (2Y (' K 4Y (. ?K ('Y (4 K ,Y (9 EK (4Y (. ?K (9Y (1 ?K (.Y
Cours compilation 2011-2012

;2 K 4Y ;2 ?K ;2Y )tore ;1, $(1% ;1 K ,Y ;1 EK ;1Y ;2 ?K ;1Y 2oad ;1,$(1% ;1 ?K ;2Y


12> D. Barthou

O-a %llocation de re#istres


Il e iste d'autres mthodes (ue coloria#e de #raphe ,thode +op-Do6n $plus simple%

Compter les occurences de cha#ue 3aria!le, classer les 3ars par nom!re d'occurences dcroissantes )i n registres, on &i*e 8en registres pour stoc8er #uel#ues 3ars. $et n-8 reg. pour les calculs intermdiaires%. 2es 8 premi"res 3aria!les sont dans des registres, les autres en mmoire. une 3aria!le peut etre tres utilise au d!ut du code, plus du tout apres.
1'0 D. Barthou

Incon/nient1

Cours compilation 2011-2012

O-b Ordonnancement d'instructions


Objectif1 rcrire le code pour &aire apparaitre le plus de paralllisme d'instruction

2'ordonnancement d'instruction $instruction scheduling% pour l'optimisation du temps d'e*cution est un p! I -complet rend du temps, attend la mmoire Dpend de l'instruction prcdente Mais celles ci peu3ent Ntre e*cute immdiatement
1'1 D. Barthou

* K EpY y K * ? 1Y X K a ?2 Y ! K c P 'Y

Cours compilation 2011-2012

O-b Ordonnancement d'instructions


Contraintes au paralllisme:

Dpendances1

;AC $3raie dpendance%, CAC $dpendance de sortie%, CA; $anti dpendance%

Dpendances

@aciles M calculer sur les 3aria!lesPregistres

2e hardVare peut &aire du renommage pour supprimer des dpendances $superscalaire%

=n prati#ue, tr"s di&&icile M dterminer. =&&ort de recherche considra!le $alias analysis, pointer analysis%
Dpendance entre les deu* instructions 55 * K EpY E# K 1Y
1'2 D. Barthou

Cours compilation 2011-2012

O-b Ordonnancement d'instructions


Contraintes au paralllisme

Contraintes architecturales

Iom!re de cycles pour &inir une instruction Iom!re de pipelines pour un type d'instruction ...

Cours compilation 2011-2012

1'' D. Barthou

O-b Ordonnancement d'instructions


Contraintes au paralllisme

=*1 architecture superscalaire, 2 pipeline entier, 1 mmoire, 1 &lottant1 au mieu*, 2 instructions entieres, 1 acc"s mmoire et 1 opration &lottante P cycle

Cours compilation 2011-2012

1'. D. Barthou

O-b Ordonnancement d'instructions


Contraintes au paralllisme

)ou3ent, restriction sur le pipeline d'une unit &onctionnelle =*1 pour un pipeline @ B, une nou3elle operation tous les 2 cycles

Cours compilation 2011-2012

1'4 D. Barthou

O-b Ordonnancement d'instructions


,thodes d'ordonnancement

2ist scheduling1 tri topologi#ue du graphe des dpendances

A3ec priorits1 lors#u'une instruction 3a sur un pipeline pas encore prNt, diminue sa priorit. 2ors#u'une instruction dpend d'une instruction #ui n'est pas encore &inie, diminue sa priorit

Modulo scheduling1 classe d'algorithmes pour l'ordonnancement d'instruction sur les !oucles $une !oucle interne%

rincipe1 &aire du pipeline logiciel, entrelacer les instructions d'une itration a3ec celles d'autres itrations
1', D. Barthou

(race scheduling1 optimiser l'ordonnancement pour un chemin d'e*cution $le plus sou3ent pris%

Cours compilation 2011-2012

O-c Rus(u'au binaire: assembla#e


Derni)re tape:

(raduire en assem!leur $choi* des instructions% Assem!lage1 mnemoni#ues assem!leurs 0 !inaire 2e compilateur ne sait pas M #uelle adresse le code sera plac en mmoire 2e compilateur ne connait pas l'adresse des o!-ets e*ternes $&ichiers compils sparemment, !i!lioth"#ues%. ar e*, ob est la &onction print& 55
1'9 D. Barthou

Derniers probl)mes:

Cours compilation 2011-2012

O-c Rus(u'au binaire: assembla#e


Derniers probl)mes:

2e compilateur ne sait pas M #uelle adresse le code sera plac en mmoire 2e compilateur ne connait pas l'adresse des o!-ets e*ternes $&ichiers compils sparemment, !i!lioth"#ues%. ar e*, ob est la &onction print& 55 0 met l'adresse M 0 2e lin8er $editeur de lien% &ait la derniere passe sur le code o!-et $les .o en C%

0 suppose #ue c'est M l'adresse 0

Cours compilation 2011-2012

1'+ D. Barthou

O-c Rus(u'au binaire: fichier objet


Gichier objet est constitu de:

)egments, cha#ue segment contient un type distinct d'in&ormation. )egment Gte*tH contient le code par e*emple. Autres segments pour le de!ug, des donnes, A our cha#ue segment, le &ichier o!-et d&init la taille et la position actuelle en mmoire Bne ta!le des sym!oles1 liste les 3ars et &onctions d&inies dans l'o!-et, et leur position $permet de les trou3er si utilises dans un autre .o% Bne liste de GrelocationH1 in&ormation sur les adresses utilises par le &ichier o!-et mais #ui ne sont pas connues au moment de la compilation
1'> D. Barthou

Cours compilation 2011-2012

O-c Rus(u'au binaire: relocation


Information de relocation

Adresses et taille des 3aleurs de3ant Ntre modi&ies $e*1 adresse du print&% )ym!ole pour la relocation $print& par e*emple%

)i print& apparait 20 &ois dans le code, il y a 20 entres dans la ta!le de relocation

Cours compilation 2011-2012

1.0 D. Barthou

O-c Rus(u'au binaire: linIer


Ce (ue fait un linIer:

2it les tailles des segments, calcule la taille &inale et la disposition de cha#ue segment. 2it tous les sym!oles et construit la ta!le glo!ale des sym!oles 2it les segments et optimise le code glo!al $analyse interprocdurale% 2it les segments et la ta!le de relocation, met a -our les adresses et crit le nou3eau &ichier 2'adresse d'une &onction dans une telle !i! n'est connue #ue lors#u'elle est charge 0 premier appel1 appelle le chargeur de !i! et modi&ie l'adresse pour les &uturs appels $&ormat =2@% 1.1
D. Barthou

Cas particulier: pour les !i!lioth"#ues partages

Cours compilation 2011-2012

Conclusion
Descriptif des principales phases d'un compilateur

Analyse le*icale, synta*i#ue, smanti#ue, optimisation et gnration de code $;< et code rel% 2angages pour le paralllisme /ptimisations pour le paralllisme, mieu* grer le hardVare $caches, A%

Sujets tr)s actifs de recherche et d'effort de d/eloppement

Cours compilation 2011-2012

1.2 D. Barthou

@uel(ues rfrences
Sur les automates> #rammaires

<ntroduction to the theory o& computation, )ipser, <( <ntroduction to automata theory, languages and computation, [opcro&t, Bllman, Addison Vesley

Sur les compilateurs

Compilateurs, principes, techni#ues et outils, Aho, )ethi, Bllman, intereditions Modern Compiler Design, :rune, Bal, A, Ciley /ptimiXing Compilers &or Modern Architectures, Allen, Dennedy, MorganDau&mann Ad3anced Compiler Design Z <mplementation, Muchnic8, MorganDau&mann 2e cours1 http1PPuuu.enseir!-matmeca.&rPfd!arthouP
1.' D. Barthou

Cours compilation 2011-2012

Вам также может понравиться