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.