Beruflich Dokumente
Kultur Dokumente
nsiie, semestre 3
10 janvier 2011
+
[]
Const
Var
t
1.
Const
Var
a)
[] :=
Var
t
b)
*
Const
3
+
Var Const
i
Var
x
if then else
<=
Var
c
()
:=
Const t
2
new array of
integer Const
Const
4
c)
2
2. On part de ltat G = {x 7 4; t 7 `}, H = {` 7 h3, 3i} et E = {i 7 0}. On a
larbre de drivation suivant :
G, H, E/t[3*i] := 2 + x G, {` 7 h6, 3i}, E
criture dans un tableau
G, H, E/t G, H, E/`
Variable globale
G, H, E/3 * i G, H, E/0
Oprateur binaire
G, H, E/3 G, H, E/3
Constante
G, H, E/i G, H, E/0
Variable locale
G, H, E/2 * x G, H, E/6
Oprateur binaire
G, H, E/2 G, H, E/2
Constante
G, H, E/x G, H, E/4
Variable globale
H(`) = h3, 3i
00<2
3. On value la smantique du programme, il faut donc valuer le corps principal dans
ltat G = {x 7 0}, H = , E = . Pour cela on applique la rgle squence. On
value x := 1 ce qui nous mne ltat G0 = {x 7 1}, H, E.
On value x := f(x) dans ce nouvel tat, ce qui nous amne valuer f(x). Il
faut donc valuer le corps de f dans ltat G0 , H, Ef1 = {y 7 1; z 7 0; f 7 0}.
On value le if (Conditionnelle (sinon)), on doit valuer f(y - 1). On doit donc
valuer le corps de f dans le contexte G0 , H, Ef2 = {y 7 0; z 7 0; f 7 0}, ce
qui mne ltat G0 , H, {y 7 0; z 7 0; f 7 2}. Par consquent, lvaluation de
f(y - 1) ne change pas ltat G0 , H, Ef1 et produit la valeur 2. x := f(y - 1)
mne donc ltat G00 = {x 7 2}, H, Ef1 . Puis, z := x * y mne G00 , H,
{y 7 1; z 7 2; f 7 0}. Enfin, f := z - 3 mne G00 , H, {y 7 1; z 7 2; f 7 1}.
Par consquent, x := f(x) mne ltat final G000 = {x 7 1}, H, E.
2.
$sp
1
15
1
15
0
$sp
1
15
0
0
8
$sp
1
15
0
0
8
0
$sp
$sp
1
15
0
2
$sp
1
15
2
2
-1
$sp
Trame de f :
sauvegarde de $ra
sauvegarde de $a0
$sp
$sp
4.
$sp
$sp
$sp
$sp
$a0 ?
$v0 ?
$ra ?
$t0 ?
$s0 ?
15
$a0 ?
$v0 ?
$ra ?
$t0 ?
$s00
15
$sp
$sp
$a0 ?
$v0 ?
$ra ?
$t0 ?
$s01
15
1
$sp
$a01
$v0 ?
$ra ?
$t0 ?
$s01
15
1
$a01
$v0 ?
$ra15
$t0 ?
$s01
$sp
15
1
$a01
$v0 ?
$ra15
$t0 ?
$s01
$sp
$a01
$v0 ?
$ra15
$t0 ?
$s01
$a01
$v0 ?
$ra15
$t00
$s01
$a01
$v0 ?
$ra15
$t00
$s01
$a00
$v0 ?
$ra15
$t00
$s01
$a00
$v0 ?
$ra8
$t00
$s01
15
1
15
1
8
15
1
8
15
1
8
15
1
8
$sp
$a00
$v0 ?
$ra8
$t00
$s01
$sp
$a00
$v0 ?
$ra8
$t00
$s01
$sp
$sp
$sp
$a00
$v02
$ra8
$t00
$s01
$a00
$v02
$ra8
$t00
$s01
$a01
$v02
$ra8
$t00
$s01
$sp
15
1
8
$sp
$a01
$v02
$ra8
$t00
$s02
$sp
15
1
8
15
1
8
$sp
$a01
$v02
$ra8
$t02
$s02
15
1
8
$sp
$a01
$v0-1
$ra8
$t02
$s02
$a01
$v0-1
$ra15
$t02
$s0-1
15
1
8
$sp
$a01
$v0-1
$ra15
$t02
$s02
15
1
8
$a01
$v0-1
$ra15
$t02
$s02
1: a := b;
2: d := f + c;
/ 3: d > 0
4: e := d;
5: f <= 0
'
6: c := e
7: c := f
w
8: b := f + d;
9: f := d - 2
2. Numro des instructions sur le graphe de flot.
point vivantes aprs vivantes avant
1
c
f
b c
f
2
d
f
c
f
3
d
f
d
f
4
d e f
d
f
5
d e f
d e f
6
d
f
d e f
7
d
f
d
f
d
d
f
8
9
d
f
d
3. Comme indiqu dans le cours, on peut supprimer toutes les instructions dont la
variable affect nest pas vivante aprs. On peut donc dans un premier temps
supprimer 1 6 7 8. Si on recalcule la dure de vie, on peut alors aussi supprimer
4 avec le mme argument.
4.
b
f
d
e
Pas darte de prfrence entre f et c car linstruction 6 cre une interfrence entre
ces deux variables.
5. On ne peut pas simplifier : les noeuds trivialement colorables b et e ont des artes
de prfrence.
On peut fusionner d et e car le critre de George sapplique : les voisins de e, i.e.
f, sont inclus dans ceux de d.
b
f
de
b
f
de
On simplifie b.
b
f
de
f
c
de
On simplifie a c de. Quand on dpile, on voit que f doit effectivement tre spille.
On obtient :
b
f
d
e