Vous êtes sur la page 1sur 6

Cours de compilation

Chapitre 4 : Optimisation (Suite)

5 Optimisation des sous expressions communes globale :


Pour faire ça de manière générale, il nous faut parcourir le graphe de flot de contrôle et
récolter les informations suivantes :
• Les expressions produites : x op y est produite par un bloc si elle est évaluée dans le bloc
et si ni x ni y ne sont redéfinis ensuite dans ce bloc
• Les expressions supprimées : x op y est supprimée par un bloc B si x ou y est redéfini
dans le bloc sans que l’expression soit recalculée après à l’intérieur du bloc.
• Les expressions disponibles : x op y est disponible en un point p du programme si tous
les chemins depuis le début du programme jusqu’a p l’évalue et si après la dernière de
ces évaluations sur chacun de ces chemins, il n y a pas de nouvelle affectation de x ou y.

5.1 Algorithme de calcul de Prod[ B] :

expressions produites par le bloc B :


• Parcourir le bloc instruction par instruction
• Au départ Prod[ B]= Ø
• à chaque instruction du type x=y op z
o ajouter l’expression y op z à Prod[ B]
o enlever de Prod[ B] toute expression contenant x
Exemple :
Instruction Prod
a := b + c Ø
e := a + d b+c
b := a - d b + c, a + d
c := b + c a+d, a-d
e := a –d a+d, a-d
a+d, a-d
5.2 Algorithme de calcul de Supp[B] :
Expressions supprimées par le bloc B. Soit U ensemble de toutes les expressions du programme

• Au départ Supp[B] =Ø
• Pour chaque instruction du bloc du type x=y op z, mettre dans Supp[B] toutes les expressions de
U qui contiennent x à condition qu’elle ne soit pas recalculée plus loin dans le bloc

5.3 Algorithme de calcul des In(B) et Ex (B) :

Intersection entre
tous les
prédécesseurs
5.4 Algorithme d’élimination des expressions communes globales:

Pour chaque instruction (i) x := x op z du bloc B tq y op z est disponible et ni y ni z ne sont


modifiées avant (i) dans B
1. Chercher la (les) évaluations de y op z en remontant le graphe de flot de contrôle et en
visant tous les chemins possibles
2. Créer une nouvelle variable u
3. Remplacer la (les) dernière (s) évaluation(s ) w := y op z par :
u := y op z
w :=u
4. Remplacer l’instruction (i) par (i) x :=u

Exemple : Sur l’exemple les expressions à étudier sont e1, e2, e3 et e5 On obtient le graphe suivant
e 1 apparait dans l’instruction 13 du
bloc B4
Est- elle disponible ? e1 ϵIn(B4) oui
la dernière évaluation c ‘est l’instruction
(1) qui devient donc :
1) t3 :=m-1
1’) t1 :=t3
et l’instruction (13) devient t1 :=t3
e 2 apparait dans l’instruction (12) du
bloc B3
Est- elle disponible ? e2 ϵIn(B3) oui
la dernière évaluation c ‘est l’instruction
(2) qui devient donc :
2)t4 :=m+n
2’) t2 :=t4
et l’instruction (12) devient c :=t4
e 3 apparait dans l’instruction 9 du
bloc B2 et l’instruction 15 du B4
- 9 de B2
Est- elle disponible ? e 3 ϵIn(B2) non
Donc on ne peut pas l’éliminer.
-15 de B4
la dernière évaluation c ‘est l’instruction
(9) qui devient donc :
9)t5:=a+1
9’) d :=t5
et l’instruction (15) devient c :=t5
e5 apparait dans (6) de B2,(11) de B3
et (14) de B4
- (6) de B2 Est- elle disponible ? e 5
ϵIn(B2) non
-11 de B3 Est- elle disponible ? e 5
ϵIn(B3) oui la dernière évaluation c‘est
l’instruction (6) qui devient donc :
6)b:=2*c
6’) b :=t6
et l’instruction (11) devient d :=t6
-14 de B4 Est- elle disponible ? e 5
ϵIn(B4) oui la dernière évaluation c‘est
l’instruction (6) qui devient donc :
6)t7:=2*c
6’’) t6 :=t7
et l’instruction (14) devient b :=t7
6 Propagation de copies
Les instrucctions de copie (i) x=y peuvent détreminées en remplaçant x par y dans chaqye
expression utilisant x à un point p si et seulement si :
• L’instruction (i) est la seule définition de x qui atteint le point p
• Sur chaque chemin de (i) à p (y compris les boucles) il n’ya aucune affectation de y

Références :
- Cours de « Saoudi Lalia »
- Compilation, théorie des langages ; cours de « l’université Bretagne occidentale »

Vous aimerez peut-être aussi