Master Info - 2014-2015 Compilation TD4 - Optimisation Dans la suite nous regardons les optimisations ind´ependantes de machine cible. Elles sont en g´en´eral r´ealis´ees sur le graphe de flot de contrˆole. Compilateurs (dragon book) Aho, Sethi, Ullman 1 Optimisation : expressions communes On rappelle : ( ∅ AEentry (`) = T if ` = init {AEexit (`0 )|(`0 , `) ∈ f low(G)} AEexit (`) = AEentry (`)\killAE (`) ∪ genAE (`) Exercice 1 Optimisation expressions communes Soit le code ` a trois adresses suivant : (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ˆole. 2. On cherche a ` r´ealiser l’optimisation des sous expressions communes. Pour chaque bloc, calculer les ensembles d’expressions produites et supprim´ees : Prod et Sup. 3. Calculer les ensembles des expressions disponibles en entr´ee et en sortie de chaque bloc. 4. Avec ce r´esultat, optimiser le code. Exercice 2 Avec une boucle Mˆemes questions avec ce programme : x:=a+b; y:=a*b; while(y>a+b) do a:=a+a; x:=a+b; done TD4 MIF12, Master Info - 2014-2015, L. Gonnord & E. Guillou 1/2 2 Autre analyse : variables actives Une variable de gauche d’une affectation est tu´ee par le bloc. Une variable apparaissant dans un bloc est dite g´ener´ee. ( ∅ if ` = f inal LVexit (`) = S 0 0 {LVentry (` )|(` , `) ∈ f low(G)} LVentry (`) = LVexit (`)\killLV (`) ∪ genLV (`) Exercice 3 Variables actives G´en´erer le graphe de flot de contrˆ ole 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} Sur ce graphe de flot : ´ 1. Ecrire et r´esoudre le syst`eme d’´equations relatif aux ensembles Gen, Kill, In et Out pour les variables actives, en prenant bien soin d’initialiser les ensembles correctement. 2. Supprimer les instructions inutiles (“code mort”). Exercice 4 Variables actives Apr`es g´en´eration de code, on obtient le programme suivant : B1 d1 : i := m − 1 d2 : J := n d3 : a := u1 B2 d4 : i := i + 1 d5 : j := j − 1 B3 d6 : a := u2 B4 d7 : i := u3 Supprimer le code mort. TD4 MIF12, Master Info - 2014-2015, L. Gonnord & E. Guillou 2/2
© Copyright 2025 ExpyDoc