18 octobre 2007cours de compilation 7 - intranet1 cours de compilation génération de code...

135
18 octobre 2007 Cours de compilation 7 - Intranet 1 Cours de compilation Cours de compilation Génération de code Génération de code Optimisation de code Optimisation de code

Upload: madelaine-larue

Post on 03-Apr-2015

131 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation 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

Page 2: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation 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

Page 3: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation 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

Page 4: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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é,

Page 5: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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é.

Page 6: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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é.

Page 7: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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

Page 8: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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

Page 9: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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

Page 10: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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

Page 11: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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

Page 12: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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

Page 13: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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

Page 14: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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

Page 15: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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

Page 16: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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

Page 17: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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

Page 18: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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

Page 19: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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 » )

Page 20: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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 )

Page 21: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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 » )

Page 22: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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 )

Page 23: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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 )

Page 24: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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 » )

Page 25: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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 » )

Page 26: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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!

Page 27: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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 !

Page 28: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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é, . . . !

Page 29: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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

Page 30: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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 !

Page 31: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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 ! ! !

Page 32: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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 !

Page 33: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

18 octobre 2007 Cours de compilation 7 - Intranet 33

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

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

Page 34: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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é

Page 35: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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 !

Page 36: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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

Page 37: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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

Page 38: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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

Page 39: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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

Page 40: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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

Page 41: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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.

Page 42: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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’

Page 43: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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

Page 44: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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 !

Page 45: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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 !

Page 46: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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 =

Page 47: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de 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

Page 48: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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

Page 49: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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 )

Page 50: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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

Page 51: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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

Page 52: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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

Page 53: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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

Page 54: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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

Page 55: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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

Page 56: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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 !

Page 57: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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 ! ! !

Page 58: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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

Page 59: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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 !

Page 60: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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 !

Page 61: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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 » !

Page 62: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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 !

Page 63: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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 » !

Page 64: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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 !

Page 65: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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 :

Page 66: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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 !

Page 67: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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 !

Page 68: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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 !

Page 69: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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 !

Page 70: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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 !

Page 71: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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 :

Page 72: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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

Page 73: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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

Page 74: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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

Page 75: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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

Page 76: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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 :

Page 77: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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

Page 78: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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

Page 79: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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

Page 80: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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 !

Page 81: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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.

Page 82: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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 ) !

Page 83: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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.

Page 84: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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.

Page 85: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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 !

Page 86: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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

Page 87: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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, . . . ) !

Page 88: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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 !

Page 89: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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 !

Page 90: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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 !

Page 91: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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 !

Page 92: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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 ? » !

Page 93: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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.

Page 94: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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.

Page 95: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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

Page 96: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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

Page 97: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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 !

Page 98: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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.

Page 99: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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

Page 100: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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 .

Page 101: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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 .

Page 102: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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 .

Page 103: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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 !

Page 104: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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

Page 105: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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

Page 106: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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

Page 107: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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

Page 108: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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

Page 109: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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 : :

Page 110: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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 !

Page 111: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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 !

Page 112: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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 !

Page 113: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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 !

Page 114: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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 !

Page 115: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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

Page 116: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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)

Page 117: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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

Page 118: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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

Page 119: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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

Page 120: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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

Page 121: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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 :

Page 122: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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 :

Page 123: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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 :

Page 124: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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 :

Page 125: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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 :

Page 126: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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 :

Page 127: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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

Page 128: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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

Page 129: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation 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

. . .. . .

Page 130: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code

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

Page 131: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation 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

Page 132: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation 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

Page 133: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation 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

Page 134: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation 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

Page 135: 18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation 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 ! ! !