Compilateurs

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 φ ?

if (c) x = 1;
else   x = 2;
y = x + 3;
  1. AChoisir et renvoyer la plus grande des valeurs x1 et x2
  2. BCalculer et renvoyer la somme de x1 et x2
  3. CChoisir x1 ou x2 selon le chemin emprunté
Afficher la réponse et l'explication

Réponse : C. Choisir x1 ou x2 selon le chemin emprunté

En forme SSA, l'affectation de la branche then est nommée x1 et celle de la branche else x2 ; il faut donc indiquer quel x utiliser pour le calcul de y après la jonction. La fonction φ est la notation qui exprime le choix de valeur au point de jonction : x1 si l'on vient de la branche then, x2 si l'on vient de la branche else. Le code machine réel ne comporte pas d'instruction φ, qui est finalement remplacée par des copies de registres ou équivalent. Cela n'a rien à voir avec la comparaison ou la somme des valeurs.

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

Autres questions sur Compilateurs

  1. Quel exemple de repliement de constantes (constant folding) est correct ?
  2. 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 ?
  3. Quelle description de l'élimination des sous-expressions communes appliquée au code ci-dessus est correcte ?
  4. Qu'élimine la suppression de code mort (dead code elimination) ?
  5. Quelle combinaison d'avantage et d'inconvénient de l'expansion en ligne (inlining) des fonctions est correcte ?

Comparatifs sur ce thème