Énoncé et corrigé en Postscript | Réponses intégrées ou à la demande |
Examen de majeure 2 Compilation (Durée 2h) 20 mars 2000 |
On attachera une importance particulière à la clarté, à la précision, mais aussi à la concision de la rédaction. Les questions 1 et 4 sont indépendantes, ainsi que certaines sous-questions d'autres parties.
|
function sum (var n : integer) : integer; begin if n > 0 then sum := n + sum (n-1) else sum := 0 end; |
|
$a0
, $v0
et $t0
qui sont aussi des temporaires
particuliers, pré-coloriés (on réserve le préfixe $
aux
registres machine). Pour simplifier, on traite les registres spéciaux
($sp
, $ra
et $zero
) à part: on ne les considérera
pas comme des temporaires et on les exclut de toutes les phases d'analyse
(durée de vie, interférence, allocation de registres).
1: add t, $a0, 1 2: add t, t, $a0 3: add $a0, t, t 4: jal foo 5: add $v0, t, $v0 |
foo
lit $a0
, écrase les trois registres
machines et retourne son résultat dans v0
. On suppose que
le registre $v0
est vivant à la fin du code C.
Donner le code j(C).
|
move
.
|
add p2, q1, $a0 move q2, p2 move q3, p2 |
q2
et q3
sont les seuls
vivants en sortie du
bloc. Donner pour chaque instruction les registres vivants en sortie.
Donner le graphe d'interférence (sans justification).
move q2, p2
et move q3, p2
ensemble en une
macro-instruction mmv q2 q3, p2
(lire ``multi-move'')
qui lit p1
et écrit q2
et q3
. Oper
dans le cours)?
move
:
l'instruction mmv d1 ... dn, s copie le temporaire s
dans les temporaires (dk)k Î 1..n.
|
move
introduites par
des instructions mmv
, puis en simplifiant
ces instructions après l'analyse de durée de vie (en retirant certaines
destinations, donc certains move) comme indiqué à la question 3.4. mmv
et
simplification des instructions move
devenues inutiles par la fusion de leur source et de leur destination.
|
This document was translated from LATEX by HEVEA and HACHA.