Compilateurs
Dans la boucle ci-dessus, quel calcul est concerné par le déplacement d'expression invariante de boucle (sortie de la boucle) ? (x et y ne sont pas modifiés dans la boucle)
for (i = 0; i < n; i++)
a[i] = b[i] * (x * y);
- AL'ensemble de b[i] * (x * y)
- Bx * y
- CL'affectation à a[i]
Afficher la réponse et l'explication
Réponse : B. x * y
Le déplacement d'expression invariante de boucle sort avant la boucle un calcul qui donne la même valeur à chaque itération, pour ne l'effectuer qu'une fois. x et y ne changeant pas dans la boucle, x * y a la même valeur à chaque itération ; on peut calculer t = x * y avant la boucle et écrire a[i] = b[i] * t. b[i] variant avec i, l'ensemble b[i] * (x * y) ne peut pas être déplacé. L'affectation à a[i] écrit un élément différent à chaque itération et reste dans la boucle.