18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code...

Post on 03-Apr-2015

129 views 2 download

Transcript of 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code...

18 octobre 2007 Cours de compilation 7 - Intranet 1

Cours de compilationCours de compilation

Génération de codeGénération de code

Optimisation de codeOptimisation de code

18 octobre 2007 Cours de compilation 7 - Intranet 2

Les grandes lignes du coursLes grandes lignes du cours

•Définitions de baseDéfinitions de base•Composition de compilateursComposition de compilateurs•L’environnement d’un compilateurL’environnement d’un compilateur•Evaluation partielle et compilationEvaluation partielle et compilation•Analyses lexicales et syntaxiquesAnalyses lexicales et syntaxiques•Techniques d’analyse descendantesTechniques d’analyse descendantes•Techniques d’analyse ascendantesTechniques d’analyse ascendantes•YACCYACC•Analyse sémantiqueAnalyse sémantique•Environnement d’exécutionEnvironnement d’exécution•Génération de codeGénération de code•Optimisation de codeOptimisation de code

18 octobre 2007 Cours de compilation 7 - Intranet 3

I N T R O D U C T I O NI N T R O D U C T I O N

18 octobre 2007 Cours de compilation 7 - Intranet 4

Génération de codeGénération de code----------------------------------------------------------------------------------------------------------------------------

----• Nous pouvons,Nous pouvons,

– soit, réécrire l’arbre de syntaxe abstraite dans soit, réécrire l’arbre de syntaxe abstraite dans un autre langage évolué,un autre langage évolué,

18 octobre 2007 Cours de compilation 7 - Intranet 5

Génération de codeGénération de code----------------------------------------------------------------------------------------------------------------------------

----• Nous pouvons,Nous pouvons,

– soit, réécrire l’arbre de syntaxe abstraite dans soit, réécrire l’arbre de syntaxe abstraite dans un autre langage évolué,un autre langage évolué,

– soit, écrire un code de type assembleur, plus soit, écrire un code de type assembleur, plus précisément un codeprécisément un code

• pour une machine à pile (virtuelle),pour une machine à pile (virtuelle),• ou pour un processeur donné.ou pour un processeur donné.

18 octobre 2007 Cours de compilation 7 - Intranet 6

Génération de codeGénération de code----------------------------------------------------------------------------------------------------------------------------

----• Nous pouvons,Nous pouvons,

– soit, réécrire l’arbre de syntaxe abstraite dans soit, réécrire l’arbre de syntaxe abstraite dans un autre langage évolué,un autre langage évolué,

– soit, écrire un code de type assembleur, plus soit, écrire un code de type assembleur, plus précisément un codeprécisément un code

• pour une machine à pile (virtuelle),pour une machine à pile (virtuelle),• ou pour un processeur donné.ou pour un processeur donné.

18 octobre 2007 Cours de compilation 7 - Intranet 7

M A C H I N EM A C H I N E

AA

P I L EP I L E

18 octobre 2007 Cours de compilation 7 - Intranet 8

Machine à pileMachine à pile----------------------------------------------------------------------------------------------------------------------------

----• Nous utilisons typiquement une notation post-Nous utilisons typiquement une notation post-

fixée.fixée.

Exemple :Exemple :

:=:=

xx ++

** yy

xx zz

18 octobre 2007 Cours de compilation 7 - Intranet 9

Machine à pileMachine à pile----------------------------------------------------------------------------------------------------------------------------

----• Nous utilisons typiquement une notation post-Nous utilisons typiquement une notation post-

fixée.fixée.

Exemple :Exemple :

:=:=

xx ++

** yy

xx zz

push @xpush @x

18 octobre 2007 Cours de compilation 7 - Intranet 10

Machine à pileMachine à pile----------------------------------------------------------------------------------------------------------------------------

----• Nous utilisons typiquement une notation post-Nous utilisons typiquement une notation post-

fixée.fixée.

Exemple :Exemple :

:=:=

xx ++

** yy

xx zz

push @xpush @xpush ypush y

18 octobre 2007 Cours de compilation 7 - Intranet 11

Machine à pileMachine à pile----------------------------------------------------------------------------------------------------------------------------

----• Nous utilisons typiquement une notation post-Nous utilisons typiquement une notation post-

fixée.fixée.

Exemple :Exemple :

:=:=

xx ++

** yy

xx zz

push @xpush @xpush ypush ypush zpush z

18 octobre 2007 Cours de compilation 7 - Intranet 12

Machine à pileMachine à pile----------------------------------------------------------------------------------------------------------------------------

----• Nous utilisons typiquement une notation post-Nous utilisons typiquement une notation post-

fixée.fixée.

Exemple :Exemple :

:=:=

xx ++

** yy

xx zz

push @xpush @xpush ypush ypush zpush zpush xpush x

18 octobre 2007 Cours de compilation 7 - Intranet 13

Machine à pileMachine à pile----------------------------------------------------------------------------------------------------------------------------

----• Nous utilisons typiquement une notation post-Nous utilisons typiquement une notation post-

fixée.fixée.

Exemple :Exemple :

:=:=

xx ++

** yy

xx zz

push @xpush @xpush ypush ypush zpush zpush xpush xmultmult

18 octobre 2007 Cours de compilation 7 - Intranet 14

Machine à pileMachine à pile----------------------------------------------------------------------------------------------------------------------------

----• Nous utilisons typiquement une notation post-Nous utilisons typiquement une notation post-

fixée.fixée.

Exemple :Exemple :

:=:=

xx ++

** yy

xx zz

push @xpush @xpush ypush ypush zpush zpush xpush xmultmultaddadd

18 octobre 2007 Cours de compilation 7 - Intranet 15

Machine à pileMachine à pile----------------------------------------------------------------------------------------------------------------------------

----• Nous utilisons typiquement une notation post-Nous utilisons typiquement une notation post-

fixée.fixée.

Exemple :Exemple :

:=:=

xx ++

** yy

xx zz

push @xpush @xpush ypush ypush zpush zpush xpush xmultmultaddaddsetset

18 octobre 2007 Cours de compilation 7 - Intranet 16

Machine à pileMachine à pile----------------------------------------------------------------------------------------------------------------------------

----• Voici les opérations et leurs effets sur la pile.Voici les opérations et leurs effets sur la pile.

– push xpush x . . .. . .

. . .. . .

xxdevientdevient

18 octobre 2007 Cours de compilation 7 - Intranet 17

Machine à pileMachine à pile----------------------------------------------------------------------------------------------------------------------------

----• Voici les opérations et leurs effets sur la pile.Voici les opérations et leurs effets sur la pile.

– push xpush x

– addadd

. . .. . .

. . .. . .

. . .. . .

. . .. . .

xx

aabb a + ba + b

devientdevient

devientdevient

18 octobre 2007 Cours de compilation 7 - Intranet 18

Machine à pileMachine à pile----------------------------------------------------------------------------------------------------------------------------

----• Voici les opérations et leurs effets sur la pile.Voici les opérations et leurs effets sur la pile.

– push xpush x

– addadd

– setset. . .. . .

. . .. . .

. . .. . .

. . .. . .

. . .. . .

. . .. . .

xx

aabb a + ba + b

valvaladradr

devientdevient

devientdevient

devientdevient + affectation+ affectation

18 octobre 2007 Cours de compilation 7 - Intranet 19

Machine à pileMachine à pile----------------------------------------------------------------------------------------------------------------------------

----• Détaillons quelques opérations de génération de Détaillons quelques opérations de génération de

code.code.

calcul_:= calcul_adr ( lhs )calcul_:= calcul_adr ( lhs )

calcul_val ( rhs )calcul_val ( rhs )

gencode ( « set » )gencode ( « set » )

18 octobre 2007 Cours de compilation 7 - Intranet 20

Machine à pileMachine à pile----------------------------------------------------------------------------------------------------------------------------

----• Détaillons quelques opérations de génération de Détaillons quelques opérations de génération de

code.code.

calcul_:= calcul_adr ( lhs )calcul_:= calcul_adr ( lhs )

calcul_val ( rhs )calcul_val ( rhs )

gencode ( « set » )gencode ( « set » )

calcul_adr ( lhs )calcul_adr ( lhs )

si lhs = var gencode ( « push » , @var )si lhs = var gencode ( « push » , @var )

18 octobre 2007 Cours de compilation 7 - Intranet 21

Machine à pileMachine à pile----------------------------------------------------------------------------------------------------------------------------

----• Détaillons quelques opérations de génération de Détaillons quelques opérations de génération de

code.code.

calcul_:= calcul_adr ( lhs )calcul_:= calcul_adr ( lhs )

calcul_val ( rhs )calcul_val ( rhs )

gencode ( « set » )gencode ( « set » )

calcul_adr ( lhs )calcul_adr ( lhs )

si lhs = var gencode ( « push » , @var )si lhs = var gencode ( « push » , @var )

si lhs = var [ind] calcul_val ( ind )si lhs = var [ind] calcul_val ( ind )

calcul_adr ( var )calcul_adr ( var )

gencode ( « add » )gencode ( « add » )

18 octobre 2007 Cours de compilation 7 - Intranet 22

Machine à pileMachine à pile----------------------------------------------------------------------------------------------------------------------------

----• Détaillons quelques opérations de génération de Détaillons quelques opérations de génération de

code.code.

calcul_val ( rhs )calcul_val ( rhs )

si rhs = cste gencode ( « push » , rhs )si rhs = cste gencode ( « push » , rhs )

18 octobre 2007 Cours de compilation 7 - Intranet 23

Machine à pileMachine à pile----------------------------------------------------------------------------------------------------------------------------

----• Détaillons quelques opérations de génération de Détaillons quelques opérations de génération de

code.code.

calcul_val ( rhs )calcul_val ( rhs )

si rhs = cste gencode ( « push » , rhs )si rhs = cste gencode ( « push » , rhs )

si lhs = var gencode ( « push » , var )si lhs = var gencode ( « push » , var )

18 octobre 2007 Cours de compilation 7 - Intranet 24

Machine à pileMachine à pile----------------------------------------------------------------------------------------------------------------------------

----• Détaillons quelques opérations de génération de Détaillons quelques opérations de génération de

code.code.

calcul_val ( rhs )calcul_val ( rhs )

si rhs = cste gencode ( « push » , rhs )si rhs = cste gencode ( « push » , rhs )

si lhs = var gencode ( « push » , var )si lhs = var gencode ( « push » , var )

si lhs = var [ind] calcul_adr ( lhs )si lhs = var [ind] calcul_adr ( lhs )

gencode ( « fetch » )gencode ( « fetch » )

18 octobre 2007 Cours de compilation 7 - Intranet 25

Machine à pileMachine à pile----------------------------------------------------------------------------------------------------------------------------

----• Détaillons quelques opérations de génération de Détaillons quelques opérations de génération de

code.code.

calcul_val ( rhs )calcul_val ( rhs )

si rhs = cste gencode ( « push » , rhs )si rhs = cste gencode ( « push » , rhs )

si lhs = var gencode ( « push » , var )si lhs = var gencode ( « push » , var )

si lhs = var [ind] calcul_adr ( lhs )si lhs = var [ind] calcul_adr ( lhs )

gencode ( « fetch » )gencode ( « fetch » )

si rhs = a op b calcul_val ( b )si rhs = a op b calcul_val ( b )

calcul_val ( a )calcul_val ( a )

gencode ( « add » )gencode ( « add » )

18 octobre 2007 Cours de compilation 7 - Intranet 26

Machine à pileMachine à pile----------------------------------------------------------------------------------------------------------------------------

----• Bilan :Bilan :

– La génération de code est très simple!La génération de code est très simple!

18 octobre 2007 Cours de compilation 7 - Intranet 27

Machine à pileMachine à pile----------------------------------------------------------------------------------------------------------------------------

----• Bilan :Bilan :

– La génération de code est très simple!La génération de code est très simple!

– Le code est portable à cause de la machine Le code est portable à cause de la machine virtuelle !virtuelle !

18 octobre 2007 Cours de compilation 7 - Intranet 28

Machine à pileMachine à pile----------------------------------------------------------------------------------------------------------------------------

----• Bilan :Bilan :

– La génération de code est très simple!La génération de code est très simple!

– Le code est portable à cause de la machine Le code est portable à cause de la machine virtuelle !virtuelle !

– Ce n’est pas très efficace, car :Ce n’est pas très efficace, car :

• Le code est interprété !Le code est interprété !

• Il est simulé !Il est simulé !

• Il n’est pas pipeliné, . . . !Il n’est pas pipeliné, . . . !

18 octobre 2007 Cours de compilation 7 - Intranet 29

U NU N

P R O C E S S E U RP R O C E S S E U R

E TE T

U NU N

O / SO / S

18 octobre 2007 Cours de compilation 7 - Intranet 30

Processeur donnéProcesseur donné----------------------------------------------------------------------------------------------------------------------------

----• Commentaire :Commentaire :

– Le code est n’est plus portable !Le code est n’est plus portable !

18 octobre 2007 Cours de compilation 7 - Intranet 31

Processeur donnéProcesseur donné----------------------------------------------------------------------------------------------------------------------------

----• Commentaire :Commentaire :

– Le code est n’est plus portable !Le code est n’est plus portable !

– Il est (très) effiace ! ! !Il est (très) effiace ! ! !

18 octobre 2007 Cours de compilation 7 - Intranet 32

Processeur donnéProcesseur donné----------------------------------------------------------------------------------------------------------------------------

----• Commentaire :Commentaire :

– Le code est n’est plus portable !Le code est n’est plus portable !

– Il est (très) effiace ! ! !Il est (très) effiace ! ! !

– C’est plus difficile, car :C’est plus difficile, car :

• Nous tenons compte d’un jeu d’instruction Nous tenons compte d’un jeu d’instruction donné !donné !

• Nous devons considérer le nombre de registres !Nous devons considérer le nombre de registres !

• Nous devons prendre en compte les primitives Nous devons prendre en compte les primitives et caractéristiques du système d’exploitation !et caractéristiques du système d’exploitation !

18 octobre 2007 Cours de compilation 7 - Intranet 33

Processeur donnéProcesseur donné----------------------------------------------------------------------------------------------------------------------------

----• Nous décomposons la traduction :Nous décomposons la traduction :

18 octobre 2007 Cours de compilation 7 - Intranet 34

Processeur donnéProcesseur donné----------------------------------------------------------------------------------------------------------------------------

----• Nous décomposons la traduction :Nous décomposons la traduction :

Syntaxe abstraiteSyntaxe abstraite

Code intermédiaireCode intermédiaire

Code processeur optimiséCode processeur optimisé

18 octobre 2007 Cours de compilation 7 - Intranet 35

Processeur donnéProcesseur donné----------------------------------------------------------------------------------------------------------------------------

----• Nous décomposons la traduction :Nous décomposons la traduction :

Syntaxe abstraiteSyntaxe abstraite

Code intermédiaireCode intermédiaire

Code processeur optimiséCode processeur optimisé

-- Proche du processeur Proche du processeur final !final !

-- Suffisamment générale Suffisamment générale pourpour permettre des permettre des optimisations !optimisations !

18 octobre 2007 Cours de compilation 7 - Intranet 36

Code 3Code 3--adressesadresses----------------------------------------------------------------------------------------------------------------------------

----• Code intermédiaire 3-adresses ( parfois 2- ) , Code intermédiaire 3-adresses ( parfois 2- ) ,

syntaxe :syntaxe :

(1) x <- y <op> z(1) x <- y <op> z

(2) x <- <op> y(2) x <- <op> y

(3) x <- y(3) x <- y

18 octobre 2007 Cours de compilation 7 - Intranet 37

Code 3Code 3--adressesadresses----------------------------------------------------------------------------------------------------------------------------

----• Code intermédiaire 3-adresses ( parfois 2- ) , Code intermédiaire 3-adresses ( parfois 2- ) ,

syntaxe :syntaxe :

(1) x <- y <op> z(1) x <- y <op> z

(2) x <- <op> y(2) x <- <op> y

(3) x <- y(3) x <- y

(4) goto L(4) goto L

(5) if x <op> y goto L(5) if x <op> y goto L

18 octobre 2007 Cours de compilation 7 - Intranet 38

Code 3Code 3--adressesadresses----------------------------------------------------------------------------------------------------------------------------

----• Code intermédiaire 3-adresses ( parfois 2- ) , Code intermédiaire 3-adresses ( parfois 2- ) ,

syntaxe :syntaxe :

(1) x <- y <op> z(1) x <- y <op> z

(2) x <- <op> y(2) x <- <op> y

(3) x <- y(3) x <- y

(4) goto L(4) goto L

(5) if x <op> y goto L(5) if x <op> y goto L

(6) param a_1(6) param a_1

. . .. . .

param a_kparam a_k

call f , kcall f , k

(7) return(7) return

18 octobre 2007 Cours de compilation 7 - Intranet 39

Code 3Code 3--adressesadresses----------------------------------------------------------------------------------------------------------------------------

----• Code intermédiaire 3-adresses ( parfois 2- ) , Code intermédiaire 3-adresses ( parfois 2- ) ,

syntaxe :syntaxe :

(1) x <- y <op> z (1) x <- y <op> z (8) x <- y [ z ](8) x <- y [ z ]

(2) x <- <op> y (2) x <- <op> y (9) x [ y ] <- z(9) x [ y ] <- z

(3) x <- y (3) x <- y (10) x <- &y(10) x <- &y

(4) goto L (4) goto L

(5) if x <op> y goto L (5) if x <op> y goto L

(6) param a_1(6) param a_1

. . .. . .

param a_kparam a_k

call f , kcall f , k

(7) return(7) return

18 octobre 2007 Cours de compilation 7 - Intranet 40

Code 3Code 3--adressesadresses----------------------------------------------------------------------------------------------------------------------------

----• Code intermédiaire 3-adresses ( parfois 2- ) , Code intermédiaire 3-adresses ( parfois 2- ) ,

syntaxe :syntaxe :

(1) x <- y <op> z (8) x <- y [ z ](1) x <- y <op> z (8) x <- y [ z ]

(2) x <- <op> y (9) x [ y ] <- z(2) x <- <op> y (9) x [ y ] <- z

(3) x <- y (10) x <- &y(3) x <- y (10) x <- &y

(4) goto L (4) goto L (11) x <- *y(11) x <- *y

(5) if x <op> y goto L (5) if x <op> y goto L (12) *x <- y(12) *x <- y

(6) param a_1(6) param a_1

. . .. . .

param a_kparam a_k

call f , kcall f , k

(7) return(7) return

18 octobre 2007 Cours de compilation 7 - Intranet 41

Code 3Code 3--adressesadresses----------------------------------------------------------------------------------------------------------------------------

----• Code intermédiaire 3-adresses ( parfois 2- ) , Code intermédiaire 3-adresses ( parfois 2- ) ,

syntaxe :syntaxe :

(1) x <- y <op> z (8) x <- y [ z ](1) x <- y <op> z (8) x <- y [ z ]

(2) x <- <op> y (9) x [ y ] <- z(2) x <- <op> y (9) x [ y ] <- z

(3) x <- y (10) x <- &y(3) x <- y (10) x <- &y

(4) goto L (11) x <- *y(4) goto L (11) x <- *y

(5) if x <op> y goto L (12) *x <- y(5) if x <op> y goto L (12) *x <- y

(6) param a_1(6) param a_1

. . .. . .

param a_kparam a_k

call f , kcall f , k

(7) return(7) return

Les instructions complexesLes instructions complexesdeviennent une séquencedeviennent une séquenced’instructions 3-adressesd’instructions 3-adressesqui utilisent des variablesqui utilisent des variablestemporaires.temporaires.

18 octobre 2007 Cours de compilation 7 - Intranet 42

Code 3Code 3--adressesadresses----------------------------------------------------------------------------------------------------------------------------

----• Code intermédiaire 3-adresses ( parfois 2- ) , Code intermédiaire 3-adresses ( parfois 2- ) ,

syntaxe :syntaxe :

(1) x <- y <op> z (8) x <- y [ z ](1) x <- y <op> z (8) x <- y [ z ]

(2) x <- <op> y (9) x [ y ] <- z(2) x <- <op> y (9) x [ y ] <- z

(3) x <- y (10) x <- &y(3) x <- y (10) x <- &y

(4) goto L (11) x <- *y(4) goto L (11) x <- *y

(5) if x <op> y goto L (12) *x <- y(5) if x <op> y goto L (12) *x <- y

(6) param a_1(6) param a_1

. . .. . .

param a_kparam a_k

call f , kcall f , k

(7) return(7) return

x = ( x + y ) * z =>x = ( x + y ) * z =>

t <- x + yt <- x + y

t’ <- t * zt’ <- t * z

x <- t’x <- t’

18 octobre 2007 Cours de compilation 7 - Intranet 43

G E N E R A T I O NG E N E R A T I O N

D ED E

C O D EC O D E

I N T E R M E D I A I R EI N T E R M E D I A I R E

18 octobre 2007 Cours de compilation 7 - Intranet 44

Génération de code intermédiaireGénération de code intermédiaire----------------------------------------------------------------------------------------------------------------------------

----• Pour toute expression E, nous auronsPour toute expression E, nous aurons

– E.code qui est le code qui calcule E ,E.code qui est le code qui calcule E ,– E.place qui est l’endroit où nous trouvons le E.place qui est l’endroit où nous trouvons le

résultat !résultat !

18 octobre 2007 Cours de compilation 7 - Intranet 45

Génération de code intermédiaireGénération de code intermédiaire----------------------------------------------------------------------------------------------------------------------------

----• Pour toute expression E, nous auronsPour toute expression E, nous aurons

– E.code qui est le code qui calcule E ,E.code qui est le code qui calcule E ,– E.place qui est l’endroit où nous trouvons le E.place qui est l’endroit où nous trouvons le

résultat !résultat !

• Pour une instruction S , nous n’aurons que Pour une instruction S , nous n’aurons que S.place !S.place !

18 octobre 2007 Cours de compilation 7 - Intranet 46

Génération de code intermédiaireGénération de code intermédiaire----------------------------------------------------------------------------------------------------------------------------

----• Pour toute expression E, nous auronsPour toute expression E, nous aurons

– E.code qui est le code qui calcule E ,E.code qui est le code qui calcule E ,– E.place qui est l’endroit où nous trouvons le E.place qui est l’endroit où nous trouvons le

résultat !résultat !

• Pour une instruction S , nous n’aurons que S.place !Pour une instruction S , nous n’aurons que S.place !

Si E = id : Si E = id : E.place = id.placeE.place = id.place

E.code = E.code =

18 octobre 2007 Cours de compilation 7 - Intranet 47

Génération de code intermédiaireGénération de code intermédiaire----------------------------------------------------------------------------------------------------------------------------

----• Pour toute expression E, nous auronsPour toute expression E, nous aurons

– E.code qui est le code qui calcule E ,E.code qui est le code qui calcule E ,– E.place qui est l’endroit où nous trouvons le résultat !E.place qui est l’endroit où nous trouvons le résultat !

• Pour une instruction S , nous n’aurons que S.place !Pour une instruction S , nous n’aurons que S.place !

Si E = id : Si E = id : E.place = id.placeE.place = id.place

E.code = E.code =

Si E = E op E :Si E = E op E :

E.place = newtemp ()E.place = newtemp ()

E.code = E .code ; E .code ;E.code = E .code ; E .code ;

gencode ( E.place « <- »gencode ( E.place « <- »

E .place op E .place )E .place op E .place )

11

11

22

22

11 22

18 octobre 2007 Cours de compilation 7 - Intranet 48

Génération de code intermédiaireGénération de code intermédiaire----------------------------------------------------------------------------------------------------------------------------

----• Pour toute expression E, nous auronsPour toute expression E, nous aurons

– E.code qui est le code qui calcule E ,E.code qui est le code qui calcule E ,– E.place qui est l’endroit où nous trouvons le résultat !E.place qui est l’endroit où nous trouvons le résultat !

• Pour une instruction S , nous n’aurons que S.place !Pour une instruction S , nous n’aurons que S.place !

Si E = id : Si E = id : E.place = id.placeE.place = id.place

E.code = E.code =

Si E = E op E :Si E = E op E :

E.place = newtemp ()E.place = newtemp ()

E.code = E .code ; E .code ;E.code = E .code ; E .code ;

gencode ( E.place « <- »gencode ( E.place « <- »

E .place op E .place )E .place op E .place )

11

11

22

22

11 22

18 octobre 2007 Cours de compilation 7 - Intranet 49

Génération de code intermédiaireGénération de code intermédiaire----------------------------------------------------------------------------------------------------------------------------

----• Pour toute expression E, nous auronsPour toute expression E, nous aurons

– E.code qui est le code qui calcule E ,E.code qui est le code qui calcule E ,– E.place qui est l’endroit où nous trouvons le E.place qui est l’endroit où nous trouvons le

résultat !résultat !

• Pour une instruction S , nous n’aurons que S.place !Pour une instruction S , nous n’aurons que S.place !

Si S qui est id := E :Si S qui est id := E :

S.code = E.code ;S.code = E.code ;

gencode ( id.place « <- » E.place )gencode ( id.place « <- » E.place )

18 octobre 2007 Cours de compilation 7 - Intranet 50

Génération de code intermédiaireGénération de code intermédiaire----------------------------------------------------------------------------------------------------------------------------

----• Pour toute expression E, nous auronsPour toute expression E, nous aurons

– E.code qui est le code qui calcule E ,E.code qui est le code qui calcule E ,– E.place qui est l’endroit où nous trouvons le E.place qui est l’endroit où nous trouvons le

résultat !résultat !

• Pour une instruction S , nous n’aurons que S.place !Pour une instruction S , nous n’aurons que S.place !

Si S qui est id := E :Si S qui est id := E :

S.code = E.code ;S.code = E.code ;

gencode ( id.place « <- » E.place )gencode ( id.place « <- » E.place )

Si S est S ; S :Si S est S ; S :

S.code = S .code ; S .codeS.code = S .code ; S .code

11 22

2211

18 octobre 2007 Cours de compilation 7 - Intranet 51

Génération de code intermédiaireGénération de code intermédiaire----------------------------------------------------------------------------------------------------------------------------

----• Pour toute expression E, nous auronsPour toute expression E, nous aurons

– E.code qui est le code qui calcule E ,E.code qui est le code qui calcule E ,– E.place qui est l’endroit où nous trouvons le E.place qui est l’endroit où nous trouvons le

résultat !résultat !

• Pour une instruction S , nous n’aurons que S.place !Pour une instruction S , nous n’aurons que S.place !

Si S est while E do S :Si S est while E do S :

Soient Soient S.begin = newlabel ()S.begin = newlabel () et et S.after = newlabel ()S.after = newlabel ()

11

18 octobre 2007 Cours de compilation 7 - Intranet 52

Génération de code intermédiaireGénération de code intermédiaire----------------------------------------------------------------------------------------------------------------------------

----• Pour toute expression E, nous auronsPour toute expression E, nous aurons

– E.code qui est le code qui calcule E ,E.code qui est le code qui calcule E ,– E.place qui est l’endroit où nous trouvons le résultat !E.place qui est l’endroit où nous trouvons le résultat !

• Pour une instruction S , nous n’aurons que S.place !Pour une instruction S , nous n’aurons que S.place !

Si S est while E do S :Si S est while E do S :

Soient Soient S.begin = newlabel ()S.begin = newlabel () et et S.after = newlabel ()S.after = newlabel ()

S.code = S.code =

gencode ( « S.begin: » ) ; E.code ;gencode ( « S.begin: » ) ; E.code ;

11

18 octobre 2007 Cours de compilation 7 - Intranet 53

Génération de code intermédiaireGénération de code intermédiaire----------------------------------------------------------------------------------------------------------------------------

----• Pour toute expression E, nous auronsPour toute expression E, nous aurons

– E.code qui est le code qui calcule E ,E.code qui est le code qui calcule E ,– E.place qui est l’endroit où nous trouvons le résultat !E.place qui est l’endroit où nous trouvons le résultat !

• Pour une instruction S , nous n’aurons que S.place !Pour une instruction S , nous n’aurons que S.place !

Si S est while E do S :Si S est while E do S :

Soient Soient S.begin = newlabel ()S.begin = newlabel () et et S.after = newlabel ()S.after = newlabel ()

S.code = S.code =

gencode ( « S.begin: » ) ; E.code ;gencode ( « S.begin: » ) ; E.code ;

gencode ( « if » E.place « =0 goto » S.after ) ;gencode ( « if » E.place « =0 goto » S.after ) ;

11

18 octobre 2007 Cours de compilation 7 - Intranet 54

Génération de code intermédiaireGénération de code intermédiaire----------------------------------------------------------------------------------------------------------------------------

----• Pour toute expression E, nous auronsPour toute expression E, nous aurons

– E.code qui est le code qui calcule E ,E.code qui est le code qui calcule E ,– E.place qui est l’endroit où nous trouvons le résultat !E.place qui est l’endroit où nous trouvons le résultat !

• Pour une instruction S , nous n’aurons que S.place !Pour une instruction S , nous n’aurons que S.place !

Si S est while E do S :Si S est while E do S :

Soient Soient S.begin = newlabel ()S.begin = newlabel () et et S.after = newlabel ()S.after = newlabel ()

S.code = S.code =

gencode ( « S.begin: » ) ; E.code ;gencode ( « S.begin: » ) ; E.code ;

gencode ( « if » E.place « =0 goto » S.after ) ;gencode ( « if » E.place « =0 goto » S.after ) ;

S .code ;S .code ;

gencodegencode ( « goto » S.begin ) ;( « goto » S.begin ) ;

11

11

18 octobre 2007 Cours de compilation 7 - Intranet 55

Génération de code intermédiaireGénération de code intermédiaire----------------------------------------------------------------------------------------------------------------------------

----• Pour toute expression E, nous auronsPour toute expression E, nous aurons

– E.code qui est le code qui calcule E ,E.code qui est le code qui calcule E ,– E.place qui est l’endroit où nous trouvons le résultat !E.place qui est l’endroit où nous trouvons le résultat !

• Pour une instruction S , nous n’aurons que S.place !Pour une instruction S , nous n’aurons que S.place !

Si S est while E do S :Si S est while E do S :

Soient Soient S.begin = newlabel ()S.begin = newlabel () et et S.after = newlabel ()S.after = newlabel ()

S.code = S.code =

gencode ( « S.begin: » ) ; E.code ;gencode ( « S.begin: » ) ; E.code ;

gencode ( « if » E.place « =0 goto » S.after ) ;gencode ( « if » E.place « =0 goto » S.after ) ;

S .code ;S .code ;

gencode ( « goto » S.begin ) ;gencode ( « goto » S.begin ) ;

gencode ( « S.after: » ) ;gencode ( « S.after: » ) ;

11

11

18 octobre 2007 Cours de compilation 7 - Intranet 56

Génération de code intermédiaireGénération de code intermédiaire----------------------------------------------------------------------------------------------------------------------------

----• Pour toute expression E, nous auronsPour toute expression E, nous aurons

– E.code qui est le code qui calcule E ,E.code qui est le code qui calcule E ,– E.place qui est l’endroit où nous trouvons le E.place qui est l’endroit où nous trouvons le

résultat !résultat !

• Pour une instruction S , nous n’aurons que S.place !Pour une instruction S , nous n’aurons que S.place !

• Cette générationCette génération

– utilise beaucoup de temporaires,utilise beaucoup de temporaires,– utilise beaucoup de copies de variable à variable !utilise beaucoup de copies de variable à variable !

18 octobre 2007 Cours de compilation 7 - Intranet 57

Génération de code intermédiaireGénération de code intermédiaire----------------------------------------------------------------------------------------------------------------------------

----• Pour toute expression E, nous auronsPour toute expression E, nous aurons

– E.code qui est le code qui calcule E ,E.code qui est le code qui calcule E ,– E.place qui est l’endroit où nous trouvons le E.place qui est l’endroit où nous trouvons le

résultat !résultat !

• Pour une instruction S , nous n’aurons que S.place !Pour une instruction S , nous n’aurons que S.place !

• Cette générationCette génération

– utilise beaucoup de temporaires,utilise beaucoup de temporaires,– utilise beaucoup de copies de variable à variable !utilise beaucoup de copies de variable à variable !

• Nous nous en occuperont dans la suite !Nous nous en occuperont dans la suite !

• Pour l’instant, nous avons un code correct ! ! !Pour l’instant, nous avons un code correct ! ! !

18 octobre 2007 Cours de compilation 7 - Intranet 58

O P T I M I S A T I O NO P T I M I S A T I O N

D UD U

C O D EC O D E

I N T E R M E D I A I R EI N T E R M E D I A I R E

18 octobre 2007 Cours de compilation 7 - Intranet 59

Optimisation du code intermédiaireOptimisation du code intermédiaire----------------------------------------------------------------------------------------------------------------------------

----• Il fautIl faut

– tenir compte du nombre de registres,tenir compte du nombre de registres,– veiller à garder le pipeline plein !veiller à garder le pipeline plein !

18 octobre 2007 Cours de compilation 7 - Intranet 60

Optimisation du code intermédiaireOptimisation du code intermédiaire----------------------------------------------------------------------------------------------------------------------------

----• Il fautIl faut

– tenir compte du nombre de registres,tenir compte du nombre de registres,– veiller à garder le pipeline plein !veiller à garder le pipeline plein !

• L’optimisation du code intermédiaireL’optimisation du code intermédiaire

– redresse les imperfections du code intermédiaire,redresse les imperfections du code intermédiaire,– redresse les imperfections du code utilisateur !redresse les imperfections du code utilisateur !

18 octobre 2007 Cours de compilation 7 - Intranet 61

Optimisation du code intermédiaireOptimisation du code intermédiaire----------------------------------------------------------------------------------------------------------------------------

----• Il fautIl faut

– tenir compte du nombre de registres,tenir compte du nombre de registres,– veiller à garder le pipeline plein !veiller à garder le pipeline plein !

• L’optimisation du code intermédiaireL’optimisation du code intermédiaire

– redresse les imperfections du code intermédiaire,redresse les imperfections du code intermédiaire,– redresse les imperfections du code utilisateur !redresse les imperfections du code utilisateur !

• La suite des instructions est découpée en de La suite des instructions est découpée en de séquences appelées « blocs fondamentaux » !séquences appelées « blocs fondamentaux » !

18 octobre 2007 Cours de compilation 7 - Intranet 62

Optimisation du code intermédiaireOptimisation du code intermédiaire----------------------------------------------------------------------------------------------------------------------------

----• Il fautIl faut

– tenir compte du nombre de registres,tenir compte du nombre de registres,– veiller à garder le pipeline plein !veiller à garder le pipeline plein !

• L’optimisation du code intermédiaireL’optimisation du code intermédiaire

– redresse les imperfections du code intermédiaire,redresse les imperfections du code intermédiaire,– redresse les imperfections du code utilisateur !redresse les imperfections du code utilisateur !

• La suite des instructions est découpée en de La suite des instructions est découpée en de séquences appelées « blocs fondamentaux » !séquences appelées « blocs fondamentaux » !

• Un « bloc fondamental » correspond à une séquence Un « bloc fondamental » correspond à une séquence d’instructions exécutées de la première à la dernière d’instructions exécutées de la première à la dernière sans interruption !sans interruption !

18 octobre 2007 Cours de compilation 7 - Intranet 63

Le bloc fondamentalLe bloc fondamental----------------------------------------------------------------------------------------------------------------------------

----• Il faut d’abord identifier les « têtes de bloc ». Ce Il faut d’abord identifier les « têtes de bloc ». Ce

sont :sont :

– la première instruction du programme,la première instruction du programme,– toute instruction atteinte par un « goto » ,toute instruction atteinte par un « goto » ,– toute instruction suivant un « goto » ,toute instruction suivant un « goto » ,– sachant que les fonctions et procédures sont sachant que les fonctions et procédures sont

assimilées à des « goto » !assimilées à des « goto » !

18 octobre 2007 Cours de compilation 7 - Intranet 64

Le bloc fondamentalLe bloc fondamental----------------------------------------------------------------------------------------------------------------------------

----• Il faut d’abord identifier les « têtes de bloc ». Ce sont :Il faut d’abord identifier les « têtes de bloc ». Ce sont :

– la première instruction du programme,la première instruction du programme,– toute instruction atteinte par un « goto » ,toute instruction atteinte par un « goto » ,– toute instruction suivant un « goto » ,toute instruction suivant un « goto » ,– sachant que les fonctions et procédures sont sachant que les fonctions et procédures sont

assimilées à des « goto » !assimilées à des « goto » !

• Un « bloc fondamental » estUn « bloc fondamental » est

– une tête de bloc,une tête de bloc,– et toutes les instructions qui la suivent jusqu’àet toutes les instructions qui la suivent jusqu’à

• la fin du programme,la fin du programme,• ou la prochaine tête de bloc, non incluse !ou la prochaine tête de bloc, non incluse !

18 octobre 2007 Cours de compilation 7 - Intranet 65

Le bloc fondamentalLe bloc fondamental----------------------------------------------------------------------------------------------------------------------------

----S.begin :S.begin :

if . . . goto S.afterif . . . goto S.after

goto S.begingoto S.begin

S.after : S.after :

18 octobre 2007 Cours de compilation 7 - Intranet 66

Le bloc fondamentalLe bloc fondamental----------------------------------------------------------------------------------------------------------------------------

----S.begin :S.begin :

if . . . goto S.afterif . . . goto S.after

goto S.begingoto S.begin

S.after : S.after : Têtes de bloc !Têtes de bloc !

18 octobre 2007 Cours de compilation 7 - Intranet 67

Le bloc fondamentalLe bloc fondamental----------------------------------------------------------------------------------------------------------------------------

----S.begin :S.begin :

if . . . goto S.afterif . . . goto S.after

goto S.begingoto S.begin

S.after : S.after : Têtes de bloc !Têtes de bloc !

Blocs !Blocs !

18 octobre 2007 Cours de compilation 7 - Intranet 68

Le bloc fondamentalLe bloc fondamental----------------------------------------------------------------------------------------------------------------------------

----• Le graphe de dépendance des blocs :Le graphe de dépendance des blocs :

– Son objectif est de dire comment les blocs se Son objectif est de dire comment les blocs se suivent potentiellement !suivent potentiellement !

18 octobre 2007 Cours de compilation 7 - Intranet 69

Le bloc fondamentalLe bloc fondamental----------------------------------------------------------------------------------------------------------------------------

----• Le graphe de dépendance des blocs :Le graphe de dépendance des blocs :

– Son objectif est de dire comment les blocs se Son objectif est de dire comment les blocs se suivent potentiellement !suivent potentiellement !

– C’est un graphe orienté !C’est un graphe orienté !– Les sommets correspondent aux blocs !Les sommets correspondent aux blocs !– Les dépendances correspondent aux arcs !Les dépendances correspondent aux arcs !

18 octobre 2007 Cours de compilation 7 - Intranet 70

Le bloc fondamentalLe bloc fondamental----------------------------------------------------------------------------------------------------------------------------

----• Le graphe de dépendance des blocs :Le graphe de dépendance des blocs :

– Son objectif est de dire comment les blocs se Son objectif est de dire comment les blocs se suivent potentiellement !suivent potentiellement !

– C’est un graphe orienté !C’est un graphe orienté !– Les sommets correspondent aux blocs !Les sommets correspondent aux blocs !– Les dépendances correspondent aux arcs !Les dépendances correspondent aux arcs !

• Nous avons A Nous avons A --> B si> B si

– la tête de B est atteinte par un goto depuis A,la tête de B est atteinte par un goto depuis A,

– B suit séquentiellement A et celui-ci se termine B suit séquentiellement A et celui-ci se termine par un goto conditionnel !par un goto conditionnel !

18 octobre 2007 Cours de compilation 7 - Intranet 71

Le bloc fondamentalLe bloc fondamental----------------------------------------------------------------------------------------------------------------------------

----S.begin :S.begin :

if . . . goto S.afterif . . . goto S.after

goto S.begingoto S.begin

S.after : S.after :

18 octobre 2007 Cours de compilation 7 - Intranet 72

Le bloc fondamentalLe bloc fondamental----------------------------------------------------------------------------------------------------------------------------

----S.begin :S.begin :

if . . . goto S.afterif . . . goto S.after

goto S.begingoto S.begin

S.after : S.after :

11

22

33

18 octobre 2007 Cours de compilation 7 - Intranet 73

Le bloc fondamentalLe bloc fondamental----------------------------------------------------------------------------------------------------------------------------

----S.begin :S.begin :

if . . . goto S.afterif . . . goto S.after

goto S.begingoto S.begin

S.after : S.after :

11

22

33

18 octobre 2007 Cours de compilation 7 - Intranet 74

Le bloc fondamentalLe bloc fondamental----------------------------------------------------------------------------------------------------------------------------

----S.begin :S.begin :

if . . . goto S.afterif . . . goto S.after

goto S.begingoto S.begin

S.after : S.after :

11

22

33

18 octobre 2007 Cours de compilation 7 - Intranet 75

Le bloc fondamentalLe bloc fondamental----------------------------------------------------------------------------------------------------------------------------

----S.begin :S.begin :

if . . . goto S.afterif . . . goto S.after

goto S.begingoto S.begin

S.after : S.after :

11

22

33

18 octobre 2007 Cours de compilation 7 - Intranet 76

Le bloc fondamentalLe bloc fondamental----------------------------------------------------------------------------------------------------------------------------

----• Quelques optimisations élémentaires dans un bloc :Quelques optimisations élémentaires dans un bloc :

18 octobre 2007 Cours de compilation 7 - Intranet 77

Le bloc fondamentalLe bloc fondamental----------------------------------------------------------------------------------------------------------------------------

----• Quelques optimisations élémentaires dans un bloc :Quelques optimisations élémentaires dans un bloc :

– Elimination de sous-expressions communes.Elimination de sous-expressions communes.

a <- b + ca <- b + c

b <- a – db <- a – d

c <- b + cc <- b + c

d <- a - dd <- a - d

18 octobre 2007 Cours de compilation 7 - Intranet 78

Le bloc fondamentalLe bloc fondamental----------------------------------------------------------------------------------------------------------------------------

----• Quelques optimisations élémentaires dans un bloc :Quelques optimisations élémentaires dans un bloc :

– Elimination de sous-expressions communes.Elimination de sous-expressions communes.

a <- b + ca <- b + c

b <- a – db <- a – d

c <- b + cc <- b + c

d <- a - dd <- a - d

18 octobre 2007 Cours de compilation 7 - Intranet 79

Le bloc fondamentalLe bloc fondamental----------------------------------------------------------------------------------------------------------------------------

----• Quelques optimisations élémentaires dans un bloc :Quelques optimisations élémentaires dans un bloc :

– Elimination de sous-expressions communes.Elimination de sous-expressions communes.

a <- b + ca <- b + c

b <- a – db <- a – d

c <- b + cc <- b + c

d <- a - dd <- a - d

a <- b + ca <- b + c

b <- a – db <- a – d

c <- b + cc <- b + c

d <- d <- bb

18 octobre 2007 Cours de compilation 7 - Intranet 80

Le bloc fondamentalLe bloc fondamental----------------------------------------------------------------------------------------------------------------------------

----• Quelques optimisations élémentaires dans un bloc :Quelques optimisations élémentaires dans un bloc :

– Elimination de sous-expressions communes.Elimination de sous-expressions communes.

a <- b + ca <- b + c

b <- a – db <- a – d

c <- b + cc <- b + c

d <- a - dd <- a - d

a <- b + ca <- b + c

b <- a – db <- a – d

c <- b + cc <- b + c

d <- d <- bb

La valeur de b change entre les deux expressions !La valeur de b change entre les deux expressions !

18 octobre 2007 Cours de compilation 7 - Intranet 81

Le bloc fondamentalLe bloc fondamental----------------------------------------------------------------------------------------------------------------------------

----• Quelques optimisations élémentaires dans un bloc :Quelques optimisations élémentaires dans un bloc :

– Elimination de sous-expressions communes.Elimination de sous-expressions communes.

– Elimination de code mort.Elimination de code mort.

18 octobre 2007 Cours de compilation 7 - Intranet 82

Le bloc fondamentalLe bloc fondamental----------------------------------------------------------------------------------------------------------------------------

----• Quelques optimisations élémentaires dans un bloc :Quelques optimisations élémentaires dans un bloc :

– Elimination de sous-expressions communes.Elimination de sous-expressions communes.

– Elimination de code mort.Elimination de code mort.

• Toute affectation de « variable du Toute affectation de « variable du compilateur » ( temporaire ) qui n’est pas compilateur » ( temporaire ) qui n’est pas utilisée dans la suite du bloc !utilisée dans la suite du bloc !

• Toute « variable locale » dont on sait qu’elle Toute « variable locale » dont on sait qu’elle n’est pas utilisée dans la suite ( il faut plus n’est pas utilisée dans la suite ( il faut plus d’informations ) !d’informations ) !

18 octobre 2007 Cours de compilation 7 - Intranet 83

Le bloc fondamentalLe bloc fondamental----------------------------------------------------------------------------------------------------------------------------

----• Quelques optimisations élémentaires dans un bloc :Quelques optimisations élémentaires dans un bloc :

– Elimination de sous-expressions communes.Elimination de sous-expressions communes.

– Elimination de code mort.Elimination de code mort.

– Renommage des variables temporaires, qui Renommage des variables temporaires, qui peuvent de ce fait devenir des registres.peuvent de ce fait devenir des registres.

18 octobre 2007 Cours de compilation 7 - Intranet 84

Le bloc fondamentalLe bloc fondamental----------------------------------------------------------------------------------------------------------------------------

----• Quelques optimisations élémentaires dans un bloc :Quelques optimisations élémentaires dans un bloc :

– Elimination de sous-expressions communes.Elimination de sous-expressions communes.

– Elimination de code mort.Elimination de code mort.

– Renommage des variables temporaires, qui Renommage des variables temporaires, qui peuvent de ce fait devenir des registres. peuvent de ce fait devenir des registres.

– Echange de l’ordre des calculs, si les Echange de l’ordre des calculs, si les dépendances entre les instructions le dépendances entre les instructions le permettent.permettent.

18 octobre 2007 Cours de compilation 7 - Intranet 85

Le bloc fondamentalLe bloc fondamental----------------------------------------------------------------------------------------------------------------------------

----• Quelques optimisations élémentaires dans un bloc :Quelques optimisations élémentaires dans un bloc :

– Elimination de sous-expressions communes.Elimination de sous-expressions communes.

– Elimination de code mort.Elimination de code mort.

– Renommage des variables temporaires, qui Renommage des variables temporaires, qui peuvent de ce fait devenir des registres. peuvent de ce fait devenir des registres.

– Echange de l’ordre des calculs, si les Echange de l’ordre des calculs, si les dépendances entre les instructions le permettent.dépendances entre les instructions le permettent.

• Ces transformations sont possibles parce que le bloc Ces transformations sont possibles parce que le bloc est exécuté intégralement et sans interruption !est exécuté intégralement et sans interruption !

18 octobre 2007 Cours de compilation 7 - Intranet 86

A N A L Y S EA N A L Y S E

D E L AD E L A

D U R E E D ED U R E E D E

V I E D E SV I E D E S

V A R I A B L E SV A R I A B L E S

18 octobre 2007 Cours de compilation 7 - Intranet 87

Durée de vie des variablesDurée de vie des variables----------------------------------------------------------------------------------------------------------------------------

----• Il est important de savoir à partir de quand une Il est important de savoir à partir de quand une

variable n’est plus utilisée ( n’occupe donc plus de variable n’est plus utilisée ( n’occupe donc plus de registre, . . . ) !registre, . . . ) !

18 octobre 2007 Cours de compilation 7 - Intranet 88

Durée de vie des variablesDurée de vie des variables----------------------------------------------------------------------------------------------------------------------------

----• Il est important de savoir à partir de quand une Il est important de savoir à partir de quand une

variable n’est plus utilisée ( n’occupe donc plus de variable n’est plus utilisée ( n’occupe donc plus de registre, . . . ) !registre, . . . ) !

– Pour les variables du compilateur c’est facile à Pour les variables du compilateur c’est facile à savoir !savoir !

18 octobre 2007 Cours de compilation 7 - Intranet 89

Durée de vie des variablesDurée de vie des variables----------------------------------------------------------------------------------------------------------------------------

----• Il est important de savoir à partir de quand une Il est important de savoir à partir de quand une

variable n’est plus utilisée ( n’occupe donc plus de variable n’est plus utilisée ( n’occupe donc plus de registre, . . . ) !registre, . . . ) !

– Pour les variables du compilateur c’est facile à Pour les variables du compilateur c’est facile à savoir !savoir !

– Pour les variables de l’utilisateur qui sont Pour les variables de l’utilisateur qui sont locales, nous pourrons faire des choses !locales, nous pourrons faire des choses !

18 octobre 2007 Cours de compilation 7 - Intranet 90

Durée de vie des variablesDurée de vie des variables----------------------------------------------------------------------------------------------------------------------------

----• Il est important de savoir à partir de quand une Il est important de savoir à partir de quand une

variable n’est plus utilisée ( n’occupe donc plus de variable n’est plus utilisée ( n’occupe donc plus de registre, . . . ) !registre, . . . ) !

– Pour les variables du compilateur c’est facile à Pour les variables du compilateur c’est facile à savoir !savoir !

– Pour les variables de l’utilisateur qui sont Pour les variables de l’utilisateur qui sont locales, nous pourrons faire des choses !locales, nous pourrons faire des choses !

– Pour les variables de l’utilisateur qui sont Pour les variables de l’utilisateur qui sont globales, nous ne pouvons en gros rien faire !globales, nous ne pouvons en gros rien faire !

18 octobre 2007 Cours de compilation 7 - Intranet 91

Durée de vie des variablesDurée de vie des variables----------------------------------------------------------------------------------------------------------------------------

----• Il est important de savoir à partir de quand une Il est important de savoir à partir de quand une

variable n’est plus utilisée ( n’occupe donc plus de variable n’est plus utilisée ( n’occupe donc plus de registre, . . . ) !registre, . . . ) !

– Pour les variables du compilateur c’est facile à Pour les variables du compilateur c’est facile à savoir !savoir !

– Pour les variables de l’utilisateur qui sont Pour les variables de l’utilisateur qui sont locales, nous pourrons faire des choses !locales, nous pourrons faire des choses !

– Pour les variables de l’utilisateur qui sont Pour les variables de l’utilisateur qui sont globales, nous ne pouvons en gros rien faire !globales, nous ne pouvons en gros rien faire !

18 octobre 2007 Cours de compilation 7 - Intranet 92

Durée de vie des variablesDurée de vie des variables----------------------------------------------------------------------------------------------------------------------------

----• Il est important de savoir à partir de quand une variable Il est important de savoir à partir de quand une variable

n’est plus utilisée ( n’occupe donc plus de n’est plus utilisée ( n’occupe donc plus de registre, . . . ) !registre, . . . ) !

– Pour les variables du compilateur c’est facile à savoir Pour les variables du compilateur c’est facile à savoir !!

– Pour les variables de l’utilisateur qui sont locales, Pour les variables de l’utilisateur qui sont locales, nous pourrons faire des choses !nous pourrons faire des choses !

– Pour les variables de l’utilisateur qui sont globales, Pour les variables de l’utilisateur qui sont globales, nous ne pouvons en gros rien faire !nous ne pouvons en gros rien faire !

• Nous voulons savoir Nous voulons savoir

– « qui définit quoi ? » ,« qui définit quoi ? » ,

– « qui utilise quoi ? » !« qui utilise quoi ? » !

18 octobre 2007 Cours de compilation 7 - Intranet 93

Durée de vie des variablesDurée de vie des variables----------------------------------------------------------------------------------------------------------------------------

----• Au niveau d’un bloc, nous pouvons définirAu niveau d’un bloc, nous pouvons définir

– use ( bloc ) , resp. def ( bloc ) , qui est use ( bloc ) , resp. def ( bloc ) , qui est l’ensemble des variables lues, resp. écrites, par l’ensemble des variables lues, resp. écrites, par ce bloc.ce bloc.

18 octobre 2007 Cours de compilation 7 - Intranet 94

Durée de vie des variablesDurée de vie des variables----------------------------------------------------------------------------------------------------------------------------

----• Au niveau d’un bloc, nous pouvons définirAu niveau d’un bloc, nous pouvons définir

– use ( bloc ) , resp. def ( bloc ) , qui est use ( bloc ) , resp. def ( bloc ) , qui est l’ensemble des variables lues, resp. écrites, par l’ensemble des variables lues, resp. écrites, par ce bloc.ce bloc.

– Use ( bloc ) , resp. Def ( bloc ) , qui est Use ( bloc ) , resp. Def ( bloc ) , qui est l’ensemble des variables lues, resp. écrites, par l’ensemble des variables lues, resp. écrites, par ce bloc ou un de ses successeurs.ce bloc ou un de ses successeurs.

18 octobre 2007 Cours de compilation 7 - Intranet 95

Durée de vie des variablesDurée de vie des variables----------------------------------------------------------------------------------------------------------------------------

----• Au niveau d’un bloc, nous pouvons définirAu niveau d’un bloc, nous pouvons définir

– use ( bloc ) , resp. def ( bloc ) , qui est l’ensemble use ( bloc ) , resp. def ( bloc ) , qui est l’ensemble des variables lues, resp. écrites, par ce bloc.des variables lues, resp. écrites, par ce bloc.

– Use ( bloc ) , resp. Def ( bloc ) , qui est Use ( bloc ) , resp. Def ( bloc ) , qui est l’ensemble des variables lues, resp. écrites, par ce l’ensemble des variables lues, resp. écrites, par ce bloc ou un de ses successeurs.bloc ou un de ses successeurs.

• Une autre idée : « next_use » .Une autre idée : « next_use » .

i : x <- . . .i : x <- . . .

x <- . . .x <- . . .

. . . <- . . . x . . .. . . <- . . . x . . .

j : . . . <- . . . x . . .j : . . . <- . . . x . . .next_use ( i ) = jnext_use ( i ) = j

18 octobre 2007 Cours de compilation 7 - Intranet 96

Durée de vie des variablesDurée de vie des variables----------------------------------------------------------------------------------------------------------------------------

----• A titre d’illustration, nous associons à une variableA titre d’illustration, nous associons à une variable

– live live ouou live live

– no-use no-use ouou un numéro d’instruction un numéro d’instruction

18 octobre 2007 Cours de compilation 7 - Intranet 97

Durée de vie des variablesDurée de vie des variables----------------------------------------------------------------------------------------------------------------------------

----• A titre d’illustration, nous associons à une variableA titre d’illustration, nous associons à une variable

– live live ouou live live

– no-use no-use ouou un numéro d’instruction un numéro d’instruction

• Nous initialisons les états de variables et nous Nous initialisons les états de variables et nous parcourons le programme à l’envers !parcourons le programme à l’envers !

18 octobre 2007 Cours de compilation 7 - Intranet 98

Durée de vie des variablesDurée de vie des variables----------------------------------------------------------------------------------------------------------------------------

----• A titre d’illustration, nous associons à une variableA titre d’illustration, nous associons à une variable

– live live ouou live live

– no-use no-use ouou un numéro d’instruction un numéro d’instruction

• Nous initialisons les états de variables et nous Nous initialisons les états de variables et nous parcourons le programme à l’envers !parcourons le programme à l’envers !

• Initialisation :Initialisation :

– Toutes les variables : no-useToutes les variables : no-use– Les variables globales : liveLes variables globales : live– Les variables locales et temporaires :Les variables locales et temporaires :

• live , si elles sont lues dans un bloc successeur,live , si elles sont lues dans un bloc successeur,• live , sinon.live , sinon.

18 octobre 2007 Cours de compilation 7 - Intranet 99

Durée de vie des variablesDurée de vie des variables----------------------------------------------------------------------------------------------------------------------------

----• A titre d’illustration, nous associons à une variableA titre d’illustration, nous associons à une variable

– live live ouou live live

– no-use no-use ouou un numéro d’instruction un numéro d’instruction

• Nous initialisons les états de variables et nous Nous initialisons les états de variables et nous parcourons le programme à l’envers !parcourons le programme à l’envers !

• Pour toute instruction i : x <Pour toute instruction i : x <-- y op z y op z

18 octobre 2007 Cours de compilation 7 - Intranet 100

Durée de vie des variablesDurée de vie des variables----------------------------------------------------------------------------------------------------------------------------

----• A titre d’illustration, nous associons à une variableA titre d’illustration, nous associons à une variable

– live live ouou live live

– no-use no-use ouou un numéro d’instruction un numéro d’instruction

• Nous initialisons les états de variables et nous Nous initialisons les états de variables et nous parcourons le programme à l’envers !parcourons le programme à l’envers !

• Pour toute instruction i : x <Pour toute instruction i : x <-- y op z y op z

– Nous attachons à i les informations sur x , y et Nous attachons à i les informations sur x , y et z . z .

18 octobre 2007 Cours de compilation 7 - Intranet 101

Durée de vie des variablesDurée de vie des variables----------------------------------------------------------------------------------------------------------------------------

----• A titre d’illustration, nous associons à une variableA titre d’illustration, nous associons à une variable

– live live ouou live live

– no-use no-use ouou un numéro d’instruction un numéro d’instruction

• Nous initialisons les états de variables et nous Nous initialisons les états de variables et nous parcourons le programme à l’envers !parcourons le programme à l’envers !

• Pour toute instruction i : x <Pour toute instruction i : x <-- y op z y op z

– Nous attachons à i les informations sur x , y et Nous attachons à i les informations sur x , y et z . z .

– x devient x devient live et no-use . live et no-use .

18 octobre 2007 Cours de compilation 7 - Intranet 102

Durée de vie des variablesDurée de vie des variables----------------------------------------------------------------------------------------------------------------------------

----• A titre d’illustration, nous associons à une variableA titre d’illustration, nous associons à une variable

– live live ouou live live

– no-use no-use ouou un numéro d’instruction un numéro d’instruction

• Nous initialisons les états de variables et nous Nous initialisons les états de variables et nous parcourons le programme à l’envers !parcourons le programme à l’envers !

• Pour toute instruction i : x <Pour toute instruction i : x <-- y op z y op z

– Nous attachons à i les informations sur x , y et Nous attachons à i les informations sur x , y et z . z .

– x devient x devient live et no-use . live et no-use .– y et z deviennent live et de numéro i .y et z deviennent live et de numéro i .

18 octobre 2007 Cours de compilation 7 - Intranet 103

Durée de vie des variablesDurée de vie des variables----------------------------------------------------------------------------------------------------------------------------

----• A titre d’illustration, nous associons à une variableA titre d’illustration, nous associons à une variable

– live live ouou live live

– no-use no-use ouou un numéro d’instruction un numéro d’instruction

• Nous initialisons les états de variables et nous Nous initialisons les états de variables et nous parcourons le programme à l’envers !parcourons le programme à l’envers !

• Pour toute instruction i : x <Pour toute instruction i : x <-- y op z y op z

– Nous attachons à i les informations sur x , y et z .Nous attachons à i les informations sur x , y et z .– x devient x devient live et no-use . live et no-use .– y et z deviennent live et de numéro i .y et z deviennent live et de numéro i .

Attention à l’ordre, car la variable x pourrait êtreAttention à l’ordre, car la variable x pourrait être

identique à y ou z !identique à y ou z !

18 octobre 2007 Cours de compilation 7 - Intranet 104

Durée de vie des variablesDurée de vie des variables----------------------------------------------------------------------------------------------------------------------------

----• Une illustration, avec t temporaire locale au bloc :Une illustration, avec t temporaire locale au bloc :

( 1 ) x <- y + t( 1 ) x <- y + t

( 2 ) y <- x + y( 2 ) y <- x + y

( 3 ) x <- y - z( 3 ) x <- y - z

18 octobre 2007 Cours de compilation 7 - Intranet 105

Durée de vie des variablesDurée de vie des variables----------------------------------------------------------------------------------------------------------------------------

----• Une illustration, avec t temporaire locale au bloc :Une illustration, avec t temporaire locale au bloc :

( 1 ) x <- y + t( 1 ) x <- y + t

( 2 ) y <- x + y( 2 ) y <- x + y

( 3 ) x <- y - z( 3 ) x <- y - z

live : x , y , z live : x , y , z live : t x , y , z , t : no-use live : t x , y , z , t : no-use

18 octobre 2007 Cours de compilation 7 - Intranet 106

Durée de vie des variablesDurée de vie des variables----------------------------------------------------------------------------------------------------------------------------

----• Une illustration, avec t temporaire locale au bloc :Une illustration, avec t temporaire locale au bloc :

( 1 ) x <- y + t( 1 ) x <- y + t

( 2 ) y <- x + y( 2 ) y <- x + y

( 3 ) x <- y - z( 3 ) x <- y - z

live : x , y , z live : x , y , z live : t x , y , z , t : no-use live : t x , y , z , t : no-use

live : y , z live : y , z live : x , t x , t : no-use y , z : 3 live : x , t x , t : no-use y , z : 3

18 octobre 2007 Cours de compilation 7 - Intranet 107

Durée de vie des variablesDurée de vie des variables----------------------------------------------------------------------------------------------------------------------------

----• Une illustration, avec t temporaire locale au bloc :Une illustration, avec t temporaire locale au bloc :

( 1 ) x <- y + t( 1 ) x <- y + t

( 2 ) y <- x + y( 2 ) y <- x + y

( 3 ) x <- y - z( 3 ) x <- y - z

live : x , y , z live : x , y , z live : t x , y , z , t : no-use live : t x , y , z , t : no-use

live : y , z live : y , z live : x , t x , t : no-use y , z : 3 live : x , t x , t : no-use y , z : 3

live : x , y , z live : x , y , z live : t t : no-use x , y : 2 z : 3 live : t t : no-use x , y : 2 z : 3

18 octobre 2007 Cours de compilation 7 - Intranet 108

Durée de vie des variablesDurée de vie des variables----------------------------------------------------------------------------------------------------------------------------

----• Une illustration, avec t temporaire locale au bloc :Une illustration, avec t temporaire locale au bloc :

( 1 ) x <- y + t( 1 ) x <- y + t

( 2 ) y <- x + y( 2 ) y <- x + y

( 3 ) x <- y - z( 3 ) x <- y - z

live : x , y , z live : x , y , z live : t x , y , z , t : no-use live : t x , y , z , t : no-use

live : y , z live : y , z live : x , t x , t : no-use y , z : 3 live : x , t x , t : no-use y , z : 3

live : x , y , z live : x , y , z live : t t : no-use x , y : 2 z : 3 live : t t : no-use x , y : 2 z : 3

live : y , z , t live : y , z , t live : x x : no-use y , t : 1 z : 3 live : x x : no-use y , t : 1 z : 3

18 octobre 2007 Cours de compilation 7 - Intranet 109

Durée de vie des variablesDurée de vie des variables----------------------------------------------------------------------------------------------------------------------------

----• Une illustration, avec t temporaire locale au bloc :Une illustration, avec t temporaire locale au bloc :

( 1 ) x <- y + t( 1 ) x <- y + t

( 2 ) y <- x + y( 2 ) y <- x + y

( 3 ) x <- y - z( 3 ) x <- y - z

live : x , y , z live : x , y , z live : t x , y , z , t : no-use live : t x , y , z , t : no-use

live : y , z live : y , z live : x , t x , t : no-use y , z : 3 live : x , t x , t : no-use y , z : 3

live : x , y , z live : x , y , z live : t t : no-use x , y : 2 z : 3 live : t t : no-use x , y : 2 z : 3

live : y , z , t live : y , z , t live : x x : no-use y , t : 1 z : 3 live : x x : no-use y , t : 1 z : 3

PourPour t t : :

18 octobre 2007 Cours de compilation 7 - Intranet 110

Durée de vie des variablesDurée de vie des variables----------------------------------------------------------------------------------------------------------------------------

----• Nous pouvons affiner les informations par une Nous pouvons affiner les informations par une

analyse qui englobe plusieurs blocs ( inter-analyse qui englobe plusieurs blocs ( inter-bloc ) !bloc ) !

– Nous supposons, par défaut, que les variables Nous supposons, par défaut, que les variables doivent être vivantes !doivent être vivantes !

18 octobre 2007 Cours de compilation 7 - Intranet 111

Durée de vie des variablesDurée de vie des variables----------------------------------------------------------------------------------------------------------------------------

----• Nous pouvons affiner les informations par une Nous pouvons affiner les informations par une

analyse qui englobe plusieurs blocs ( inter-analyse qui englobe plusieurs blocs ( inter-bloc ) !bloc ) !

– Nous supposons, par défaut, que les variables Nous supposons, par défaut, que les variables doivent être vivantes !doivent être vivantes !

– Nous essayons ensuite de montrer que certaines Nous essayons ensuite de montrer que certaines variables sont en fait inutiles !variables sont en fait inutiles !

18 octobre 2007 Cours de compilation 7 - Intranet 112

Durée de vie des variablesDurée de vie des variables----------------------------------------------------------------------------------------------------------------------------

----• Nous pouvons affiner les informations par une Nous pouvons affiner les informations par une

analyse qui englobe plusieurs blocs ( inter-analyse qui englobe plusieurs blocs ( inter-bloc ) !bloc ) !

– Nous supposons, par défaut, que les variables Nous supposons, par défaut, que les variables doivent être vivantes !doivent être vivantes !

– Nous essayons ensuite de montrer que certaines Nous essayons ensuite de montrer que certaines variables sont en fait inutiles !variables sont en fait inutiles !

– Souvent l’analyse est obtenu par itérations Souvent l’analyse est obtenu par itérations jusqu’à atteindre un point-fixe !jusqu’à atteindre un point-fixe !

18 octobre 2007 Cours de compilation 7 - Intranet 113

Durée de vie des variablesDurée de vie des variables----------------------------------------------------------------------------------------------------------------------------

----• Nous pouvons affiner les informations par une Nous pouvons affiner les informations par une

analyse qui englobe plusieurs blocs ( inter-bloc ) !analyse qui englobe plusieurs blocs ( inter-bloc ) !

– Nous supposons, par défaut, que les variables Nous supposons, par défaut, que les variables doivent être vivantes !doivent être vivantes !

– Nous essayons ensuite de montrer que certaines Nous essayons ensuite de montrer que certaines variables sont en fait inutiles !variables sont en fait inutiles !

– Souvent l’analyse est obtenu par itérations Souvent l’analyse est obtenu par itérations jusqu’à atteindre un point-fixe !jusqu’à atteindre un point-fixe !

– Ceci veut dire que nous nous arrêtons seulement Ceci veut dire que nous nous arrêtons seulement lorsque la dernière itération n’a plus apporté de lorsque la dernière itération n’a plus apporté de modifications !modifications !

18 octobre 2007 Cours de compilation 7 - Intranet 114

Durée de vie des variablesDurée de vie des variables----------------------------------------------------------------------------------------------------------------------------

----

y <- 3y <- 3x <- 5x <- 5

si x = 0si x = 0goto FINgoto FIN

x <- x-1x <- x-1y <- xy <- x

FIN :FIN :y <- x+1y <- x+1

Les flèches donnentLes flèches donnentles dépendances !les dépendances !

18 octobre 2007 Cours de compilation 7 - Intranet 115

Durée de vie des variablesDurée de vie des variables----------------------------------------------------------------------------------------------------------------------------

----

y <- 3y <- 3x <- 5x <- 5

si x = 0si x = 0goto FINgoto FIN

FIN :FIN :y <- x+1y <- x+1

Les flèches donnentLes flèches donnentles dépendances !les dépendances !

L(x) L(y)L(x) L(y) L(x) L(y)L(x) L(y)

L(x) L(y)L(x) L(y)

L(x) L(y)L(x) L(y)Par hypothèse, lesPar hypothèse, les

variables sontvariables sontvivantes!vivantes!

x <- x-1x <- x-1y <- xy <- x

18 octobre 2007 Cours de compilation 7 - Intranet 116

Durée de vie des variablesDurée de vie des variables----------------------------------------------------------------------------------------------------------------------------

----

y <- 3y <- 3x <- 5x <- 5

si x = 0si x = 0goto FINgoto FIN

FIN :FIN :y <- x+1y <- x+1

Les flèches donnentLes flèches donnentles dépendances !les dépendances !

L(x) L(y)L(x) L(y) L(x) L(y)L(x) L(y)

L(x) L(y)L(x) L(y)

L(x) L(y)L(x) L(y)Par hypothèse, lesPar hypothèse, les

variables sontvariables sontvivantes!vivantes!

x <- x-1x <- x-1y <- xy <- x

Itération 1 :Itération 1 :

L(x) L(x) L(y)L(y) L(x) L(x) L(y)L(y)

L(x) L(y)L(x) L(y)

L(x) L(x) L(y)L(y)

18 octobre 2007 Cours de compilation 7 - Intranet 117

Durée de vie des variablesDurée de vie des variables----------------------------------------------------------------------------------------------------------------------------

----

y <- 3y <- 3x <- 5x <- 5

si x = 0si x = 0goto FINgoto FIN

FIN :FIN :y <- x+1y <- x+1

Les flèches donnentLes flèches donnentles dépendances !les dépendances !

L(x) L(y)L(x) L(y) L(x) L(y)L(x) L(y)

L(x) L(y)L(x) L(y)

L(x) L(y)L(x) L(y)Par hypothèse, lesPar hypothèse, les

variables sontvariables sontvivantes!vivantes!

x <- x-1x <- x-1y <- xy <- x

Itération 1 :Itération 1 :

L(x) L(x) L(y)L(y) L(x) L(x) L(y)L(y)

L(x) L(y)L(x) L(y)

L(x) L(x) L(y)L(y)

OKOK

18 octobre 2007 Cours de compilation 7 - Intranet 118

Durée de vie des variablesDurée de vie des variables----------------------------------------------------------------------------------------------------------------------------

----

y <- 3y <- 3x <- 5x <- 5

si x = 0si x = 0goto FINgoto FIN

FIN :FIN :y <- x+1y <- x+1

Les flèches donnentLes flèches donnentles dépendances !les dépendances !

L(x) L(y)L(x) L(y) L(x) L(y)L(x) L(y)

L(x) L(y)L(x) L(y)

L(x) L(y)L(x) L(y)Par hypothèse, lesPar hypothèse, les

variables sontvariables sontvivantes!vivantes!

x <- x-1x <- x-1y <- xy <- x

Itération 1 :Itération 1 :

L(x) L(x) L(y)L(y) L(x) L(x) L(y)L(y)

L(x) L(y)L(x) L(y)

L(x) L(x) L(y)L(y)

OKOK

18 octobre 2007 Cours de compilation 7 - Intranet 119

Durée de vie des variablesDurée de vie des variables----------------------------------------------------------------------------------------------------------------------------

----

y <- 3y <- 3x <- 5x <- 5

si x = 0si x = 0goto FINgoto FIN

FIN :FIN :y <- x+1y <- x+1

Les flèches donnentLes flèches donnentles dépendances !les dépendances !

L(x) L(y)L(x) L(y) L(x) L(y)L(x) L(y)

L(x) L(y)L(x) L(y)

L(x) L(y)L(x) L(y)Par hypothèse, lesPar hypothèse, les

variables sontvariables sontvivantes!vivantes!

x <- x-1x <- x-1y <- xy <- x

Itération 1 :Itération 1 :

L(x) L(x) L(y)L(y) L(x) L(x) L(y)L(y)

L(x) L(y)L(x) L(y)

L(x) L(x) L(y)L(y)

PROBLEMEPROBLEME

18 octobre 2007 Cours de compilation 7 - Intranet 120

Durée de vie des variablesDurée de vie des variables----------------------------------------------------------------------------------------------------------------------------

----

y <- 3y <- 3x <- 5x <- 5

si x = 0si x = 0goto FINgoto FIN

FIN :FIN :y <- x+1y <- x+1

Les flèches donnentLes flèches donnentles dépendances !les dépendances !

L(x) L(y)L(x) L(y) L(x) L(y)L(x) L(y)

L(x) L(x) L(y)L(y)

L(x) L(y)L(x) L(y)Par hypothèse, lesPar hypothèse, les

variables sontvariables sontvivantes!vivantes!

x <- x-1x <- x-1y <- xy <- x

Itération 1 :Itération 1 :

L(x) L(x) L(y)L(y) L(x) L(x) L(y)L(y)

L(x) L(y)L(x) L(y)

L(x) L(x) L(y)L(y)

PROBLEMEPROBLEME

18 octobre 2007 Cours de compilation 7 - Intranet 121

Durée de vie des variablesDurée de vie des variables----------------------------------------------------------------------------------------------------------------------------

----

y <- 3y <- 3x <- 5x <- 5

si x = 0si x = 0goto FINgoto FIN

FIN :FIN :y <- x+1y <- x+1

Les flèches donnentLes flèches donnentles dépendances !les dépendances !

L(x) L(y)L(x) L(y) L(x) L(y)L(x) L(y)

L(x) L(x) L(y)L(y)

L(x) L(y)L(x) L(y)Par hypothèse, lesPar hypothèse, les

variables sontvariables sontvivantes!vivantes!

x <- x-1x <- x-1y <- xy <- x

Itération 1 :Itération 1 :

L(x) L(x) L(y)L(y) L(x) L(x) L(y)L(y)

L(x) L(x) L(y)L(y)

L(x) L(x) L(y)L(y)

Itération 2 :Itération 2 :

18 octobre 2007 Cours de compilation 7 - Intranet 122

Durée de vie des variablesDurée de vie des variables----------------------------------------------------------------------------------------------------------------------------

----

y <- 3y <- 3x <- 5x <- 5

si x = 0si x = 0goto FINgoto FIN

FIN :FIN :y <- x+1y <- x+1

Les flèches donnentLes flèches donnentles dépendances !les dépendances !

L(x) L(x) L(y)L(y) L(x) L(y)L(x) L(y)

L(x) L(x) L(y)L(y)

L(x) L(x) L(y)L(y)Par hypothèse, lesPar hypothèse, les

variables sontvariables sontvivantes!vivantes!

x <- x-1x <- x-1y <- xy <- x

Itération 1 :Itération 1 :

L(x) L(x) L(y)L(y) L(x) L(x) L(y)L(y)

L(x) L(x) L(y)L(y)

L(x) L(x) L(y)L(y)

Itération 2 :Itération 2 :

18 octobre 2007 Cours de compilation 7 - Intranet 123

Durée de vie des variablesDurée de vie des variables----------------------------------------------------------------------------------------------------------------------------

----

y <- 3y <- 3x <- 5x <- 5

si x = 0si x = 0goto FINgoto FIN

FIN :FIN :y <- x+1y <- x+1

Les flèches donnentLes flèches donnentles dépendances !les dépendances !

L(x) L(x) L(y)L(y) L(x) L(y)L(x) L(y)

L(x) L(x) L(y)L(y)

L(x) L(x) L(y)L(y)Par hypothèse, lesPar hypothèse, les

variables sontvariables sontvivantes!vivantes!

x <- x-1x <- x-1y <- xy <- x

Itération 1 :Itération 1 :

L(x) L(x) L(y)L(y) L(x) L(x) L(y)L(y)

L(x) L(x) L(y)L(y)

L(x) L(x) L(y)L(y)

Itération 2 :Itération 2 :

Itération 3 :Itération 3 :

18 octobre 2007 Cours de compilation 7 - Intranet 124

Durée de vie des variablesDurée de vie des variables----------------------------------------------------------------------------------------------------------------------------

----

y <- 3y <- 3x <- 5x <- 5

si x = 0si x = 0goto FINgoto FIN

FIN :FIN :y <- x+1y <- x+1

Les flèches donnentLes flèches donnentles dépendances !les dépendances !

L(x) L(x) L(y)L(y) L(x) L(y)L(x) L(y)

L(x) L(x) L(y)L(y)

L(x) L(x) L(y)L(y)Par hypothèse, lesPar hypothèse, les

variables sontvariables sontvivantes!vivantes!

x <- x-1x <- x-1y <- xy <- x

Itération 1 :Itération 1 :

L(x) L(x) L(y)L(y) L(x) L(x) L(y)L(y)

L(x) L(x) L(y)L(y)

L(x) L(x) L(y)L(y)

Itération 2 :Itération 2 :

Itération 3 :Itération 3 :

18 octobre 2007 Cours de compilation 7 - Intranet 125

Durée de vie des variablesDurée de vie des variables----------------------------------------------------------------------------------------------------------------------------

----

y <- 3y <- 3x <- 5x <- 5

si x = 0si x = 0goto FINgoto FIN

FIN :FIN :y <- x+1y <- x+1

Les flèches donnentLes flèches donnentles dépendances !les dépendances !

L(x) L(x) L(y)L(y) L(x) L(y)L(x) L(y)

L(x) L(x) L(y)L(y)

L(x) L(x) L(y)L(y)Par hypothèse, lesPar hypothèse, les

variables sontvariables sontvivantes!vivantes!

x <- x-1x <- x-1y <- xy <- x

Itération 1 :Itération 1 :

L(x) L(x) L(y)L(y) L(x) L(x) L(y)L(y)

L(x) L(x) L(y)L(y)

L(x) L(x) L(y)L(y)

Itération 2 :Itération 2 :

Itération 3 :Itération 3 :

18 octobre 2007 Cours de compilation 7 - Intranet 126

Durée de vie des variablesDurée de vie des variables----------------------------------------------------------------------------------------------------------------------------

----

y <- 3y <- 3x <- 5x <- 5

si x = 0si x = 0goto FINgoto FIN

FIN :FIN :y <- x+1y <- x+1

Les flèches donnentLes flèches donnentles dépendances !les dépendances !

L(x) L(x) L(y)L(y) L(x) L(y)L(x) L(y)

L(x) L(x) L(y)L(y)

L(x) L(x) L(y)L(y)Par hypothèse, lesPar hypothèse, les

variables sontvariables sontvivantes!vivantes!

x <- x-1x <- x-1y <- xy <- x

Itération 1 :Itération 1 :

L(x) L(x) L(y)L(y) L(x) L(x) L(y)L(y)

L(x) L(x) L(y)L(y)

L(x) L(x) L(y)L(y)

Itération 2 :Itération 2 :

Itération 3 :Itération 3 :

18 octobre 2007 Cours de compilation 7 - Intranet 127

Durée de vie des variablesDurée de vie des variables----------------------------------------------------------------------------------------------------------------------------

----

x <- 5x <- 5

si x = 0si x = 0goto FINgoto FIN

FIN :FIN :y <- x+1y <- x+1x <- x-1x <- x-1

18 octobre 2007 Cours de compilation 7 - Intranet 128

RésuméRésumé----------------------------------------------------------------------------------------------------------------------------

----

•Génération de codeGénération de code

•Optimisation de codeOptimisation de code

18 octobre 2007 Cours de compilation 7 - Intranet 129

E TE T

P O U RP O U R

C O N C L U R EC O N C L U R E

. . .. . .

18 octobre 2007 Cours de compilation 7 - Intranet 130

Résumé du coursRésumé du cours----------------------------------------------------------------------------------------------------------------------------

----•Définitions de baseDéfinitions de base•Composition de compilateursComposition de compilateurs•L’environnement d’un compilateurL’environnement d’un compilateur•Evaluation partielle et compilationEvaluation partielle et compilation•Analyses lexicales et syntaxiquesAnalyses lexicales et syntaxiques•Techniques d’analyse descendantesTechniques d’analyse descendantes•Techniques d’analyse ascendantesTechniques d’analyse ascendantes•YACCYACC•Analyse sémantiqueAnalyse sémantique•Environnement d’exécutionEnvironnement d’exécution•Génération de codeGénération de code•Optimisation de codeOptimisation de code

18 octobre 2007 Cours de compilation 7 - Intranet 131

Résumé du coursRésumé du cours----------------------------------------------------------------------------------------------------------------------------

----•Définitions de baseDéfinitions de base•Composition de compilateursComposition de compilateurs•L’environnement d’un compilateurL’environnement d’un compilateur•Evaluation partielle et compilationEvaluation partielle et compilation•Analyses lexicales et syntaxiquesAnalyses lexicales et syntaxiques•Techniques d’analyse descendantesTechniques d’analyse descendantes•Techniques d’analyse ascendantesTechniques d’analyse ascendantes•YACCYACC•Analyse sémantiqueAnalyse sémantique•Environnement d’exécutionEnvironnement d’exécution•Génération de codeGénération de code•Optimisation de codeOptimisation de code

18 octobre 2007 Cours de compilation 7 - Intranet 132

Résumé du coursRésumé du cours----------------------------------------------------------------------------------------------------------------------------

----•Définitions de baseDéfinitions de base•Composition de compilateursComposition de compilateurs•L’environnement d’un compilateurL’environnement d’un compilateur•Evaluation partielle et compilationEvaluation partielle et compilation•Analyses lexicales et syntaxiquesAnalyses lexicales et syntaxiques•Techniques d’analyse descendantesTechniques d’analyse descendantes•Techniques d’analyse ascendantesTechniques d’analyse ascendantes•YACCYACC•Analyse sémantiqueAnalyse sémantique•Environnement d’exécutionEnvironnement d’exécution•Génération de codeGénération de code•Optimisation de codeOptimisation de code

18 octobre 2007 Cours de compilation 7 - Intranet 133

Résumé du coursRésumé du cours----------------------------------------------------------------------------------------------------------------------------

----•Définitions de baseDéfinitions de base•Composition de compilateursComposition de compilateurs•L’environnement d’un compilateurL’environnement d’un compilateur•Evaluation partielle et compilationEvaluation partielle et compilation•Analyses lexicales et syntaxiquesAnalyses lexicales et syntaxiques•Techniques d’analyse descendantesTechniques d’analyse descendantes•Techniques d’analyse ascendantesTechniques d’analyse ascendantes•YACCYACC•Analyse sémantiqueAnalyse sémantique•Environnement d’exécutionEnvironnement d’exécution•Génération de codeGénération de code•Optimisation de codeOptimisation de code

18 octobre 2007 Cours de compilation 7 - Intranet 134

Résumé du coursRésumé du cours----------------------------------------------------------------------------------------------------------------------------

----•Définitions de baseDéfinitions de base•Composition de compilateursComposition de compilateurs•L’environnement d’un compilateurL’environnement d’un compilateur•Evaluation partielle et compilationEvaluation partielle et compilation•Analyses lexicales et syntaxiquesAnalyses lexicales et syntaxiques•Techniques d’analyse descendantesTechniques d’analyse descendantes•Techniques d’analyse ascendantesTechniques d’analyse ascendantes•YACCYACC•Analyse sémantiqueAnalyse sémantique•Environnement d’exécutionEnvironnement d’exécution•Génération de codeGénération de code•Optimisation de codeOptimisation de code

18 octobre 2007 Cours de compilation 7 - Intranet 135

C ’ e S t L a F i NC ’ e S t L a F i Nd U c O u R d U c O u R

s ! ! !s ! ! !

L e P r O j E tL e P r O j E tA p P o R t E r AA p P o R t E r Al A p R a T i Q u l A p R a T i Q u

E ! ! !E ! ! !