Post on 06-Jul-2020
MotivationAnalyse statique
OptimisationOrganisation
Projet: Variables vivantes
J.-P. Bodeveix Yannick Chevalier Martin Strecker
11 mai 2005
J.-P. Bodeveix, Yannick Chevalier, Martin Strecker Projet: Variables vivantes
MotivationAnalyse statique
OptimisationOrganisation
Plan
1 MotivationVariables vivantesExpressions très utilisées
2 Analyse statiqueMini-langage impératifVariables vivantesExpressions très utilisées
3 Optimisation
4 Organisation
J.-P. Bodeveix, Yannick Chevalier, Martin Strecker Projet: Variables vivantes
MotivationAnalyse statique
OptimisationOrganisation
Variables vivantesExpressions très utilisées
Concept (1)
Définition : Variable v est vivante dans une position P, si
il y a un chemin d’exécution commençant avec P surlequel v est lue
sans avoir été redéfinie précédemment
J.-P. Bodeveix, Yannick Chevalier, Martin Strecker Projet: Variables vivantes
MotivationAnalyse statique
OptimisationOrganisation
Variables vivantesExpressions très utilisées
Concept (2)
Exemple :
x = 3; (1)y = 5; (2)y = x + 3; (3)x = x + y; (4)
x vivante (au moins) après (1), (2), (3)y vivante (au moins) après (3)y morte après (2)
J.-P. Bodeveix, Yannick Chevalier, Martin Strecker Projet: Variables vivantes
MotivationAnalyse statique
OptimisationOrganisation
Variables vivantesExpressions très utilisées
Utilisation
Optimisation de compilateurs :Affectations à des variables mortes peuvent être éliminées(“dead code elimination”)
x = 3; (1)y = 5; (2)y = x + 3; (3)x = x + y; (4)
x = 3; (1)
y = x + 3; (3)x = x + y; (4)
J.-P. Bodeveix, Yannick Chevalier, Martin Strecker Projet: Variables vivantes
MotivationAnalyse statique
OptimisationOrganisation
Variables vivantesExpressions très utilisées
Utilisation
Optimisation de compilateurs :Affectations à des variables mortes peuvent être éliminées(“dead code elimination”)
x = 3; (1)y = 5; (2)y = x + 3; (3)x = x + y; (4)
x = 3; (1)
y = x + 3; (3)x = x + y; (4)
J.-P. Bodeveix, Yannick Chevalier, Martin Strecker Projet: Variables vivantes
MotivationAnalyse statique
OptimisationOrganisation
Variables vivantesExpressions très utilisées
Raffinement
Question : x est-elle vivante après (4) ?
. . .x = x + y; (4). . .
Réponse :
Oui, si x est utilisée plus tard,par ex. dans return(x + y)
Non, si x n’est plus utilisée,par ex. dans return(y)
J.-P. Bodeveix, Yannick Chevalier, Martin Strecker Projet: Variables vivantes
MotivationAnalyse statique
OptimisationOrganisation
Variables vivantesExpressions très utilisées
Variables vivantes : Complications (1)
y est-elle vivante après (1),puisque y n’est plus utilisée dans (2) ?L’optimisation suivante est-elle correcte ?Original
y = 5; (1)IF (x > 0)THEN x = x + 1 (2)ELSE x = x + y (3)return(x)
Optimisation (incorrecte)
IF (x > 0)THEN x = x + 1 (2)ELSE x = x + y (3)return(x)
J.-P. Bodeveix, Yannick Chevalier, Martin Strecker Projet: Variables vivantes
MotivationAnalyse statique
OptimisationOrganisation
Variables vivantesExpressions très utilisées
Variables vivantes : Complications (1)
y est-elle vivante après (1),puisque y n’est plus utilisée dans (2) ?L’optimisation suivante est-elle correcte ?Original
y = 5; (1)IF (x > 0)THEN x = x + 1 (2)ELSE x = x + y (3)return(x)
Optimisation (incorrecte)
IF (x > 0)THEN x = x + 1 (2)ELSE x = x + y (3)return(x)
J.-P. Bodeveix, Yannick Chevalier, Martin Strecker Projet: Variables vivantes
MotivationAnalyse statique
OptimisationOrganisation
Variables vivantesExpressions très utilisées
Variables vivantes : Complications (2)
x est-elle vivante après (3),puisque x n’est pas utilisée à la fin de la boucle ?L’optimisation suivante est-elle correcte ?Original
x = 2; (1)y = 5; (2)WHILE x > 0 DO
x = x - 1; (3)return(y)
Optimisation (incorrecte)
x = 2; (1)y = 5; (2)WHILE x > 0 DO
SKIP; (3)return(y)
J.-P. Bodeveix, Yannick Chevalier, Martin Strecker Projet: Variables vivantes
MotivationAnalyse statique
OptimisationOrganisation
Variables vivantesExpressions très utilisées
Variables vivantes : Complications (2)
x est-elle vivante après (3),puisque x n’est pas utilisée à la fin de la boucle ?L’optimisation suivante est-elle correcte ?Original
x = 2; (1)y = 5; (2)WHILE x > 0 DO
x = x - 1; (3)return(y)
Optimisation (incorrecte)
x = 2; (1)y = 5; (2)WHILE x > 0 DO
SKIP; (3)return(y)
J.-P. Bodeveix, Yannick Chevalier, Martin Strecker Projet: Variables vivantes
MotivationAnalyse statique
OptimisationOrganisation
Variables vivantesExpressions très utilisées
Concept
Définition : Une expression dans un programme est expressiontrès utilisée si
elle est utilisée sur tous les chemins d’exécution duprogramme
avant que l’une de ses variables soit redéfinie
J.-P. Bodeveix, Yannick Chevalier, Martin Strecker Projet: Variables vivantes
MotivationAnalyse statique
OptimisationOrganisation
Variables vivantesExpressions très utilisées
Exemple
while (u > z) doif (u + z > 1) then
u := (x + y) - (u + z)else
z := (x + y) + (u + z)end;
end;return(x+y);
très utilisée : x + ypas très utilisée : u + z
J.-P. Bodeveix, Yannick Chevalier, Martin Strecker Projet: Variables vivantes
MotivationAnalyse statique
OptimisationOrganisation
Variables vivantesExpressions très utilisées
Optimisation
aux := (x + y);while (u > z) do
if (u + z > 1) thenu := aux - (u + z)
elsez := aux + (u + z)
end;end;return(aux);
J.-P. Bodeveix, Yannick Chevalier, Martin Strecker Projet: Variables vivantes
MotivationAnalyse statique
OptimisationOrganisation
Mini-langage impératifVariables vivantesExpressions très utilisées
Expressions
Constructeurs :
Constantes (entier) :3, 42 , . . .
Variables (chaîne decaractère) :
x, y5
Expressions binaires :a + b - 5 == c + 4
Déf. en Caml :
type expr =Const of int
| Var of string
| Op ofbinop * expr * expr
Exemple :x + 3 == 7 Op(BEq, Op(BPlus, Var "x", Const 3), Const 7)
J.-P. Bodeveix, Yannick Chevalier, Martin Strecker Projet: Variables vivantes
MotivationAnalyse statique
OptimisationOrganisation
Mini-langage impératifVariables vivantesExpressions très utilisées
Expressions
Constructeurs :
Constantes (entier) :3, 42 , . . .
Variables (chaîne decaractère) :
x, y5
Expressions binaires :a + b - 5 == c + 4
Déf. en Caml :
type expr =Const of int
| Var of string
| Op ofbinop * expr * expr
Exemple :x + 3 == 7 Op(BEq, Op(BPlus, Var "x", Const 3), Const 7)
J.-P. Bodeveix, Yannick Chevalier, Martin Strecker Projet: Variables vivantes
MotivationAnalyse statique
OptimisationOrganisation
Mini-langage impératifVariables vivantesExpressions très utilisées
Expressions
Constructeurs :
Constantes (entier) :3, 42 , . . .
Variables (chaîne decaractère) :
x, y5
Expressions binaires :a + b - 5 == c + 4
Déf. en Caml :
type expr =Const of int
| Var of string
| Op ofbinop * expr * expr
Exemple :x + 3 == 7 Op(BEq, Op(BPlus, Var "x", Const 3), Const 7)
J.-P. Bodeveix, Yannick Chevalier, Martin Strecker Projet: Variables vivantes
MotivationAnalyse statique
OptimisationOrganisation
Mini-langage impératifVariables vivantesExpressions très utilisées
Commandes
Constructeurs :
Skip : “ne fait rien”
Affectation : x = x + 4
Séquence : x = x + 4 ; y = z ;
Sélection : if (..) .. else ..
Boucle while (..) ..
Return return (x + 1)
Déf. en Caml ? ?
J.-P. Bodeveix, Yannick Chevalier, Martin Strecker Projet: Variables vivantes
MotivationAnalyse statique
OptimisationOrganisation
Mini-langage impératifVariables vivantesExpressions très utilisées
Mini-langage impératif (3)
Synt. concrète :
x = 5;y = 0;
while (x) {x = x - 1;y = y + 2;}
return y;
Syntaxe abstraite :
Comp (Comp (Comp (Assign ("x", Const 5),Assign ("y", Const 7)),
While ((Var "x"),Comp(Assign("x",
Op (BMinus, Var "x", Const 1)),Assign("y",
Op (BPlus, Var "y", Const 2))))),
Return (Var "y"))A faire : écrire fonction qui imprime des termes
J.-P. Bodeveix, Yannick Chevalier, Martin Strecker Projet: Variables vivantes
MotivationAnalyse statique
OptimisationOrganisation
Mini-langage impératifVariables vivantesExpressions très utilisées
Principe
Propager l’ensemble des variables vivantes . . .
de la fin vers le début du programme
Comparable au calcul de la plus faible précondition
J.-P. Bodeveix, Yannick Chevalier, Martin Strecker Projet: Variables vivantes
MotivationAnalyse statique
OptimisationOrganisation
Mini-langage impératifVariables vivantesExpressions très utilisées
Return, Affectation, Séquence
x = 3
y = 5
y = x + 3
x = x + y
{x, y} = {x, y} − {x} + {x, y}
{x} = {x, y} − {y} + {x}
{x}
{} = {x} − {x}
return(x=y)
{x, y}
J.-P. Bodeveix, Yannick Chevalier, Martin Strecker Projet: Variables vivantes
MotivationAnalyse statique
OptimisationOrganisation
Mini-langage impératifVariables vivantesExpressions très utilisées
Sélection
x = x + 1
x > 0
x = x + y
y = 5
{x}
{x, y} = {x} − {x} + {x, y}
{x, y} = {x} + {x, y} + {x}
{x} = {x, y} − {y}
{x} = {x} − {x} + {x}
J.-P. Bodeveix, Yannick Chevalier, Martin Strecker Projet: Variables vivantes
MotivationAnalyse statique
OptimisationOrganisation
Mini-langage impératifVariables vivantesExpressions très utilisées
Boucle (1)
Idée : Déplier la boucle. Sont équivalents :
Original
while (x > 0) {x = x - 1;}
Déplié 1 fois :
if (x > 0) {x = x - 1;}
while (x > 0) {x = x - 1;}
Déplié n fois :
if (x > 0) {x = x - 1;}
...if (x > 0) {
x = x - 1;}
Skip;
J.-P. Bodeveix, Yannick Chevalier, Martin Strecker Projet: Variables vivantes
MotivationAnalyse statique
OptimisationOrganisation
Mini-langage impératifVariables vivantesExpressions très utilisées
Boucle (1)
Idée : Déplier la boucle. Sont équivalents :
Original
while (x > 0) {x = x - 1;}
Déplié 1 fois :
if (x > 0) {x = x - 1;}
while (x > 0) {x = x - 1;}
Déplié n fois :
if (x > 0) {x = x - 1;}
...if (x > 0) {
x = x - 1;}
Skip;
J.-P. Bodeveix, Yannick Chevalier, Martin Strecker Projet: Variables vivantes
MotivationAnalyse statique
OptimisationOrganisation
Mini-langage impératifVariables vivantesExpressions très utilisées
Boucle (1)
Idée : Déplier la boucle. Sont équivalents :
Original
while (x > 0) {x = x - 1;}
Déplié 1 fois :
if (x > 0) {x = x - 1;}
while (x > 0) {x = x - 1;}
Déplié n fois :
if (x > 0) {x = x - 1;}
...if (x > 0) {
x = x - 1;}
Skip;
J.-P. Bodeveix, Yannick Chevalier, Martin Strecker Projet: Variables vivantes
MotivationAnalyse statique
OptimisationOrganisation
Mini-langage impératifVariables vivantesExpressions très utilisées
Boucle (2)
while (x > 0) {
x = x - 1;
}return(y)
{x, y}
{y}
{y}
{x, y}
{x, y}
{x, y}
J.-P. Bodeveix, Yannick Chevalier, Martin Strecker Projet: Variables vivantes
MotivationAnalyse statique
OptimisationOrganisation
Mini-langage impératifVariables vivantesExpressions très utilisées
Boucle (2)
while (x > 0) {
x = x - 1;
}return(y)
{x, y}
{y}
{y}
{x, y}
{x, y}
{x, y}
J.-P. Bodeveix, Yannick Chevalier, Martin Strecker Projet: Variables vivantes
MotivationAnalyse statique
OptimisationOrganisation
Mini-langage impératifVariables vivantesExpressions très utilisées
Boucle (2)
while (x > 0) {
x = x - 1;
}return(y)
{x, y}
{y}
{y}
{x, y}
{x, y}
{x, y}
J.-P. Bodeveix, Yannick Chevalier, Martin Strecker Projet: Variables vivantes
MotivationAnalyse statique
OptimisationOrganisation
Mini-langage impératifVariables vivantesExpressions très utilisées
Principe
Comparable au calcul des variables vivantes :
Propager l’ensemble des expressions très utilisées
de la fin vers le début du programmeCas de l’affectation x = e
Supprimer de l’ensemble toute sous-expr. contenant xAjouter toutes les sous-expressions de e
Cas de la sélection if b then c1 else c2
Prendre intersection des expr. très utilisées de c1 et c2
Ajouter toutes les sous-expressions de b
J.-P. Bodeveix, Yannick Chevalier, Martin Strecker Projet: Variables vivantes
MotivationAnalyse statique
OptimisationOrganisation
Mini-langage impératifVariables vivantesExpressions très utilisées
Exemple
while (u > z) {
if (u + z > 1) {
u := (x + y) - (u + z)}
else {
v := (x + y) + (u + z)}
}
return(x + y) ;
J.-P. Bodeveix, Yannick Chevalier, Martin Strecker Projet: Variables vivantes
MotivationAnalyse statique
OptimisationOrganisation
Mini-langage impératifVariables vivantesExpressions très utilisées
Exemple
{ x+y, u>z }while (u > z) {
{ x+y, u+z, u+z > 1 }if (u + z > 1) {
{ x+y, u+z, (x+y) - (u+z) }u := (x + y) - (u + z){ } }
else {{ x+y, u+z, (x+y) + (u+z) }v := (x + y) + (u + z){ } }
{ } }{ x+y }return(x + y) ;
J.-P. Bodeveix, Yannick Chevalier, Martin Strecker Projet: Variables vivantes
MotivationAnalyse statique
OptimisationOrganisation
Mini-langage impératifVariables vivantesExpressions très utilisées
Exemple
{ x+y, u>z }while (u > z) {
{ x+y, u+z, u+z > 1 }if (u + z > 1) {
{ x+y, u+z, (x+y) - (u+z) }u := (x + y) - (u + z){ x+y, u>z } }
else {{ x+y, u+z, (x+y) + (u+z), u>z }v := (x + y) + (u + z){ x+y, u>z } }
{ x+y, u>z } }{ x+y }return(x + y) ;
J.-P. Bodeveix, Yannick Chevalier, Martin Strecker Projet: Variables vivantes
MotivationAnalyse statique
OptimisationOrganisation
Principe
Traverser programme (fin début)
Pour chaque affectation x = e : Calculer ensemble V desvariables vivantesDeux cas :
x /∈ V : Remplacer x = e par Skipx ∈ V : Garder x = e
Simplifier c ; Skip ou Skip ; c
J.-P. Bodeveix, Yannick Chevalier, Martin Strecker Projet: Variables vivantes
MotivationAnalyse statique
OptimisationOrganisation
Exemple
Progr. original
x = 3;
y = 5;
y = x + 3;
return (x + y);
var. vivantes
{ }
{x}
{x}
{x, y}
optimisé
x = 3;
y = x + 3;
return (x + y);
J.-P. Bodeveix, Yannick Chevalier, Martin Strecker Projet: Variables vivantes
MotivationAnalyse statique
OptimisationOrganisation
Exemple
Progr. original
x = 3;
y = 5;
y = x + 3;
return (x + y);
var. vivantes
{ }
{x}
{x}
{x, y}
optimisé
x = 3;
y = x + 3;
return (x + y);
J.-P. Bodeveix, Yannick Chevalier, Martin Strecker Projet: Variables vivantes
MotivationAnalyse statique
OptimisationOrganisation
Exemple
Progr. original
x = 3;
y = 5;
y = x + 3;
return (x + y);
var. vivantes
{ }
{x}
{x}
{x, y}
optimisé
x = 3;
y = x + 3;
return (x + y);
J.-P. Bodeveix, Yannick Chevalier, Martin Strecker Projet: Variables vivantes
MotivationAnalyse statique
OptimisationOrganisation
Travail à faire
Écrire fonctions en OCaml / Java pour la partie “analyse deprogramme”
Écrire fonctions en C pour la partie “affichage de graphe”
Écrire interface entre OCaml / Java / C
J.-P. Bodeveix, Yannick Chevalier, Martin Strecker Projet: Variables vivantes