Vous êtes sur la page 1sur 2

Université Djilali Bounaama Khemis Miliana

Master1 Ingénierie du logiciel


TD de compilation

Travaux dirigés N° 2

Exercice 1. On considère le code intermédiaire suivant :

1. Donner les instructions tête


2. Donner les blocs de base
3. Construire le graphe de flot de contrôle
Exercice 2. On considère les expressions suivantes :
( a + a * (b - c) ) + (b - c) * d
(a+b)*(c+d)/(a-c)*(b+d)*e
1. Générer le code intermédiaire correspondant
2. Proposer une optimisation pour ces expressions

Exercice 3. On étudie dans cet exercice quelques optimisations sur du code trois adresses
découpé en blocs de base. On considère le petit programme suivant :
for i :=0 to 10 {
a :=i+1 ;
b :=i+1 ;
c :=i+2 ;
a+b ; }
1. Traduire le programme en code trois adresses.
2. Découper ce code trois adresses en blocs de base.
3. Représenter le graphe de flot de contrôle ainsi obtenu.
4. Effectuer une élimination de sous-expressions communes sur chacun des blocs.
5. Effectuer une élimination de code mort sur chacun des blocs.

-1-
Exercice 4. Soit le code suivant:

i=m−1;
j=n;
v=a[n];
while ( true )
{
do { i = i + 1 ; } while ( a [ i ] < v ) ;
do { j = j − 1 ; } while ( a [ j ] > v ) ;
i f ( i >= j ) break ;
x=a[i]; // interchanger a[i] et a[j]
a[i]=a[j];
a[j]=x;
}
x=a[i]; // interchanger a[i] et a[n]
a[i]=a[n];
a[n]=x;

1. Donner le code intermédiaire correspondant (code 3 adresses)


2. Construire le graphe de flot de contrôle
3. Identifier les différentes boucles
4. Optimiser le code trouvé

-2-