TD4 - Génération de code, et optimisation 1 Génération de

publicité
Master Info - 2013-2014
Compilation
TD4 - Génération de code, et optimisation
1
Génération de code
1.1
Exo TD3
Cf l’énoncé du TD3.
1.2
Exo Supplémentaire
n :=0;
x0 : = 0 ;
x1 : = 0 ;
d e l t a := b∗b−4∗a ∗ c ;
i f d e l t a > 0 then
begin
n:=2;
x0 := (−b − s q r t ( b∗b−4∗a ∗ c ) ) / ( 2 ∗ a ) ;
x1 := (−b + s q r t ( b∗b−4∗a ∗ c ) ) / ( 2 ∗ a ) ;
end
else
begin
i f d e l t a = 0 then begin
n:=1;
x0 := −b −s q r t ( b∗b−4∗a ∗ c ) ;
x1 := x0 ;
end ;
end ;
On suppose que la fonction sqrt est définie et utilisable via un appel. Donner le code 3
adresses correspondant à ce code.
2
TD4 : Optimisation : expressions communes
Après la production de code 3 adresses, il reste à faire la production du code assembleur :
— Sélection des instructions
— Allocation des registres
— Optimisations . . .
Problèmes spécifiques à la machine cible Pour en savoir plus : Compilateurs (dragon book)
Aho, Sethi, Ullman
Dans la suite nous regardons les optimisations indépendantes de machine cible. Elles sont
en général réalisées sur le graphe de flot de contrôle (cf document joint).
2.1
Exo du TD : sous expressions-communes.
Soit le code à trois adresses suivant :
TD4 MIF12, Master Info - 2013-2014, L. Gonnord & E. Guillou
1/4
(1)
(2)
(8)
(10)
a=b+c
b=a+c
d=c+e
si d>7 aller a (8)
t=a+c
v=c+e
aller a (10)
t=b+c
v=a+c
b=a+c
a=b+c
1. Construire le graphe de flot de contrôle.
2. On cherche à réaliser l’optimisation des sous expressions communes. Pour chaque bloc,
calculer les ensembles d’expressions produites et supprimées : Prod et Sup.
3. Calculer les ensembles des expressions disponibles en entrée et en sortie de chaque bloc.
4. Avec ce résultat, optimiser le code.
Avec une boucle Mêmes questions avec ce programme :
x:=a+b;
y:=a*b;
while(y>a+b) do
a:=a+a;
x:=a+b;
done
2.2
Pour s’entraı̂ner - exos corrigés
La définition des différents ensembles est dans le cours, sur le web (c’est classique) ou
par exemple ici : http://laure.gonnord.org/pro/teaching/m2ens analysestatique slides2012.pdf
Attention ;.les calculs ne sont pas garantis sans erreur.
Graphe de flot Générer le graphe de flot de contrôle pour le code suivant :
while d>0 do{
a:=b+c;
d:=d-b;
e:=a+f;
if e>0
{f:=a-d;b:=d+f}
else
{e:=a-c}
b:=a+c}
On obtient pour graphe de flot de contrôle :
TD4 MIF12, Master Info - 2013-2014, L. Gonnord & E. Guillou
2/4
B0
d > 0?
B1
a := b + c
d := d − b
e := a + f
e > 0?
B3
f := a + d
b := d + f
e := a − c
b := a + c
B4
B5
On met le test dans le bloc B1 .
Variables actives Sur le graphe de flot de l’exercice précédent :
1. Écrire et résoudre le système d’équations relatif aux ensembles Gen, Kill, In et Out, en
prenant bien soin d’initialiser les ensembles correctement.
2. Supprimer les instructions inutiles (“code mort”).
Bi Gen Kill
B0
d
∅
B1 bcdf ade
B2
e
∅
B3 ac
e
B4 ad
bf
B5 ac
b
In
d
bcdf
e
ad
ac
ac
Out
bcdf
e
acd
ac
ac
d
In Out
bcdf bcdf
bcdf acde
acde acd
acd acd
ac
acd
acd bcdf
In
bcdf
bcdf
acde
acd
acd
acdf
Out
bcdf
acde
acd
acdf
acdf
bcdf
In
bcdf
bcdf
acde
acdf
acd
acdf
Out
bcdf
acde
acdf
acdf
acdf
bcdf
In
bcdf
bcdf
acdef
acd
acdf
acdf
Out
bcdf
acde
acdf
acdf
acdf
bcdf
In
bcdf
bcdf
acdef
acd
acdf
acdf
On a donc : Out(B3 ) = {a, c, d, f }. b est affectée en B3 mais n’est pas vivante en sortie de
B3 , on peut donc enlever cette affectation.
De même, dans le bloc 4, e n’est pas vivante en sortie, donc on peut supprimer l’affectation
e := ....
Variables Actives Après génération de code, on obtient le programme suivant :
TD4 MIF12, Master Info - 2013-2014, L. Gonnord & E. Guillou
3/4
Out
bcdf
acde
acdef
acdf
acdf
bcdf
B1
d1 : i := m − 1
d2 : J := n
d3 : a := u1
B2
d4 : i := i + 1
d5 : j := j − 1
B3
B4
d6 : a := u2
d7 : i := u3
Supprimer le code mort. Initialisation :
Bi
Gen
Kill
B1 m, n, u1 i, J, a
B2
i, j
i, j
B3
u2
a
B4
u3
i
Itérations
Bi
B1
B2
B3
B4
In
Out
m, n, u1
i, j
i, j
u2 , u3
u2
i, j
u3
i, j
In
m, n, j, u1
u2 , u3 , i, j
i, j, u2
u3 , j
Out
u2 , u3 , i, j
i, j, u2 , u3
u2 , u3 , i, j
u2 , u3 , i, j
In
m, n, u1 , u2 , u3 , j
u2 , u3 , i, j
u2 , u3 , i, j
u2 , u3 , j
Out
u2 , u3 , i, j
u2 , u3 , i, j
u2 , u3 , i, j
u2 , u3 , i, j
In
u1 , u2 , u3 , m, n, j
u2 , u3 , i, j
u2 , u3 , i, j
u2 , u3 , j
Conclusion : on peut supprimer d2 , d3 et d6 car J, a 6∈ Out(B1 ) et a 6∈ Out(B3 ).
TD4 MIF12, Master Info - 2013-2014, L. Gonnord & E. Guillou
4/4
Out
idem
idem
idem
idem
Téléchargement