Compilateurs

Quelle caractéristique d'une représentation intermédiaire en forme SSA est correcte ?

  1. AChaque variable n'est affectée qu'exactement une fois dans le programme
  2. BToutes les variables sont placées en mémoire et non en registres
  3. CLe programme est réécrit sans aucune instruction de branchement conditionnel
Afficher la réponse et l'explication

Réponse : A. Chaque variable n'est affectée qu'exactement une fois dans le programme

En forme SSA, les variables sont renommées pour n'être affectées qu'une fois, et aux points de jonction une fonction φ choisit la valeur. Par exemple, une variable x affectée deux fois est scindée en x1 et x2, ce qui rend explicite laquelle est utilisée. Les relations définition-utilisation étant claires, les optimisations comme la propagation de constantes ou l'élimination de code mort sont facilitées. Les branchements étant traités par les fonctions φ, les instructions de branchement ne disparaissent pas. Les variables ne sont pas non plus placées en mémoire ; elles sont le plus souvent traitées comme candidates aux registres.

S'entraîner sur ce thème Retour au thème

Autres questions sur Compilateurs

  1. Mis en forme SSA, le code ci-dessus comporte après l'instruction if une expression du type « x3 = φ(x1, x2) ». Quel est le rôle de cette fonction φ ?
  2. Quel exemple de repliement de constantes (constant folding) est correct ?
  3. En appliquant de façon répétée la propagation et le repliement de constantes au code ci-dessus, quel code obtient-on finalement ?
  4. Quelle description de l'élimination des sous-expressions communes appliquée au code ci-dessus est correcte ?
  5. Qu'élimine la suppression de code mort (dead code elimination) ?

Comparatifs sur ce thème