18 octobre 2007cours de compilation 7 - intranet1 cours de compilation génération de code...
TRANSCRIPT
18 octobre 2007 Cours de compilation 7 - Intranet 1
Cours de compilationCours de compilation
Génération de codeGénération de code
Optimisation de codeOptimisation de code
18 octobre 2007 Cours de compilation 7 - Intranet 2
Les grandes lignes du coursLes grandes lignes du cours
•Définitions de baseDéfinitions de base•Composition de compilateursComposition de compilateurs•L’environnement d’un compilateurL’environnement d’un compilateur•Evaluation partielle et compilationEvaluation partielle et compilation•Analyses lexicales et syntaxiquesAnalyses lexicales et syntaxiques•Techniques d’analyse descendantesTechniques d’analyse descendantes•Techniques d’analyse ascendantesTechniques d’analyse ascendantes•YACCYACC•Analyse sémantiqueAnalyse sémantique•Environnement d’exécutionEnvironnement d’exécution•Génération de codeGénération de code•Optimisation de codeOptimisation de code
18 octobre 2007 Cours de compilation 7 - Intranet 3
I N T R O D U C T I O NI N T R O D U C T I O N
18 octobre 2007 Cours de compilation 7 - Intranet 4
Génération de codeGénération de code----------------------------------------------------------------------------------------------------------------------------
----• Nous pouvons,Nous pouvons,
– soit, réécrire l’arbre de syntaxe abstraite dans soit, réécrire l’arbre de syntaxe abstraite dans un autre langage évolué,un autre langage évolué,
18 octobre 2007 Cours de compilation 7 - Intranet 5
Génération de codeGénération de code----------------------------------------------------------------------------------------------------------------------------
----• Nous pouvons,Nous pouvons,
– soit, réécrire l’arbre de syntaxe abstraite dans soit, réécrire l’arbre de syntaxe abstraite dans un autre langage évolué,un autre langage évolué,
– soit, écrire un code de type assembleur, plus soit, écrire un code de type assembleur, plus précisément un codeprécisément un code
• pour une machine à pile (virtuelle),pour une machine à pile (virtuelle),• ou pour un processeur donné.ou pour un processeur donné.
18 octobre 2007 Cours de compilation 7 - Intranet 6
Génération de codeGénération de code----------------------------------------------------------------------------------------------------------------------------
----• Nous pouvons,Nous pouvons,
– soit, réécrire l’arbre de syntaxe abstraite dans soit, réécrire l’arbre de syntaxe abstraite dans un autre langage évolué,un autre langage évolué,
– soit, écrire un code de type assembleur, plus soit, écrire un code de type assembleur, plus précisément un codeprécisément un code
• pour une machine à pile (virtuelle),pour une machine à pile (virtuelle),• ou pour un processeur donné.ou pour un processeur donné.
18 octobre 2007 Cours de compilation 7 - Intranet 7
M A C H I N EM A C H I N E
AA
P I L EP I L E
18 octobre 2007 Cours de compilation 7 - Intranet 8
Machine à pileMachine à pile----------------------------------------------------------------------------------------------------------------------------
----• Nous utilisons typiquement une notation post-Nous utilisons typiquement une notation post-
fixée.fixée.
Exemple :Exemple :
:=:=
xx ++
** yy
xx zz
18 octobre 2007 Cours de compilation 7 - Intranet 9
Machine à pileMachine à pile----------------------------------------------------------------------------------------------------------------------------
----• Nous utilisons typiquement une notation post-Nous utilisons typiquement une notation post-
fixée.fixée.
Exemple :Exemple :
:=:=
xx ++
** yy
xx zz
push @xpush @x
18 octobre 2007 Cours de compilation 7 - Intranet 10
Machine à pileMachine à pile----------------------------------------------------------------------------------------------------------------------------
----• Nous utilisons typiquement une notation post-Nous utilisons typiquement une notation post-
fixée.fixée.
Exemple :Exemple :
:=:=
xx ++
** yy
xx zz
push @xpush @xpush ypush y
18 octobre 2007 Cours de compilation 7 - Intranet 11
Machine à pileMachine à pile----------------------------------------------------------------------------------------------------------------------------
----• Nous utilisons typiquement une notation post-Nous utilisons typiquement une notation post-
fixée.fixée.
Exemple :Exemple :
:=:=
xx ++
** yy
xx zz
push @xpush @xpush ypush ypush zpush z
18 octobre 2007 Cours de compilation 7 - Intranet 12
Machine à pileMachine à pile----------------------------------------------------------------------------------------------------------------------------
----• Nous utilisons typiquement une notation post-Nous utilisons typiquement une notation post-
fixée.fixée.
Exemple :Exemple :
:=:=
xx ++
** yy
xx zz
push @xpush @xpush ypush ypush zpush zpush xpush x
18 octobre 2007 Cours de compilation 7 - Intranet 13
Machine à pileMachine à pile----------------------------------------------------------------------------------------------------------------------------
----• Nous utilisons typiquement une notation post-Nous utilisons typiquement une notation post-
fixée.fixée.
Exemple :Exemple :
:=:=
xx ++
** yy
xx zz
push @xpush @xpush ypush ypush zpush zpush xpush xmultmult
18 octobre 2007 Cours de compilation 7 - Intranet 14
Machine à pileMachine à pile----------------------------------------------------------------------------------------------------------------------------
----• Nous utilisons typiquement une notation post-Nous utilisons typiquement une notation post-
fixée.fixée.
Exemple :Exemple :
:=:=
xx ++
** yy
xx zz
push @xpush @xpush ypush ypush zpush zpush xpush xmultmultaddadd
18 octobre 2007 Cours de compilation 7 - Intranet 15
Machine à pileMachine à pile----------------------------------------------------------------------------------------------------------------------------
----• Nous utilisons typiquement une notation post-Nous utilisons typiquement une notation post-
fixée.fixée.
Exemple :Exemple :
:=:=
xx ++
** yy
xx zz
push @xpush @xpush ypush ypush zpush zpush xpush xmultmultaddaddsetset
18 octobre 2007 Cours de compilation 7 - Intranet 16
Machine à pileMachine à pile----------------------------------------------------------------------------------------------------------------------------
----• Voici les opérations et leurs effets sur la pile.Voici les opérations et leurs effets sur la pile.
– push xpush x . . .. . .
. . .. . .
xxdevientdevient
18 octobre 2007 Cours de compilation 7 - Intranet 17
Machine à pileMachine à pile----------------------------------------------------------------------------------------------------------------------------
----• Voici les opérations et leurs effets sur la pile.Voici les opérations et leurs effets sur la pile.
– push xpush x
– addadd
. . .. . .
. . .. . .
. . .. . .
. . .. . .
xx
aabb a + ba + b
devientdevient
devientdevient
18 octobre 2007 Cours de compilation 7 - Intranet 18
Machine à pileMachine à pile----------------------------------------------------------------------------------------------------------------------------
----• Voici les opérations et leurs effets sur la pile.Voici les opérations et leurs effets sur la pile.
– push xpush x
– addadd
– setset. . .. . .
. . .. . .
. . .. . .
. . .. . .
. . .. . .
. . .. . .
xx
aabb a + ba + b
valvaladradr
devientdevient
devientdevient
devientdevient + affectation+ affectation
18 octobre 2007 Cours de compilation 7 - Intranet 19
Machine à pileMachine à pile----------------------------------------------------------------------------------------------------------------------------
----• Détaillons quelques opérations de génération de Détaillons quelques opérations de génération de
code.code.
calcul_:= calcul_adr ( lhs )calcul_:= calcul_adr ( lhs )
calcul_val ( rhs )calcul_val ( rhs )
gencode ( « set » )gencode ( « set » )
18 octobre 2007 Cours de compilation 7 - Intranet 20
Machine à pileMachine à pile----------------------------------------------------------------------------------------------------------------------------
----• Détaillons quelques opérations de génération de Détaillons quelques opérations de génération de
code.code.
calcul_:= calcul_adr ( lhs )calcul_:= calcul_adr ( lhs )
calcul_val ( rhs )calcul_val ( rhs )
gencode ( « set » )gencode ( « set » )
calcul_adr ( lhs )calcul_adr ( lhs )
si lhs = var gencode ( « push » , @var )si lhs = var gencode ( « push » , @var )
18 octobre 2007 Cours de compilation 7 - Intranet 21
Machine à pileMachine à pile----------------------------------------------------------------------------------------------------------------------------
----• Détaillons quelques opérations de génération de Détaillons quelques opérations de génération de
code.code.
calcul_:= calcul_adr ( lhs )calcul_:= calcul_adr ( lhs )
calcul_val ( rhs )calcul_val ( rhs )
gencode ( « set » )gencode ( « set » )
calcul_adr ( lhs )calcul_adr ( lhs )
si lhs = var gencode ( « push » , @var )si lhs = var gencode ( « push » , @var )
si lhs = var [ind] calcul_val ( ind )si lhs = var [ind] calcul_val ( ind )
calcul_adr ( var )calcul_adr ( var )
gencode ( « add » )gencode ( « add » )
18 octobre 2007 Cours de compilation 7 - Intranet 22
Machine à pileMachine à pile----------------------------------------------------------------------------------------------------------------------------
----• Détaillons quelques opérations de génération de Détaillons quelques opérations de génération de
code.code.
calcul_val ( rhs )calcul_val ( rhs )
si rhs = cste gencode ( « push » , rhs )si rhs = cste gencode ( « push » , rhs )
18 octobre 2007 Cours de compilation 7 - Intranet 23
Machine à pileMachine à pile----------------------------------------------------------------------------------------------------------------------------
----• Détaillons quelques opérations de génération de Détaillons quelques opérations de génération de
code.code.
calcul_val ( rhs )calcul_val ( rhs )
si rhs = cste gencode ( « push » , rhs )si rhs = cste gencode ( « push » , rhs )
si lhs = var gencode ( « push » , var )si lhs = var gencode ( « push » , var )
18 octobre 2007 Cours de compilation 7 - Intranet 24
Machine à pileMachine à pile----------------------------------------------------------------------------------------------------------------------------
----• Détaillons quelques opérations de génération de Détaillons quelques opérations de génération de
code.code.
calcul_val ( rhs )calcul_val ( rhs )
si rhs = cste gencode ( « push » , rhs )si rhs = cste gencode ( « push » , rhs )
si lhs = var gencode ( « push » , var )si lhs = var gencode ( « push » , var )
si lhs = var [ind] calcul_adr ( lhs )si lhs = var [ind] calcul_adr ( lhs )
gencode ( « fetch » )gencode ( « fetch » )
18 octobre 2007 Cours de compilation 7 - Intranet 25
Machine à pileMachine à pile----------------------------------------------------------------------------------------------------------------------------
----• Détaillons quelques opérations de génération de Détaillons quelques opérations de génération de
code.code.
calcul_val ( rhs )calcul_val ( rhs )
si rhs = cste gencode ( « push » , rhs )si rhs = cste gencode ( « push » , rhs )
si lhs = var gencode ( « push » , var )si lhs = var gencode ( « push » , var )
si lhs = var [ind] calcul_adr ( lhs )si lhs = var [ind] calcul_adr ( lhs )
gencode ( « fetch » )gencode ( « fetch » )
si rhs = a op b calcul_val ( b )si rhs = a op b calcul_val ( b )
calcul_val ( a )calcul_val ( a )
gencode ( « add » )gencode ( « add » )
18 octobre 2007 Cours de compilation 7 - Intranet 26
Machine à pileMachine à pile----------------------------------------------------------------------------------------------------------------------------
----• Bilan :Bilan :
– La génération de code est très simple!La génération de code est très simple!
18 octobre 2007 Cours de compilation 7 - Intranet 27
Machine à pileMachine à pile----------------------------------------------------------------------------------------------------------------------------
----• Bilan :Bilan :
– La génération de code est très simple!La génération de code est très simple!
– Le code est portable à cause de la machine Le code est portable à cause de la machine virtuelle !virtuelle !
18 octobre 2007 Cours de compilation 7 - Intranet 28
Machine à pileMachine à pile----------------------------------------------------------------------------------------------------------------------------
----• Bilan :Bilan :
– La génération de code est très simple!La génération de code est très simple!
– Le code est portable à cause de la machine Le code est portable à cause de la machine virtuelle !virtuelle !
– Ce n’est pas très efficace, car :Ce n’est pas très efficace, car :
• Le code est interprété !Le code est interprété !
• Il est simulé !Il est simulé !
• Il n’est pas pipeliné, . . . !Il n’est pas pipeliné, . . . !
18 octobre 2007 Cours de compilation 7 - Intranet 29
U NU N
P R O C E S S E U RP R O C E S S E U R
E TE T
U NU N
O / SO / S
18 octobre 2007 Cours de compilation 7 - Intranet 30
Processeur donnéProcesseur donné----------------------------------------------------------------------------------------------------------------------------
----• Commentaire :Commentaire :
– Le code est n’est plus portable !Le code est n’est plus portable !
18 octobre 2007 Cours de compilation 7 - Intranet 31
Processeur donnéProcesseur donné----------------------------------------------------------------------------------------------------------------------------
----• Commentaire :Commentaire :
– Le code est n’est plus portable !Le code est n’est plus portable !
– Il est (très) effiace ! ! !Il est (très) effiace ! ! !
18 octobre 2007 Cours de compilation 7 - Intranet 32
Processeur donnéProcesseur donné----------------------------------------------------------------------------------------------------------------------------
----• Commentaire :Commentaire :
– Le code est n’est plus portable !Le code est n’est plus portable !
– Il est (très) effiace ! ! !Il est (très) effiace ! ! !
– C’est plus difficile, car :C’est plus difficile, car :
• Nous tenons compte d’un jeu d’instruction Nous tenons compte d’un jeu d’instruction donné !donné !
• Nous devons considérer le nombre de registres !Nous devons considérer le nombre de registres !
• Nous devons prendre en compte les primitives Nous devons prendre en compte les primitives et caractéristiques du système d’exploitation !et caractéristiques du système d’exploitation !
18 octobre 2007 Cours de compilation 7 - Intranet 33
Processeur donnéProcesseur donné----------------------------------------------------------------------------------------------------------------------------
----• Nous décomposons la traduction :Nous décomposons la traduction :
18 octobre 2007 Cours de compilation 7 - Intranet 34
Processeur donnéProcesseur donné----------------------------------------------------------------------------------------------------------------------------
----• Nous décomposons la traduction :Nous décomposons la traduction :
Syntaxe abstraiteSyntaxe abstraite
Code intermédiaireCode intermédiaire
Code processeur optimiséCode processeur optimisé
18 octobre 2007 Cours de compilation 7 - Intranet 35
Processeur donnéProcesseur donné----------------------------------------------------------------------------------------------------------------------------
----• Nous décomposons la traduction :Nous décomposons la traduction :
Syntaxe abstraiteSyntaxe abstraite
Code intermédiaireCode intermédiaire
Code processeur optimiséCode processeur optimisé
-- Proche du processeur Proche du processeur final !final !
-- Suffisamment générale Suffisamment générale pourpour permettre des permettre des optimisations !optimisations !
18 octobre 2007 Cours de compilation 7 - Intranet 36
Code 3Code 3--adressesadresses----------------------------------------------------------------------------------------------------------------------------
----• Code intermédiaire 3-adresses ( parfois 2- ) , Code intermédiaire 3-adresses ( parfois 2- ) ,
syntaxe :syntaxe :
(1) x <- y <op> z(1) x <- y <op> z
(2) x <- <op> y(2) x <- <op> y
(3) x <- y(3) x <- y
18 octobre 2007 Cours de compilation 7 - Intranet 37
Code 3Code 3--adressesadresses----------------------------------------------------------------------------------------------------------------------------
----• Code intermédiaire 3-adresses ( parfois 2- ) , Code intermédiaire 3-adresses ( parfois 2- ) ,
syntaxe :syntaxe :
(1) x <- y <op> z(1) x <- y <op> z
(2) x <- <op> y(2) x <- <op> y
(3) x <- y(3) x <- y
(4) goto L(4) goto L
(5) if x <op> y goto L(5) if x <op> y goto L
18 octobre 2007 Cours de compilation 7 - Intranet 38
Code 3Code 3--adressesadresses----------------------------------------------------------------------------------------------------------------------------
----• Code intermédiaire 3-adresses ( parfois 2- ) , Code intermédiaire 3-adresses ( parfois 2- ) ,
syntaxe :syntaxe :
(1) x <- y <op> z(1) x <- y <op> z
(2) x <- <op> y(2) x <- <op> y
(3) x <- y(3) x <- y
(4) goto L(4) goto L
(5) if x <op> y goto L(5) if x <op> y goto L
(6) param a_1(6) param a_1
. . .. . .
param a_kparam a_k
call f , kcall f , k
(7) return(7) return
18 octobre 2007 Cours de compilation 7 - Intranet 39
Code 3Code 3--adressesadresses----------------------------------------------------------------------------------------------------------------------------
----• Code intermédiaire 3-adresses ( parfois 2- ) , Code intermédiaire 3-adresses ( parfois 2- ) ,
syntaxe :syntaxe :
(1) x <- y <op> z (1) x <- y <op> z (8) x <- y [ z ](8) x <- y [ z ]
(2) x <- <op> y (2) x <- <op> y (9) x [ y ] <- z(9) x [ y ] <- z
(3) x <- y (3) x <- y (10) x <- &y(10) x <- &y
(4) goto L (4) goto L
(5) if x <op> y goto L (5) if x <op> y goto L
(6) param a_1(6) param a_1
. . .. . .
param a_kparam a_k
call f , kcall f , k
(7) return(7) return
18 octobre 2007 Cours de compilation 7 - Intranet 40
Code 3Code 3--adressesadresses----------------------------------------------------------------------------------------------------------------------------
----• Code intermédiaire 3-adresses ( parfois 2- ) , Code intermédiaire 3-adresses ( parfois 2- ) ,
syntaxe :syntaxe :
(1) x <- y <op> z (8) x <- y [ z ](1) x <- y <op> z (8) x <- y [ z ]
(2) x <- <op> y (9) x [ y ] <- z(2) x <- <op> y (9) x [ y ] <- z
(3) x <- y (10) x <- &y(3) x <- y (10) x <- &y
(4) goto L (4) goto L (11) x <- *y(11) x <- *y
(5) if x <op> y goto L (5) if x <op> y goto L (12) *x <- y(12) *x <- y
(6) param a_1(6) param a_1
. . .. . .
param a_kparam a_k
call f , kcall f , k
(7) return(7) return
18 octobre 2007 Cours de compilation 7 - Intranet 41
Code 3Code 3--adressesadresses----------------------------------------------------------------------------------------------------------------------------
----• Code intermédiaire 3-adresses ( parfois 2- ) , Code intermédiaire 3-adresses ( parfois 2- ) ,
syntaxe :syntaxe :
(1) x <- y <op> z (8) x <- y [ z ](1) x <- y <op> z (8) x <- y [ z ]
(2) x <- <op> y (9) x [ y ] <- z(2) x <- <op> y (9) x [ y ] <- z
(3) x <- y (10) x <- &y(3) x <- y (10) x <- &y
(4) goto L (11) x <- *y(4) goto L (11) x <- *y
(5) if x <op> y goto L (12) *x <- y(5) if x <op> y goto L (12) *x <- y
(6) param a_1(6) param a_1
. . .. . .
param a_kparam a_k
call f , kcall f , k
(7) return(7) return
Les instructions complexesLes instructions complexesdeviennent une séquencedeviennent une séquenced’instructions 3-adressesd’instructions 3-adressesqui utilisent des variablesqui utilisent des variablestemporaires.temporaires.
18 octobre 2007 Cours de compilation 7 - Intranet 42
Code 3Code 3--adressesadresses----------------------------------------------------------------------------------------------------------------------------
----• Code intermédiaire 3-adresses ( parfois 2- ) , Code intermédiaire 3-adresses ( parfois 2- ) ,
syntaxe :syntaxe :
(1) x <- y <op> z (8) x <- y [ z ](1) x <- y <op> z (8) x <- y [ z ]
(2) x <- <op> y (9) x [ y ] <- z(2) x <- <op> y (9) x [ y ] <- z
(3) x <- y (10) x <- &y(3) x <- y (10) x <- &y
(4) goto L (11) x <- *y(4) goto L (11) x <- *y
(5) if x <op> y goto L (12) *x <- y(5) if x <op> y goto L (12) *x <- y
(6) param a_1(6) param a_1
. . .. . .
param a_kparam a_k
call f , kcall f , k
(7) return(7) return
x = ( x + y ) * z =>x = ( x + y ) * z =>
t <- x + yt <- x + y
t’ <- t * zt’ <- t * z
x <- t’x <- t’
18 octobre 2007 Cours de compilation 7 - Intranet 43
G E N E R A T I O NG E N E R A T I O N
D ED E
C O D EC O D E
I N T E R M E D I A I R EI N T E R M E D I A I R E
18 octobre 2007 Cours de compilation 7 - Intranet 44
Génération de code intermédiaireGénération de code intermédiaire----------------------------------------------------------------------------------------------------------------------------
----• Pour toute expression E, nous auronsPour toute expression E, nous aurons
– E.code qui est le code qui calcule E ,E.code qui est le code qui calcule E ,– E.place qui est l’endroit où nous trouvons le E.place qui est l’endroit où nous trouvons le
résultat !résultat !
18 octobre 2007 Cours de compilation 7 - Intranet 45
Génération de code intermédiaireGénération de code intermédiaire----------------------------------------------------------------------------------------------------------------------------
----• Pour toute expression E, nous auronsPour toute expression E, nous aurons
– E.code qui est le code qui calcule E ,E.code qui est le code qui calcule E ,– E.place qui est l’endroit où nous trouvons le E.place qui est l’endroit où nous trouvons le
résultat !résultat !
• Pour une instruction S , nous n’aurons que Pour une instruction S , nous n’aurons que S.place !S.place !
18 octobre 2007 Cours de compilation 7 - Intranet 46
Génération de code intermédiaireGénération de code intermédiaire----------------------------------------------------------------------------------------------------------------------------
----• Pour toute expression E, nous auronsPour toute expression E, nous aurons
– E.code qui est le code qui calcule E ,E.code qui est le code qui calcule E ,– E.place qui est l’endroit où nous trouvons le E.place qui est l’endroit où nous trouvons le
résultat !résultat !
• Pour une instruction S , nous n’aurons que S.place !Pour une instruction S , nous n’aurons que S.place !
Si E = id : Si E = id : E.place = id.placeE.place = id.place
E.code = E.code =
18 octobre 2007 Cours de compilation 7 - Intranet 47
Génération de code intermédiaireGénération de code intermédiaire----------------------------------------------------------------------------------------------------------------------------
----• Pour toute expression E, nous auronsPour toute expression E, nous aurons
– E.code qui est le code qui calcule E ,E.code qui est le code qui calcule E ,– E.place qui est l’endroit où nous trouvons le résultat !E.place qui est l’endroit où nous trouvons le résultat !
• Pour une instruction S , nous n’aurons que S.place !Pour une instruction S , nous n’aurons que S.place !
Si E = id : Si E = id : E.place = id.placeE.place = id.place
E.code = E.code =
Si E = E op E :Si E = E op E :
E.place = newtemp ()E.place = newtemp ()
E.code = E .code ; E .code ;E.code = E .code ; E .code ;
gencode ( E.place « <- »gencode ( E.place « <- »
E .place op E .place )E .place op E .place )
11
11
22
22
11 22
18 octobre 2007 Cours de compilation 7 - Intranet 48
Génération de code intermédiaireGénération de code intermédiaire----------------------------------------------------------------------------------------------------------------------------
----• Pour toute expression E, nous auronsPour toute expression E, nous aurons
– E.code qui est le code qui calcule E ,E.code qui est le code qui calcule E ,– E.place qui est l’endroit où nous trouvons le résultat !E.place qui est l’endroit où nous trouvons le résultat !
• Pour une instruction S , nous n’aurons que S.place !Pour une instruction S , nous n’aurons que S.place !
Si E = id : Si E = id : E.place = id.placeE.place = id.place
E.code = E.code =
Si E = E op E :Si E = E op E :
E.place = newtemp ()E.place = newtemp ()
E.code = E .code ; E .code ;E.code = E .code ; E .code ;
gencode ( E.place « <- »gencode ( E.place « <- »
E .place op E .place )E .place op E .place )
11
11
22
22
11 22
18 octobre 2007 Cours de compilation 7 - Intranet 49
Génération de code intermédiaireGénération de code intermédiaire----------------------------------------------------------------------------------------------------------------------------
----• Pour toute expression E, nous auronsPour toute expression E, nous aurons
– E.code qui est le code qui calcule E ,E.code qui est le code qui calcule E ,– E.place qui est l’endroit où nous trouvons le E.place qui est l’endroit où nous trouvons le
résultat !résultat !
• Pour une instruction S , nous n’aurons que S.place !Pour une instruction S , nous n’aurons que S.place !
Si S qui est id := E :Si S qui est id := E :
S.code = E.code ;S.code = E.code ;
gencode ( id.place « <- » E.place )gencode ( id.place « <- » E.place )
18 octobre 2007 Cours de compilation 7 - Intranet 50
Génération de code intermédiaireGénération de code intermédiaire----------------------------------------------------------------------------------------------------------------------------
----• Pour toute expression E, nous auronsPour toute expression E, nous aurons
– E.code qui est le code qui calcule E ,E.code qui est le code qui calcule E ,– E.place qui est l’endroit où nous trouvons le E.place qui est l’endroit où nous trouvons le
résultat !résultat !
• Pour une instruction S , nous n’aurons que S.place !Pour une instruction S , nous n’aurons que S.place !
Si S qui est id := E :Si S qui est id := E :
S.code = E.code ;S.code = E.code ;
gencode ( id.place « <- » E.place )gencode ( id.place « <- » E.place )
Si S est S ; S :Si S est S ; S :
S.code = S .code ; S .codeS.code = S .code ; S .code
11 22
2211
18 octobre 2007 Cours de compilation 7 - Intranet 51
Génération de code intermédiaireGénération de code intermédiaire----------------------------------------------------------------------------------------------------------------------------
----• Pour toute expression E, nous auronsPour toute expression E, nous aurons
– E.code qui est le code qui calcule E ,E.code qui est le code qui calcule E ,– E.place qui est l’endroit où nous trouvons le E.place qui est l’endroit où nous trouvons le
résultat !résultat !
• Pour une instruction S , nous n’aurons que S.place !Pour une instruction S , nous n’aurons que S.place !
Si S est while E do S :Si S est while E do S :
Soient Soient S.begin = newlabel ()S.begin = newlabel () et et S.after = newlabel ()S.after = newlabel ()
11
18 octobre 2007 Cours de compilation 7 - Intranet 52
Génération de code intermédiaireGénération de code intermédiaire----------------------------------------------------------------------------------------------------------------------------
----• Pour toute expression E, nous auronsPour toute expression E, nous aurons
– E.code qui est le code qui calcule E ,E.code qui est le code qui calcule E ,– E.place qui est l’endroit où nous trouvons le résultat !E.place qui est l’endroit où nous trouvons le résultat !
• Pour une instruction S , nous n’aurons que S.place !Pour une instruction S , nous n’aurons que S.place !
Si S est while E do S :Si S est while E do S :
Soient Soient S.begin = newlabel ()S.begin = newlabel () et et S.after = newlabel ()S.after = newlabel ()
S.code = S.code =
gencode ( « S.begin: » ) ; E.code ;gencode ( « S.begin: » ) ; E.code ;
11
18 octobre 2007 Cours de compilation 7 - Intranet 53
Génération de code intermédiaireGénération de code intermédiaire----------------------------------------------------------------------------------------------------------------------------
----• Pour toute expression E, nous auronsPour toute expression E, nous aurons
– E.code qui est le code qui calcule E ,E.code qui est le code qui calcule E ,– E.place qui est l’endroit où nous trouvons le résultat !E.place qui est l’endroit où nous trouvons le résultat !
• Pour une instruction S , nous n’aurons que S.place !Pour une instruction S , nous n’aurons que S.place !
Si S est while E do S :Si S est while E do S :
Soient Soient S.begin = newlabel ()S.begin = newlabel () et et S.after = newlabel ()S.after = newlabel ()
S.code = S.code =
gencode ( « S.begin: » ) ; E.code ;gencode ( « S.begin: » ) ; E.code ;
gencode ( « if » E.place « =0 goto » S.after ) ;gencode ( « if » E.place « =0 goto » S.after ) ;
11
18 octobre 2007 Cours de compilation 7 - Intranet 54
Génération de code intermédiaireGénération de code intermédiaire----------------------------------------------------------------------------------------------------------------------------
----• Pour toute expression E, nous auronsPour toute expression E, nous aurons
– E.code qui est le code qui calcule E ,E.code qui est le code qui calcule E ,– E.place qui est l’endroit où nous trouvons le résultat !E.place qui est l’endroit où nous trouvons le résultat !
• Pour une instruction S , nous n’aurons que S.place !Pour une instruction S , nous n’aurons que S.place !
Si S est while E do S :Si S est while E do S :
Soient Soient S.begin = newlabel ()S.begin = newlabel () et et S.after = newlabel ()S.after = newlabel ()
S.code = S.code =
gencode ( « S.begin: » ) ; E.code ;gencode ( « S.begin: » ) ; E.code ;
gencode ( « if » E.place « =0 goto » S.after ) ;gencode ( « if » E.place « =0 goto » S.after ) ;
S .code ;S .code ;
gencodegencode ( « goto » S.begin ) ;( « goto » S.begin ) ;
11
11
18 octobre 2007 Cours de compilation 7 - Intranet 55
Génération de code intermédiaireGénération de code intermédiaire----------------------------------------------------------------------------------------------------------------------------
----• Pour toute expression E, nous auronsPour toute expression E, nous aurons
– E.code qui est le code qui calcule E ,E.code qui est le code qui calcule E ,– E.place qui est l’endroit où nous trouvons le résultat !E.place qui est l’endroit où nous trouvons le résultat !
• Pour une instruction S , nous n’aurons que S.place !Pour une instruction S , nous n’aurons que S.place !
Si S est while E do S :Si S est while E do S :
Soient Soient S.begin = newlabel ()S.begin = newlabel () et et S.after = newlabel ()S.after = newlabel ()
S.code = S.code =
gencode ( « S.begin: » ) ; E.code ;gencode ( « S.begin: » ) ; E.code ;
gencode ( « if » E.place « =0 goto » S.after ) ;gencode ( « if » E.place « =0 goto » S.after ) ;
S .code ;S .code ;
gencode ( « goto » S.begin ) ;gencode ( « goto » S.begin ) ;
gencode ( « S.after: » ) ;gencode ( « S.after: » ) ;
11
11
18 octobre 2007 Cours de compilation 7 - Intranet 56
Génération de code intermédiaireGénération de code intermédiaire----------------------------------------------------------------------------------------------------------------------------
----• Pour toute expression E, nous auronsPour toute expression E, nous aurons
– E.code qui est le code qui calcule E ,E.code qui est le code qui calcule E ,– E.place qui est l’endroit où nous trouvons le E.place qui est l’endroit où nous trouvons le
résultat !résultat !
• Pour une instruction S , nous n’aurons que S.place !Pour une instruction S , nous n’aurons que S.place !
• Cette générationCette génération
– utilise beaucoup de temporaires,utilise beaucoup de temporaires,– utilise beaucoup de copies de variable à variable !utilise beaucoup de copies de variable à variable !
18 octobre 2007 Cours de compilation 7 - Intranet 57
Génération de code intermédiaireGénération de code intermédiaire----------------------------------------------------------------------------------------------------------------------------
----• Pour toute expression E, nous auronsPour toute expression E, nous aurons
– E.code qui est le code qui calcule E ,E.code qui est le code qui calcule E ,– E.place qui est l’endroit où nous trouvons le E.place qui est l’endroit où nous trouvons le
résultat !résultat !
• Pour une instruction S , nous n’aurons que S.place !Pour une instruction S , nous n’aurons que S.place !
• Cette générationCette génération
– utilise beaucoup de temporaires,utilise beaucoup de temporaires,– utilise beaucoup de copies de variable à variable !utilise beaucoup de copies de variable à variable !
• Nous nous en occuperont dans la suite !Nous nous en occuperont dans la suite !
• Pour l’instant, nous avons un code correct ! ! !Pour l’instant, nous avons un code correct ! ! !
18 octobre 2007 Cours de compilation 7 - Intranet 58
O P T I M I S A T I O NO P T I M I S A T I O N
D UD U
C O D EC O D E
I N T E R M E D I A I R EI N T E R M E D I A I R E
18 octobre 2007 Cours de compilation 7 - Intranet 59
Optimisation du code intermédiaireOptimisation du code intermédiaire----------------------------------------------------------------------------------------------------------------------------
----• Il fautIl faut
– tenir compte du nombre de registres,tenir compte du nombre de registres,– veiller à garder le pipeline plein !veiller à garder le pipeline plein !
18 octobre 2007 Cours de compilation 7 - Intranet 60
Optimisation du code intermédiaireOptimisation du code intermédiaire----------------------------------------------------------------------------------------------------------------------------
----• Il fautIl faut
– tenir compte du nombre de registres,tenir compte du nombre de registres,– veiller à garder le pipeline plein !veiller à garder le pipeline plein !
• L’optimisation du code intermédiaireL’optimisation du code intermédiaire
– redresse les imperfections du code intermédiaire,redresse les imperfections du code intermédiaire,– redresse les imperfections du code utilisateur !redresse les imperfections du code utilisateur !
18 octobre 2007 Cours de compilation 7 - Intranet 61
Optimisation du code intermédiaireOptimisation du code intermédiaire----------------------------------------------------------------------------------------------------------------------------
----• Il fautIl faut
– tenir compte du nombre de registres,tenir compte du nombre de registres,– veiller à garder le pipeline plein !veiller à garder le pipeline plein !
• L’optimisation du code intermédiaireL’optimisation du code intermédiaire
– redresse les imperfections du code intermédiaire,redresse les imperfections du code intermédiaire,– redresse les imperfections du code utilisateur !redresse les imperfections du code utilisateur !
• La suite des instructions est découpée en de La suite des instructions est découpée en de séquences appelées « blocs fondamentaux » !séquences appelées « blocs fondamentaux » !
18 octobre 2007 Cours de compilation 7 - Intranet 62
Optimisation du code intermédiaireOptimisation du code intermédiaire----------------------------------------------------------------------------------------------------------------------------
----• Il fautIl faut
– tenir compte du nombre de registres,tenir compte du nombre de registres,– veiller à garder le pipeline plein !veiller à garder le pipeline plein !
• L’optimisation du code intermédiaireL’optimisation du code intermédiaire
– redresse les imperfections du code intermédiaire,redresse les imperfections du code intermédiaire,– redresse les imperfections du code utilisateur !redresse les imperfections du code utilisateur !
• La suite des instructions est découpée en de La suite des instructions est découpée en de séquences appelées « blocs fondamentaux » !séquences appelées « blocs fondamentaux » !
• Un « bloc fondamental » correspond à une séquence Un « bloc fondamental » correspond à une séquence d’instructions exécutées de la première à la dernière d’instructions exécutées de la première à la dernière sans interruption !sans interruption !
18 octobre 2007 Cours de compilation 7 - Intranet 63
Le bloc fondamentalLe bloc fondamental----------------------------------------------------------------------------------------------------------------------------
----• Il faut d’abord identifier les « têtes de bloc ». Ce Il faut d’abord identifier les « têtes de bloc ». Ce
sont :sont :
– la première instruction du programme,la première instruction du programme,– toute instruction atteinte par un « goto » ,toute instruction atteinte par un « goto » ,– toute instruction suivant un « goto » ,toute instruction suivant un « goto » ,– sachant que les fonctions et procédures sont sachant que les fonctions et procédures sont
assimilées à des « goto » !assimilées à des « goto » !
18 octobre 2007 Cours de compilation 7 - Intranet 64
Le bloc fondamentalLe bloc fondamental----------------------------------------------------------------------------------------------------------------------------
----• Il faut d’abord identifier les « têtes de bloc ». Ce sont :Il faut d’abord identifier les « têtes de bloc ». Ce sont :
– la première instruction du programme,la première instruction du programme,– toute instruction atteinte par un « goto » ,toute instruction atteinte par un « goto » ,– toute instruction suivant un « goto » ,toute instruction suivant un « goto » ,– sachant que les fonctions et procédures sont sachant que les fonctions et procédures sont
assimilées à des « goto » !assimilées à des « goto » !
• Un « bloc fondamental » estUn « bloc fondamental » est
– une tête de bloc,une tête de bloc,– et toutes les instructions qui la suivent jusqu’àet toutes les instructions qui la suivent jusqu’à
• la fin du programme,la fin du programme,• ou la prochaine tête de bloc, non incluse !ou la prochaine tête de bloc, non incluse !
18 octobre 2007 Cours de compilation 7 - Intranet 65
Le bloc fondamentalLe bloc fondamental----------------------------------------------------------------------------------------------------------------------------
----S.begin :S.begin :
if . . . goto S.afterif . . . goto S.after
goto S.begingoto S.begin
S.after : S.after :
18 octobre 2007 Cours de compilation 7 - Intranet 66
Le bloc fondamentalLe bloc fondamental----------------------------------------------------------------------------------------------------------------------------
----S.begin :S.begin :
if . . . goto S.afterif . . . goto S.after
goto S.begingoto S.begin
S.after : S.after : Têtes de bloc !Têtes de bloc !
18 octobre 2007 Cours de compilation 7 - Intranet 67
Le bloc fondamentalLe bloc fondamental----------------------------------------------------------------------------------------------------------------------------
----S.begin :S.begin :
if . . . goto S.afterif . . . goto S.after
goto S.begingoto S.begin
S.after : S.after : Têtes de bloc !Têtes de bloc !
Blocs !Blocs !
18 octobre 2007 Cours de compilation 7 - Intranet 68
Le bloc fondamentalLe bloc fondamental----------------------------------------------------------------------------------------------------------------------------
----• Le graphe de dépendance des blocs :Le graphe de dépendance des blocs :
– Son objectif est de dire comment les blocs se Son objectif est de dire comment les blocs se suivent potentiellement !suivent potentiellement !
18 octobre 2007 Cours de compilation 7 - Intranet 69
Le bloc fondamentalLe bloc fondamental----------------------------------------------------------------------------------------------------------------------------
----• Le graphe de dépendance des blocs :Le graphe de dépendance des blocs :
– Son objectif est de dire comment les blocs se Son objectif est de dire comment les blocs se suivent potentiellement !suivent potentiellement !
– C’est un graphe orienté !C’est un graphe orienté !– Les sommets correspondent aux blocs !Les sommets correspondent aux blocs !– Les dépendances correspondent aux arcs !Les dépendances correspondent aux arcs !
18 octobre 2007 Cours de compilation 7 - Intranet 70
Le bloc fondamentalLe bloc fondamental----------------------------------------------------------------------------------------------------------------------------
----• Le graphe de dépendance des blocs :Le graphe de dépendance des blocs :
– Son objectif est de dire comment les blocs se Son objectif est de dire comment les blocs se suivent potentiellement !suivent potentiellement !
– C’est un graphe orienté !C’est un graphe orienté !– Les sommets correspondent aux blocs !Les sommets correspondent aux blocs !– Les dépendances correspondent aux arcs !Les dépendances correspondent aux arcs !
• Nous avons A Nous avons A --> B si> B si
– la tête de B est atteinte par un goto depuis A,la tête de B est atteinte par un goto depuis A,
– B suit séquentiellement A et celui-ci se termine B suit séquentiellement A et celui-ci se termine par un goto conditionnel !par un goto conditionnel !
18 octobre 2007 Cours de compilation 7 - Intranet 71
Le bloc fondamentalLe bloc fondamental----------------------------------------------------------------------------------------------------------------------------
----S.begin :S.begin :
if . . . goto S.afterif . . . goto S.after
goto S.begingoto S.begin
S.after : S.after :
18 octobre 2007 Cours de compilation 7 - Intranet 72
Le bloc fondamentalLe bloc fondamental----------------------------------------------------------------------------------------------------------------------------
----S.begin :S.begin :
if . . . goto S.afterif . . . goto S.after
goto S.begingoto S.begin
S.after : S.after :
11
22
33
18 octobre 2007 Cours de compilation 7 - Intranet 73
Le bloc fondamentalLe bloc fondamental----------------------------------------------------------------------------------------------------------------------------
----S.begin :S.begin :
if . . . goto S.afterif . . . goto S.after
goto S.begingoto S.begin
S.after : S.after :
11
22
33
18 octobre 2007 Cours de compilation 7 - Intranet 74
Le bloc fondamentalLe bloc fondamental----------------------------------------------------------------------------------------------------------------------------
----S.begin :S.begin :
if . . . goto S.afterif . . . goto S.after
goto S.begingoto S.begin
S.after : S.after :
11
22
33
18 octobre 2007 Cours de compilation 7 - Intranet 75
Le bloc fondamentalLe bloc fondamental----------------------------------------------------------------------------------------------------------------------------
----S.begin :S.begin :
if . . . goto S.afterif . . . goto S.after
goto S.begingoto S.begin
S.after : S.after :
11
22
33
18 octobre 2007 Cours de compilation 7 - Intranet 76
Le bloc fondamentalLe bloc fondamental----------------------------------------------------------------------------------------------------------------------------
----• Quelques optimisations élémentaires dans un bloc :Quelques optimisations élémentaires dans un bloc :
18 octobre 2007 Cours de compilation 7 - Intranet 77
Le bloc fondamentalLe bloc fondamental----------------------------------------------------------------------------------------------------------------------------
----• Quelques optimisations élémentaires dans un bloc :Quelques optimisations élémentaires dans un bloc :
– Elimination de sous-expressions communes.Elimination de sous-expressions communes.
a <- b + ca <- b + c
b <- a – db <- a – d
c <- b + cc <- b + c
d <- a - dd <- a - d
18 octobre 2007 Cours de compilation 7 - Intranet 78
Le bloc fondamentalLe bloc fondamental----------------------------------------------------------------------------------------------------------------------------
----• Quelques optimisations élémentaires dans un bloc :Quelques optimisations élémentaires dans un bloc :
– Elimination de sous-expressions communes.Elimination de sous-expressions communes.
a <- b + ca <- b + c
b <- a – db <- a – d
c <- b + cc <- b + c
d <- a - dd <- a - d
18 octobre 2007 Cours de compilation 7 - Intranet 79
Le bloc fondamentalLe bloc fondamental----------------------------------------------------------------------------------------------------------------------------
----• Quelques optimisations élémentaires dans un bloc :Quelques optimisations élémentaires dans un bloc :
– Elimination de sous-expressions communes.Elimination de sous-expressions communes.
a <- b + ca <- b + c
b <- a – db <- a – d
c <- b + cc <- b + c
d <- a - dd <- a - d
a <- b + ca <- b + c
b <- a – db <- a – d
c <- b + cc <- b + c
d <- d <- bb
18 octobre 2007 Cours de compilation 7 - Intranet 80
Le bloc fondamentalLe bloc fondamental----------------------------------------------------------------------------------------------------------------------------
----• Quelques optimisations élémentaires dans un bloc :Quelques optimisations élémentaires dans un bloc :
– Elimination de sous-expressions communes.Elimination de sous-expressions communes.
a <- b + ca <- b + c
b <- a – db <- a – d
c <- b + cc <- b + c
d <- a - dd <- a - d
a <- b + ca <- b + c
b <- a – db <- a – d
c <- b + cc <- b + c
d <- d <- bb
La valeur de b change entre les deux expressions !La valeur de b change entre les deux expressions !
18 octobre 2007 Cours de compilation 7 - Intranet 81
Le bloc fondamentalLe bloc fondamental----------------------------------------------------------------------------------------------------------------------------
----• Quelques optimisations élémentaires dans un bloc :Quelques optimisations élémentaires dans un bloc :
– Elimination de sous-expressions communes.Elimination de sous-expressions communes.
– Elimination de code mort.Elimination de code mort.
18 octobre 2007 Cours de compilation 7 - Intranet 82
Le bloc fondamentalLe bloc fondamental----------------------------------------------------------------------------------------------------------------------------
----• Quelques optimisations élémentaires dans un bloc :Quelques optimisations élémentaires dans un bloc :
– Elimination de sous-expressions communes.Elimination de sous-expressions communes.
– Elimination de code mort.Elimination de code mort.
• Toute affectation de « variable du Toute affectation de « variable du compilateur » ( temporaire ) qui n’est pas compilateur » ( temporaire ) qui n’est pas utilisée dans la suite du bloc !utilisée dans la suite du bloc !
• Toute « variable locale » dont on sait qu’elle Toute « variable locale » dont on sait qu’elle n’est pas utilisée dans la suite ( il faut plus n’est pas utilisée dans la suite ( il faut plus d’informations ) !d’informations ) !
18 octobre 2007 Cours de compilation 7 - Intranet 83
Le bloc fondamentalLe bloc fondamental----------------------------------------------------------------------------------------------------------------------------
----• Quelques optimisations élémentaires dans un bloc :Quelques optimisations élémentaires dans un bloc :
– Elimination de sous-expressions communes.Elimination de sous-expressions communes.
– Elimination de code mort.Elimination de code mort.
– Renommage des variables temporaires, qui Renommage des variables temporaires, qui peuvent de ce fait devenir des registres.peuvent de ce fait devenir des registres.
18 octobre 2007 Cours de compilation 7 - Intranet 84
Le bloc fondamentalLe bloc fondamental----------------------------------------------------------------------------------------------------------------------------
----• Quelques optimisations élémentaires dans un bloc :Quelques optimisations élémentaires dans un bloc :
– Elimination de sous-expressions communes.Elimination de sous-expressions communes.
– Elimination de code mort.Elimination de code mort.
– Renommage des variables temporaires, qui Renommage des variables temporaires, qui peuvent de ce fait devenir des registres. peuvent de ce fait devenir des registres.
– Echange de l’ordre des calculs, si les Echange de l’ordre des calculs, si les dépendances entre les instructions le dépendances entre les instructions le permettent.permettent.
18 octobre 2007 Cours de compilation 7 - Intranet 85
Le bloc fondamentalLe bloc fondamental----------------------------------------------------------------------------------------------------------------------------
----• Quelques optimisations élémentaires dans un bloc :Quelques optimisations élémentaires dans un bloc :
– Elimination de sous-expressions communes.Elimination de sous-expressions communes.
– Elimination de code mort.Elimination de code mort.
– Renommage des variables temporaires, qui Renommage des variables temporaires, qui peuvent de ce fait devenir des registres. peuvent de ce fait devenir des registres.
– Echange de l’ordre des calculs, si les Echange de l’ordre des calculs, si les dépendances entre les instructions le permettent.dépendances entre les instructions le permettent.
• Ces transformations sont possibles parce que le bloc Ces transformations sont possibles parce que le bloc est exécuté intégralement et sans interruption !est exécuté intégralement et sans interruption !
18 octobre 2007 Cours de compilation 7 - Intranet 86
A N A L Y S EA N A L Y S E
D E L AD E L A
D U R E E D ED U R E E D E
V I E D E SV I E D E S
V A R I A B L E SV A R I A B L E S
18 octobre 2007 Cours de compilation 7 - Intranet 87
Durée de vie des variablesDurée de vie des variables----------------------------------------------------------------------------------------------------------------------------
----• Il est important de savoir à partir de quand une Il est important de savoir à partir de quand une
variable n’est plus utilisée ( n’occupe donc plus de variable n’est plus utilisée ( n’occupe donc plus de registre, . . . ) !registre, . . . ) !
18 octobre 2007 Cours de compilation 7 - Intranet 88
Durée de vie des variablesDurée de vie des variables----------------------------------------------------------------------------------------------------------------------------
----• Il est important de savoir à partir de quand une Il est important de savoir à partir de quand une
variable n’est plus utilisée ( n’occupe donc plus de variable n’est plus utilisée ( n’occupe donc plus de registre, . . . ) !registre, . . . ) !
– Pour les variables du compilateur c’est facile à Pour les variables du compilateur c’est facile à savoir !savoir !
18 octobre 2007 Cours de compilation 7 - Intranet 89
Durée de vie des variablesDurée de vie des variables----------------------------------------------------------------------------------------------------------------------------
----• Il est important de savoir à partir de quand une Il est important de savoir à partir de quand une
variable n’est plus utilisée ( n’occupe donc plus de variable n’est plus utilisée ( n’occupe donc plus de registre, . . . ) !registre, . . . ) !
– Pour les variables du compilateur c’est facile à Pour les variables du compilateur c’est facile à savoir !savoir !
– Pour les variables de l’utilisateur qui sont Pour les variables de l’utilisateur qui sont locales, nous pourrons faire des choses !locales, nous pourrons faire des choses !
18 octobre 2007 Cours de compilation 7 - Intranet 90
Durée de vie des variablesDurée de vie des variables----------------------------------------------------------------------------------------------------------------------------
----• Il est important de savoir à partir de quand une Il est important de savoir à partir de quand une
variable n’est plus utilisée ( n’occupe donc plus de variable n’est plus utilisée ( n’occupe donc plus de registre, . . . ) !registre, . . . ) !
– Pour les variables du compilateur c’est facile à Pour les variables du compilateur c’est facile à savoir !savoir !
– Pour les variables de l’utilisateur qui sont Pour les variables de l’utilisateur qui sont locales, nous pourrons faire des choses !locales, nous pourrons faire des choses !
– Pour les variables de l’utilisateur qui sont Pour les variables de l’utilisateur qui sont globales, nous ne pouvons en gros rien faire !globales, nous ne pouvons en gros rien faire !
18 octobre 2007 Cours de compilation 7 - Intranet 91
Durée de vie des variablesDurée de vie des variables----------------------------------------------------------------------------------------------------------------------------
----• Il est important de savoir à partir de quand une Il est important de savoir à partir de quand une
variable n’est plus utilisée ( n’occupe donc plus de variable n’est plus utilisée ( n’occupe donc plus de registre, . . . ) !registre, . . . ) !
– Pour les variables du compilateur c’est facile à Pour les variables du compilateur c’est facile à savoir !savoir !
– Pour les variables de l’utilisateur qui sont Pour les variables de l’utilisateur qui sont locales, nous pourrons faire des choses !locales, nous pourrons faire des choses !
– Pour les variables de l’utilisateur qui sont Pour les variables de l’utilisateur qui sont globales, nous ne pouvons en gros rien faire !globales, nous ne pouvons en gros rien faire !
18 octobre 2007 Cours de compilation 7 - Intranet 92
Durée de vie des variablesDurée de vie des variables----------------------------------------------------------------------------------------------------------------------------
----• Il est important de savoir à partir de quand une variable Il est important de savoir à partir de quand une variable
n’est plus utilisée ( n’occupe donc plus de n’est plus utilisée ( n’occupe donc plus de registre, . . . ) !registre, . . . ) !
– Pour les variables du compilateur c’est facile à savoir Pour les variables du compilateur c’est facile à savoir !!
– Pour les variables de l’utilisateur qui sont locales, Pour les variables de l’utilisateur qui sont locales, nous pourrons faire des choses !nous pourrons faire des choses !
– Pour les variables de l’utilisateur qui sont globales, Pour les variables de l’utilisateur qui sont globales, nous ne pouvons en gros rien faire !nous ne pouvons en gros rien faire !
• Nous voulons savoir Nous voulons savoir
– « qui définit quoi ? » ,« qui définit quoi ? » ,
– « qui utilise quoi ? » !« qui utilise quoi ? » !
18 octobre 2007 Cours de compilation 7 - Intranet 93
Durée de vie des variablesDurée de vie des variables----------------------------------------------------------------------------------------------------------------------------
----• Au niveau d’un bloc, nous pouvons définirAu niveau d’un bloc, nous pouvons définir
– use ( bloc ) , resp. def ( bloc ) , qui est use ( bloc ) , resp. def ( bloc ) , qui est l’ensemble des variables lues, resp. écrites, par l’ensemble des variables lues, resp. écrites, par ce bloc.ce bloc.
18 octobre 2007 Cours de compilation 7 - Intranet 94
Durée de vie des variablesDurée de vie des variables----------------------------------------------------------------------------------------------------------------------------
----• Au niveau d’un bloc, nous pouvons définirAu niveau d’un bloc, nous pouvons définir
– use ( bloc ) , resp. def ( bloc ) , qui est use ( bloc ) , resp. def ( bloc ) , qui est l’ensemble des variables lues, resp. écrites, par l’ensemble des variables lues, resp. écrites, par ce bloc.ce bloc.
– Use ( bloc ) , resp. Def ( bloc ) , qui est Use ( bloc ) , resp. Def ( bloc ) , qui est l’ensemble des variables lues, resp. écrites, par l’ensemble des variables lues, resp. écrites, par ce bloc ou un de ses successeurs.ce bloc ou un de ses successeurs.
18 octobre 2007 Cours de compilation 7 - Intranet 95
Durée de vie des variablesDurée de vie des variables----------------------------------------------------------------------------------------------------------------------------
----• Au niveau d’un bloc, nous pouvons définirAu niveau d’un bloc, nous pouvons définir
– use ( bloc ) , resp. def ( bloc ) , qui est l’ensemble use ( bloc ) , resp. def ( bloc ) , qui est l’ensemble des variables lues, resp. écrites, par ce bloc.des variables lues, resp. écrites, par ce bloc.
– Use ( bloc ) , resp. Def ( bloc ) , qui est Use ( bloc ) , resp. Def ( bloc ) , qui est l’ensemble des variables lues, resp. écrites, par ce l’ensemble des variables lues, resp. écrites, par ce bloc ou un de ses successeurs.bloc ou un de ses successeurs.
• Une autre idée : « next_use » .Une autre idée : « next_use » .
i : x <- . . .i : x <- . . .
x <- . . .x <- . . .
. . . <- . . . x . . .. . . <- . . . x . . .
j : . . . <- . . . x . . .j : . . . <- . . . x . . .next_use ( i ) = jnext_use ( i ) = j
18 octobre 2007 Cours de compilation 7 - Intranet 96
Durée de vie des variablesDurée de vie des variables----------------------------------------------------------------------------------------------------------------------------
----• A titre d’illustration, nous associons à une variableA titre d’illustration, nous associons à une variable
– live live ouou live live
– no-use no-use ouou un numéro d’instruction un numéro d’instruction
18 octobre 2007 Cours de compilation 7 - Intranet 97
Durée de vie des variablesDurée de vie des variables----------------------------------------------------------------------------------------------------------------------------
----• A titre d’illustration, nous associons à une variableA titre d’illustration, nous associons à une variable
– live live ouou live live
– no-use no-use ouou un numéro d’instruction un numéro d’instruction
• Nous initialisons les états de variables et nous Nous initialisons les états de variables et nous parcourons le programme à l’envers !parcourons le programme à l’envers !
18 octobre 2007 Cours de compilation 7 - Intranet 98
Durée de vie des variablesDurée de vie des variables----------------------------------------------------------------------------------------------------------------------------
----• A titre d’illustration, nous associons à une variableA titre d’illustration, nous associons à une variable
– live live ouou live live
– no-use no-use ouou un numéro d’instruction un numéro d’instruction
• Nous initialisons les états de variables et nous Nous initialisons les états de variables et nous parcourons le programme à l’envers !parcourons le programme à l’envers !
• Initialisation :Initialisation :
– Toutes les variables : no-useToutes les variables : no-use– Les variables globales : liveLes variables globales : live– Les variables locales et temporaires :Les variables locales et temporaires :
• live , si elles sont lues dans un bloc successeur,live , si elles sont lues dans un bloc successeur,• live , sinon.live , sinon.
18 octobre 2007 Cours de compilation 7 - Intranet 99
Durée de vie des variablesDurée de vie des variables----------------------------------------------------------------------------------------------------------------------------
----• A titre d’illustration, nous associons à une variableA titre d’illustration, nous associons à une variable
– live live ouou live live
– no-use no-use ouou un numéro d’instruction un numéro d’instruction
• Nous initialisons les états de variables et nous Nous initialisons les états de variables et nous parcourons le programme à l’envers !parcourons le programme à l’envers !
• Pour toute instruction i : x <Pour toute instruction i : x <-- y op z y op z
18 octobre 2007 Cours de compilation 7 - Intranet 100
Durée de vie des variablesDurée de vie des variables----------------------------------------------------------------------------------------------------------------------------
----• A titre d’illustration, nous associons à une variableA titre d’illustration, nous associons à une variable
– live live ouou live live
– no-use no-use ouou un numéro d’instruction un numéro d’instruction
• Nous initialisons les états de variables et nous Nous initialisons les états de variables et nous parcourons le programme à l’envers !parcourons le programme à l’envers !
• Pour toute instruction i : x <Pour toute instruction i : x <-- y op z y op z
– Nous attachons à i les informations sur x , y et Nous attachons à i les informations sur x , y et z . z .
18 octobre 2007 Cours de compilation 7 - Intranet 101
Durée de vie des variablesDurée de vie des variables----------------------------------------------------------------------------------------------------------------------------
----• A titre d’illustration, nous associons à une variableA titre d’illustration, nous associons à une variable
– live live ouou live live
– no-use no-use ouou un numéro d’instruction un numéro d’instruction
• Nous initialisons les états de variables et nous Nous initialisons les états de variables et nous parcourons le programme à l’envers !parcourons le programme à l’envers !
• Pour toute instruction i : x <Pour toute instruction i : x <-- y op z y op z
– Nous attachons à i les informations sur x , y et Nous attachons à i les informations sur x , y et z . z .
– x devient x devient live et no-use . live et no-use .
18 octobre 2007 Cours de compilation 7 - Intranet 102
Durée de vie des variablesDurée de vie des variables----------------------------------------------------------------------------------------------------------------------------
----• A titre d’illustration, nous associons à une variableA titre d’illustration, nous associons à une variable
– live live ouou live live
– no-use no-use ouou un numéro d’instruction un numéro d’instruction
• Nous initialisons les états de variables et nous Nous initialisons les états de variables et nous parcourons le programme à l’envers !parcourons le programme à l’envers !
• Pour toute instruction i : x <Pour toute instruction i : x <-- y op z y op z
– Nous attachons à i les informations sur x , y et Nous attachons à i les informations sur x , y et z . z .
– x devient x devient live et no-use . live et no-use .– y et z deviennent live et de numéro i .y et z deviennent live et de numéro i .
18 octobre 2007 Cours de compilation 7 - Intranet 103
Durée de vie des variablesDurée de vie des variables----------------------------------------------------------------------------------------------------------------------------
----• A titre d’illustration, nous associons à une variableA titre d’illustration, nous associons à une variable
– live live ouou live live
– no-use no-use ouou un numéro d’instruction un numéro d’instruction
• Nous initialisons les états de variables et nous Nous initialisons les états de variables et nous parcourons le programme à l’envers !parcourons le programme à l’envers !
• Pour toute instruction i : x <Pour toute instruction i : x <-- y op z y op z
– Nous attachons à i les informations sur x , y et z .Nous attachons à i les informations sur x , y et z .– x devient x devient live et no-use . live et no-use .– y et z deviennent live et de numéro i .y et z deviennent live et de numéro i .
Attention à l’ordre, car la variable x pourrait êtreAttention à l’ordre, car la variable x pourrait être
identique à y ou z !identique à y ou z !
18 octobre 2007 Cours de compilation 7 - Intranet 104
Durée de vie des variablesDurée de vie des variables----------------------------------------------------------------------------------------------------------------------------
----• Une illustration, avec t temporaire locale au bloc :Une illustration, avec t temporaire locale au bloc :
( 1 ) x <- y + t( 1 ) x <- y + t
( 2 ) y <- x + y( 2 ) y <- x + y
( 3 ) x <- y - z( 3 ) x <- y - z
18 octobre 2007 Cours de compilation 7 - Intranet 105
Durée de vie des variablesDurée de vie des variables----------------------------------------------------------------------------------------------------------------------------
----• Une illustration, avec t temporaire locale au bloc :Une illustration, avec t temporaire locale au bloc :
( 1 ) x <- y + t( 1 ) x <- y + t
( 2 ) y <- x + y( 2 ) y <- x + y
( 3 ) x <- y - z( 3 ) x <- y - z
live : x , y , z live : x , y , z live : t x , y , z , t : no-use live : t x , y , z , t : no-use
18 octobre 2007 Cours de compilation 7 - Intranet 106
Durée de vie des variablesDurée de vie des variables----------------------------------------------------------------------------------------------------------------------------
----• Une illustration, avec t temporaire locale au bloc :Une illustration, avec t temporaire locale au bloc :
( 1 ) x <- y + t( 1 ) x <- y + t
( 2 ) y <- x + y( 2 ) y <- x + y
( 3 ) x <- y - z( 3 ) x <- y - z
live : x , y , z live : x , y , z live : t x , y , z , t : no-use live : t x , y , z , t : no-use
live : y , z live : y , z live : x , t x , t : no-use y , z : 3 live : x , t x , t : no-use y , z : 3
18 octobre 2007 Cours de compilation 7 - Intranet 107
Durée de vie des variablesDurée de vie des variables----------------------------------------------------------------------------------------------------------------------------
----• Une illustration, avec t temporaire locale au bloc :Une illustration, avec t temporaire locale au bloc :
( 1 ) x <- y + t( 1 ) x <- y + t
( 2 ) y <- x + y( 2 ) y <- x + y
( 3 ) x <- y - z( 3 ) x <- y - z
live : x , y , z live : x , y , z live : t x , y , z , t : no-use live : t x , y , z , t : no-use
live : y , z live : y , z live : x , t x , t : no-use y , z : 3 live : x , t x , t : no-use y , z : 3
live : x , y , z live : x , y , z live : t t : no-use x , y : 2 z : 3 live : t t : no-use x , y : 2 z : 3
18 octobre 2007 Cours de compilation 7 - Intranet 108
Durée de vie des variablesDurée de vie des variables----------------------------------------------------------------------------------------------------------------------------
----• Une illustration, avec t temporaire locale au bloc :Une illustration, avec t temporaire locale au bloc :
( 1 ) x <- y + t( 1 ) x <- y + t
( 2 ) y <- x + y( 2 ) y <- x + y
( 3 ) x <- y - z( 3 ) x <- y - z
live : x , y , z live : x , y , z live : t x , y , z , t : no-use live : t x , y , z , t : no-use
live : y , z live : y , z live : x , t x , t : no-use y , z : 3 live : x , t x , t : no-use y , z : 3
live : x , y , z live : x , y , z live : t t : no-use x , y : 2 z : 3 live : t t : no-use x , y : 2 z : 3
live : y , z , t live : y , z , t live : x x : no-use y , t : 1 z : 3 live : x x : no-use y , t : 1 z : 3
18 octobre 2007 Cours de compilation 7 - Intranet 109
Durée de vie des variablesDurée de vie des variables----------------------------------------------------------------------------------------------------------------------------
----• Une illustration, avec t temporaire locale au bloc :Une illustration, avec t temporaire locale au bloc :
( 1 ) x <- y + t( 1 ) x <- y + t
( 2 ) y <- x + y( 2 ) y <- x + y
( 3 ) x <- y - z( 3 ) x <- y - z
live : x , y , z live : x , y , z live : t x , y , z , t : no-use live : t x , y , z , t : no-use
live : y , z live : y , z live : x , t x , t : no-use y , z : 3 live : x , t x , t : no-use y , z : 3
live : x , y , z live : x , y , z live : t t : no-use x , y : 2 z : 3 live : t t : no-use x , y : 2 z : 3
live : y , z , t live : y , z , t live : x x : no-use y , t : 1 z : 3 live : x x : no-use y , t : 1 z : 3
PourPour t t : :
18 octobre 2007 Cours de compilation 7 - Intranet 110
Durée de vie des variablesDurée de vie des variables----------------------------------------------------------------------------------------------------------------------------
----• Nous pouvons affiner les informations par une Nous pouvons affiner les informations par une
analyse qui englobe plusieurs blocs ( inter-analyse qui englobe plusieurs blocs ( inter-bloc ) !bloc ) !
– Nous supposons, par défaut, que les variables Nous supposons, par défaut, que les variables doivent être vivantes !doivent être vivantes !
18 octobre 2007 Cours de compilation 7 - Intranet 111
Durée de vie des variablesDurée de vie des variables----------------------------------------------------------------------------------------------------------------------------
----• Nous pouvons affiner les informations par une Nous pouvons affiner les informations par une
analyse qui englobe plusieurs blocs ( inter-analyse qui englobe plusieurs blocs ( inter-bloc ) !bloc ) !
– Nous supposons, par défaut, que les variables Nous supposons, par défaut, que les variables doivent être vivantes !doivent être vivantes !
– Nous essayons ensuite de montrer que certaines Nous essayons ensuite de montrer que certaines variables sont en fait inutiles !variables sont en fait inutiles !
18 octobre 2007 Cours de compilation 7 - Intranet 112
Durée de vie des variablesDurée de vie des variables----------------------------------------------------------------------------------------------------------------------------
----• Nous pouvons affiner les informations par une Nous pouvons affiner les informations par une
analyse qui englobe plusieurs blocs ( inter-analyse qui englobe plusieurs blocs ( inter-bloc ) !bloc ) !
– Nous supposons, par défaut, que les variables Nous supposons, par défaut, que les variables doivent être vivantes !doivent être vivantes !
– Nous essayons ensuite de montrer que certaines Nous essayons ensuite de montrer que certaines variables sont en fait inutiles !variables sont en fait inutiles !
– Souvent l’analyse est obtenu par itérations Souvent l’analyse est obtenu par itérations jusqu’à atteindre un point-fixe !jusqu’à atteindre un point-fixe !
18 octobre 2007 Cours de compilation 7 - Intranet 113
Durée de vie des variablesDurée de vie des variables----------------------------------------------------------------------------------------------------------------------------
----• Nous pouvons affiner les informations par une Nous pouvons affiner les informations par une
analyse qui englobe plusieurs blocs ( inter-bloc ) !analyse qui englobe plusieurs blocs ( inter-bloc ) !
– Nous supposons, par défaut, que les variables Nous supposons, par défaut, que les variables doivent être vivantes !doivent être vivantes !
– Nous essayons ensuite de montrer que certaines Nous essayons ensuite de montrer que certaines variables sont en fait inutiles !variables sont en fait inutiles !
– Souvent l’analyse est obtenu par itérations Souvent l’analyse est obtenu par itérations jusqu’à atteindre un point-fixe !jusqu’à atteindre un point-fixe !
– Ceci veut dire que nous nous arrêtons seulement Ceci veut dire que nous nous arrêtons seulement lorsque la dernière itération n’a plus apporté de lorsque la dernière itération n’a plus apporté de modifications !modifications !
18 octobre 2007 Cours de compilation 7 - Intranet 114
Durée de vie des variablesDurée de vie des variables----------------------------------------------------------------------------------------------------------------------------
----
y <- 3y <- 3x <- 5x <- 5
si x = 0si x = 0goto FINgoto FIN
x <- x-1x <- x-1y <- xy <- x
FIN :FIN :y <- x+1y <- x+1
Les flèches donnentLes flèches donnentles dépendances !les dépendances !
18 octobre 2007 Cours de compilation 7 - Intranet 115
Durée de vie des variablesDurée de vie des variables----------------------------------------------------------------------------------------------------------------------------
----
y <- 3y <- 3x <- 5x <- 5
si x = 0si x = 0goto FINgoto FIN
FIN :FIN :y <- x+1y <- x+1
Les flèches donnentLes flèches donnentles dépendances !les dépendances !
L(x) L(y)L(x) L(y) L(x) L(y)L(x) L(y)
L(x) L(y)L(x) L(y)
L(x) L(y)L(x) L(y)Par hypothèse, lesPar hypothèse, les
variables sontvariables sontvivantes!vivantes!
x <- x-1x <- x-1y <- xy <- x
18 octobre 2007 Cours de compilation 7 - Intranet 116
Durée de vie des variablesDurée de vie des variables----------------------------------------------------------------------------------------------------------------------------
----
y <- 3y <- 3x <- 5x <- 5
si x = 0si x = 0goto FINgoto FIN
FIN :FIN :y <- x+1y <- x+1
Les flèches donnentLes flèches donnentles dépendances !les dépendances !
L(x) L(y)L(x) L(y) L(x) L(y)L(x) L(y)
L(x) L(y)L(x) L(y)
L(x) L(y)L(x) L(y)Par hypothèse, lesPar hypothèse, les
variables sontvariables sontvivantes!vivantes!
x <- x-1x <- x-1y <- xy <- x
Itération 1 :Itération 1 :
L(x) L(x) L(y)L(y) L(x) L(x) L(y)L(y)
L(x) L(y)L(x) L(y)
L(x) L(x) L(y)L(y)
18 octobre 2007 Cours de compilation 7 - Intranet 117
Durée de vie des variablesDurée de vie des variables----------------------------------------------------------------------------------------------------------------------------
----
y <- 3y <- 3x <- 5x <- 5
si x = 0si x = 0goto FINgoto FIN
FIN :FIN :y <- x+1y <- x+1
Les flèches donnentLes flèches donnentles dépendances !les dépendances !
L(x) L(y)L(x) L(y) L(x) L(y)L(x) L(y)
L(x) L(y)L(x) L(y)
L(x) L(y)L(x) L(y)Par hypothèse, lesPar hypothèse, les
variables sontvariables sontvivantes!vivantes!
x <- x-1x <- x-1y <- xy <- x
Itération 1 :Itération 1 :
L(x) L(x) L(y)L(y) L(x) L(x) L(y)L(y)
L(x) L(y)L(x) L(y)
L(x) L(x) L(y)L(y)
OKOK
18 octobre 2007 Cours de compilation 7 - Intranet 118
Durée de vie des variablesDurée de vie des variables----------------------------------------------------------------------------------------------------------------------------
----
y <- 3y <- 3x <- 5x <- 5
si x = 0si x = 0goto FINgoto FIN
FIN :FIN :y <- x+1y <- x+1
Les flèches donnentLes flèches donnentles dépendances !les dépendances !
L(x) L(y)L(x) L(y) L(x) L(y)L(x) L(y)
L(x) L(y)L(x) L(y)
L(x) L(y)L(x) L(y)Par hypothèse, lesPar hypothèse, les
variables sontvariables sontvivantes!vivantes!
x <- x-1x <- x-1y <- xy <- x
Itération 1 :Itération 1 :
L(x) L(x) L(y)L(y) L(x) L(x) L(y)L(y)
L(x) L(y)L(x) L(y)
L(x) L(x) L(y)L(y)
OKOK
18 octobre 2007 Cours de compilation 7 - Intranet 119
Durée de vie des variablesDurée de vie des variables----------------------------------------------------------------------------------------------------------------------------
----
y <- 3y <- 3x <- 5x <- 5
si x = 0si x = 0goto FINgoto FIN
FIN :FIN :y <- x+1y <- x+1
Les flèches donnentLes flèches donnentles dépendances !les dépendances !
L(x) L(y)L(x) L(y) L(x) L(y)L(x) L(y)
L(x) L(y)L(x) L(y)
L(x) L(y)L(x) L(y)Par hypothèse, lesPar hypothèse, les
variables sontvariables sontvivantes!vivantes!
x <- x-1x <- x-1y <- xy <- x
Itération 1 :Itération 1 :
L(x) L(x) L(y)L(y) L(x) L(x) L(y)L(y)
L(x) L(y)L(x) L(y)
L(x) L(x) L(y)L(y)
PROBLEMEPROBLEME
18 octobre 2007 Cours de compilation 7 - Intranet 120
Durée de vie des variablesDurée de vie des variables----------------------------------------------------------------------------------------------------------------------------
----
y <- 3y <- 3x <- 5x <- 5
si x = 0si x = 0goto FINgoto FIN
FIN :FIN :y <- x+1y <- x+1
Les flèches donnentLes flèches donnentles dépendances !les dépendances !
L(x) L(y)L(x) L(y) L(x) L(y)L(x) L(y)
L(x) L(x) L(y)L(y)
L(x) L(y)L(x) L(y)Par hypothèse, lesPar hypothèse, les
variables sontvariables sontvivantes!vivantes!
x <- x-1x <- x-1y <- xy <- x
Itération 1 :Itération 1 :
L(x) L(x) L(y)L(y) L(x) L(x) L(y)L(y)
L(x) L(y)L(x) L(y)
L(x) L(x) L(y)L(y)
PROBLEMEPROBLEME
18 octobre 2007 Cours de compilation 7 - Intranet 121
Durée de vie des variablesDurée de vie des variables----------------------------------------------------------------------------------------------------------------------------
----
y <- 3y <- 3x <- 5x <- 5
si x = 0si x = 0goto FINgoto FIN
FIN :FIN :y <- x+1y <- x+1
Les flèches donnentLes flèches donnentles dépendances !les dépendances !
L(x) L(y)L(x) L(y) L(x) L(y)L(x) L(y)
L(x) L(x) L(y)L(y)
L(x) L(y)L(x) L(y)Par hypothèse, lesPar hypothèse, les
variables sontvariables sontvivantes!vivantes!
x <- x-1x <- x-1y <- xy <- x
Itération 1 :Itération 1 :
L(x) L(x) L(y)L(y) L(x) L(x) L(y)L(y)
L(x) L(x) L(y)L(y)
L(x) L(x) L(y)L(y)
Itération 2 :Itération 2 :
18 octobre 2007 Cours de compilation 7 - Intranet 122
Durée de vie des variablesDurée de vie des variables----------------------------------------------------------------------------------------------------------------------------
----
y <- 3y <- 3x <- 5x <- 5
si x = 0si x = 0goto FINgoto FIN
FIN :FIN :y <- x+1y <- x+1
Les flèches donnentLes flèches donnentles dépendances !les dépendances !
L(x) L(x) L(y)L(y) L(x) L(y)L(x) L(y)
L(x) L(x) L(y)L(y)
L(x) L(x) L(y)L(y)Par hypothèse, lesPar hypothèse, les
variables sontvariables sontvivantes!vivantes!
x <- x-1x <- x-1y <- xy <- x
Itération 1 :Itération 1 :
L(x) L(x) L(y)L(y) L(x) L(x) L(y)L(y)
L(x) L(x) L(y)L(y)
L(x) L(x) L(y)L(y)
Itération 2 :Itération 2 :
18 octobre 2007 Cours de compilation 7 - Intranet 123
Durée de vie des variablesDurée de vie des variables----------------------------------------------------------------------------------------------------------------------------
----
y <- 3y <- 3x <- 5x <- 5
si x = 0si x = 0goto FINgoto FIN
FIN :FIN :y <- x+1y <- x+1
Les flèches donnentLes flèches donnentles dépendances !les dépendances !
L(x) L(x) L(y)L(y) L(x) L(y)L(x) L(y)
L(x) L(x) L(y)L(y)
L(x) L(x) L(y)L(y)Par hypothèse, lesPar hypothèse, les
variables sontvariables sontvivantes!vivantes!
x <- x-1x <- x-1y <- xy <- x
Itération 1 :Itération 1 :
L(x) L(x) L(y)L(y) L(x) L(x) L(y)L(y)
L(x) L(x) L(y)L(y)
L(x) L(x) L(y)L(y)
Itération 2 :Itération 2 :
Itération 3 :Itération 3 :
18 octobre 2007 Cours de compilation 7 - Intranet 124
Durée de vie des variablesDurée de vie des variables----------------------------------------------------------------------------------------------------------------------------
----
y <- 3y <- 3x <- 5x <- 5
si x = 0si x = 0goto FINgoto FIN
FIN :FIN :y <- x+1y <- x+1
Les flèches donnentLes flèches donnentles dépendances !les dépendances !
L(x) L(x) L(y)L(y) L(x) L(y)L(x) L(y)
L(x) L(x) L(y)L(y)
L(x) L(x) L(y)L(y)Par hypothèse, lesPar hypothèse, les
variables sontvariables sontvivantes!vivantes!
x <- x-1x <- x-1y <- xy <- x
Itération 1 :Itération 1 :
L(x) L(x) L(y)L(y) L(x) L(x) L(y)L(y)
L(x) L(x) L(y)L(y)
L(x) L(x) L(y)L(y)
Itération 2 :Itération 2 :
Itération 3 :Itération 3 :
18 octobre 2007 Cours de compilation 7 - Intranet 125
Durée de vie des variablesDurée de vie des variables----------------------------------------------------------------------------------------------------------------------------
----
y <- 3y <- 3x <- 5x <- 5
si x = 0si x = 0goto FINgoto FIN
FIN :FIN :y <- x+1y <- x+1
Les flèches donnentLes flèches donnentles dépendances !les dépendances !
L(x) L(x) L(y)L(y) L(x) L(y)L(x) L(y)
L(x) L(x) L(y)L(y)
L(x) L(x) L(y)L(y)Par hypothèse, lesPar hypothèse, les
variables sontvariables sontvivantes!vivantes!
x <- x-1x <- x-1y <- xy <- x
Itération 1 :Itération 1 :
L(x) L(x) L(y)L(y) L(x) L(x) L(y)L(y)
L(x) L(x) L(y)L(y)
L(x) L(x) L(y)L(y)
Itération 2 :Itération 2 :
Itération 3 :Itération 3 :
18 octobre 2007 Cours de compilation 7 - Intranet 126
Durée de vie des variablesDurée de vie des variables----------------------------------------------------------------------------------------------------------------------------
----
y <- 3y <- 3x <- 5x <- 5
si x = 0si x = 0goto FINgoto FIN
FIN :FIN :y <- x+1y <- x+1
Les flèches donnentLes flèches donnentles dépendances !les dépendances !
L(x) L(x) L(y)L(y) L(x) L(y)L(x) L(y)
L(x) L(x) L(y)L(y)
L(x) L(x) L(y)L(y)Par hypothèse, lesPar hypothèse, les
variables sontvariables sontvivantes!vivantes!
x <- x-1x <- x-1y <- xy <- x
Itération 1 :Itération 1 :
L(x) L(x) L(y)L(y) L(x) L(x) L(y)L(y)
L(x) L(x) L(y)L(y)
L(x) L(x) L(y)L(y)
Itération 2 :Itération 2 :
Itération 3 :Itération 3 :
18 octobre 2007 Cours de compilation 7 - Intranet 127
Durée de vie des variablesDurée de vie des variables----------------------------------------------------------------------------------------------------------------------------
----
x <- 5x <- 5
si x = 0si x = 0goto FINgoto FIN
FIN :FIN :y <- x+1y <- x+1x <- x-1x <- x-1
18 octobre 2007 Cours de compilation 7 - Intranet 128
RésuméRésumé----------------------------------------------------------------------------------------------------------------------------
----
•Génération de codeGénération de code
•Optimisation de codeOptimisation de code
18 octobre 2007 Cours de compilation 7 - Intranet 129
E TE T
P O U RP O U R
C O N C L U R EC O N C L U R E
. . .. . .
18 octobre 2007 Cours de compilation 7 - Intranet 130
Résumé du coursRésumé du cours----------------------------------------------------------------------------------------------------------------------------
----•Définitions de baseDéfinitions de base•Composition de compilateursComposition de compilateurs•L’environnement d’un compilateurL’environnement d’un compilateur•Evaluation partielle et compilationEvaluation partielle et compilation•Analyses lexicales et syntaxiquesAnalyses lexicales et syntaxiques•Techniques d’analyse descendantesTechniques d’analyse descendantes•Techniques d’analyse ascendantesTechniques d’analyse ascendantes•YACCYACC•Analyse sémantiqueAnalyse sémantique•Environnement d’exécutionEnvironnement d’exécution•Génération de codeGénération de code•Optimisation de codeOptimisation de code
18 octobre 2007 Cours de compilation 7 - Intranet 131
Résumé du coursRésumé du cours----------------------------------------------------------------------------------------------------------------------------
----•Définitions de baseDéfinitions de base•Composition de compilateursComposition de compilateurs•L’environnement d’un compilateurL’environnement d’un compilateur•Evaluation partielle et compilationEvaluation partielle et compilation•Analyses lexicales et syntaxiquesAnalyses lexicales et syntaxiques•Techniques d’analyse descendantesTechniques d’analyse descendantes•Techniques d’analyse ascendantesTechniques d’analyse ascendantes•YACCYACC•Analyse sémantiqueAnalyse sémantique•Environnement d’exécutionEnvironnement d’exécution•Génération de codeGénération de code•Optimisation de codeOptimisation de code
18 octobre 2007 Cours de compilation 7 - Intranet 132
Résumé du coursRésumé du cours----------------------------------------------------------------------------------------------------------------------------
----•Définitions de baseDéfinitions de base•Composition de compilateursComposition de compilateurs•L’environnement d’un compilateurL’environnement d’un compilateur•Evaluation partielle et compilationEvaluation partielle et compilation•Analyses lexicales et syntaxiquesAnalyses lexicales et syntaxiques•Techniques d’analyse descendantesTechniques d’analyse descendantes•Techniques d’analyse ascendantesTechniques d’analyse ascendantes•YACCYACC•Analyse sémantiqueAnalyse sémantique•Environnement d’exécutionEnvironnement d’exécution•Génération de codeGénération de code•Optimisation de codeOptimisation de code
18 octobre 2007 Cours de compilation 7 - Intranet 133
Résumé du coursRésumé du cours----------------------------------------------------------------------------------------------------------------------------
----•Définitions de baseDéfinitions de base•Composition de compilateursComposition de compilateurs•L’environnement d’un compilateurL’environnement d’un compilateur•Evaluation partielle et compilationEvaluation partielle et compilation•Analyses lexicales et syntaxiquesAnalyses lexicales et syntaxiques•Techniques d’analyse descendantesTechniques d’analyse descendantes•Techniques d’analyse ascendantesTechniques d’analyse ascendantes•YACCYACC•Analyse sémantiqueAnalyse sémantique•Environnement d’exécutionEnvironnement d’exécution•Génération de codeGénération de code•Optimisation de codeOptimisation de code
18 octobre 2007 Cours de compilation 7 - Intranet 134
Résumé du coursRésumé du cours----------------------------------------------------------------------------------------------------------------------------
----•Définitions de baseDéfinitions de base•Composition de compilateursComposition de compilateurs•L’environnement d’un compilateurL’environnement d’un compilateur•Evaluation partielle et compilationEvaluation partielle et compilation•Analyses lexicales et syntaxiquesAnalyses lexicales et syntaxiques•Techniques d’analyse descendantesTechniques d’analyse descendantes•Techniques d’analyse ascendantesTechniques d’analyse ascendantes•YACCYACC•Analyse sémantiqueAnalyse sémantique•Environnement d’exécutionEnvironnement d’exécution•Génération de codeGénération de code•Optimisation de codeOptimisation de code
18 octobre 2007 Cours de compilation 7 - Intranet 135
C ’ e S t L a F i NC ’ e S t L a F i Nd U c O u R d U c O u R
s ! ! !s ! ! !
L e P r O j E tL e P r O j E tA p P o R t E r AA p P o R t E r Al A p R a T i Q u l A p R a T i Q u
E ! ! !E ! ! !