De nombreux algorithmes nécessitent une utilisation intensive de
code de contrôle (notamment sous forme de boucles imbriquées Do
i=lb,ub ... ). Afin d'éviter certains parcours inutiles, il est
parfois intéressant d'ajouter le test if (si cette
condition n'est pas respectée, le corps de la boucle n'est de toutes
façons pas exécuté) et de le remonter au plus tôt pour stopper
le parcours si nécessaire. Ceci permet alors d'éviter l'évaluation
inutile des indices de boucles et autres tests imbriqués.
De plus, il arrive dans certains cas qu'une boucle se comporte en fait
comme un test: le corps de la boucle ne sera évalué que selon une
certaine condition sur les bornes. Donc, si nous arrivons à montrer
que , alors nous pouvons remplacer la boucle par une
simple affectation de l'indice ( Do i=lb,ub devient alors
if
then
). Sur l'exemple de la
figure 3, nous pouvons remplacer les boucles sur les
indices
et
par deux tests et deux affectations
équivalents. Les deux tests ainsi qu'une affectation seront remontés
d'un ou plusieurs niveaux de boucles (le résultat est proposé
figure 4). Cette modification a permis d'obtenir un
gain de 5 sur l'exécution de cet algorithme (redistribution de
matrices dans le cadre de la compilation du langage High Performance
Fortran [12]).
Figure 3: Exemple d'énumération tiré d'un algorithme de redistribution.
Figure 4: Exemple d'énumération - après reconnaissance des tests cachés.