• Sonuç bulunamadı

Les boucles sont des structures de contrˆole qui permettent d’ex´ecuter plusieurs fois un mˆeme ensemble d’instructions. Le contexte d´elimit´e par une boucle correspond donc `

a l’ensemble des ex´ecutions des instructions qu’elle contient, depuis son point d’entr´ee jusqu’`a sa sortie.

On consid`ere un ensemble de blocs comme une boucle naturelle si un des blocs de cet ensemble domine1 tous les autres et si ce bloc est la destination d’un arc retour. On appelle alors ce bloc la tˆete de boucle et pour le reste des blocs on parlera g´en´eralement de corps de boucle. Cette d´efinition ne s’applique qu’aux boucles r´eguli`eres mais il est possible de rencontrer des boucles irr´eductibles avec plusieurs entr´ees, auquel cas la tˆete de boucle n’est pas d´efinie. Dans la pratique, on utilisera la gestion de ces cas particuliers par Otawa qui est capable de restructurer ces boucles non r´eguli`eres. Ainsi de notre cˆot´e, on ne rencontrera que des boucles r´eguli`eres dans les CFGs sur lesquels nous travaillerons.

1. Dans un CFG, un bloc A domine un bloc B si tous les chemins qui m`enent du premier bloc au bloc B passent par A

CHAPITRE 5. APPLICATION AU LANGAGE D’ANNOTATION FFX

Le contexte d´elimit´e par une boucle regroupe donc l’ensemble des blocs qui la composent. Ainsi, l’entr´ee dans ce contexte correspond `a l’ensemble des arcs qui ont pour destination la tˆete de la boucle et qui ne sont pas des arcs retours, et la sortie du contexte est l’ensemble des arcs qui ont pour source un bloc de la boucle (de la tˆete ou du corps) et pour destination un bloc ext´erieur `a la boucle.

Consid´erant une boucle donn´ee, il est possible de s´eparer l’ensemble des blocs d’un CFG en trois partitions que sont la tˆete de la boucle, le corps de la boucle, et les blocs ext´erieurs `a la boucle (ext ). L’automate de la figure 5.4 r´esume sch´ematiquement les entr´ees et sorties d’un contexte de boucle en fonction de ces partitions.

L

L

tête --> extext --> tête

corps --> ext

Figure 5.4 – Entr´ees et sorties sch´ematiques d’un contexte de boucle sous forme d’automate hi´erarchique.

En appliquant ce partitionnement `a un vrai CFG, il est donc possible de construire un automate hi´erarchique repr´esentant le contexte d’une boucle tout en n’utilisant que les adresses des blocs qui la composent.

La figure 5.5a montre un exemple de CFG comportant une boucle ainsi que l’ap- partenance des blocs aux trois partitions cit´ees pr´ec´edemment. La figure 5.5b quant `

a elle repr´esente le contexte de la boucle sous forme d’automate hi´erarchique. On re- trouve bien les entr´ees vers la tˆete de boucle et les sorties depuis n’importe quel point de la boucle vers l’ext´erieur. Notons que les adresses n´ecessaires pour construire cet automate sont bien celles des seuls blocs qui composent la boucle.

Dans l’´etiquette de la transition d’entr´ee du contexte de boucle L, on utilisera l’´etoile (* → 0x85C8) pour faire la correspondance avec n’importe quel arc du CFG ayant pour destination la tˆete de boucle d’adresse 0x85C8. Notons qu’on aurait pu exclure de cette transition d’entr´ee les diff´erents arcs retours de la boucle (ici l’arc 0x85D4 → 0x85C8), mais le contexte d´elimite justement la boucle en elle-mˆeme. Cela implique qu’il est impossible de rencontrer les arcs retours ailleurs que dans le contexte en question, ce qui, par construction, exclut la possibilit´e de rentrer dans ce contexte via un des arcs retour. On peut donc se permettre d’omettre l’exclusion des arcs retours dans cette ´

5.3. DIFF´ERENTS CONTEXTES 0x85C8 0x8280 0x85EC 0x85D4 ext tête corps ext (a) CFG

L

L

<

0x85D4,*

<

*,0x85C8

<

<

*-

{<

*,0x85C8

}<

-

<

0x85D4,0x85D4

<

<

0x85D4,0x85C8

<

0x85C8,*

<

<

-

<

0x85C8,0x85D4

<

<

0x85C8,0x85C8

<

{

}

{

,

<

}

, (b) HFA

Figure 5.5 – Un CFG comportant une boucle (a) et le HFA repr´esentant ce contexte de boucle (b).

autorise avec l’´etoile toutes les transitions issues des blocs de la boucle en excluant celles qui restent internes `a la boucle. On obtient ainsi un automate particuli`erement d´etaill´e dans lequel beaucoup d’´etiquettes ne correspondent `a aucun arc du CFG mais par la suite, l’op´eration de produit permettra de les supprimer.

En utilisant Otawa, il est possible de simplifier cet automate grˆace aux outils de typage de classification des blocs des diff´erentes boucles d’un programme. Ainsi, grˆace `a une pr´e-analyse du CFG, il est possible de ne conserver que les ´etiquettes correspondant `

a des arcs existants.

*,0x85C8

L

L

<

0x85C8,0x85EC

<

*,0x85C8

<

<

*-

{<

}<

Figure 5.6 – HFA repr´esentant un contexte de boucle apr`es simplification des transitions sortantes.

La figure 5.6 montre une version simplifi´ee de l’automate de la figure 5.5b apr`es utilisation de la classification des arcs fournie par Otawa. La transition permettant de sortir du contexte correspond d´esormais `a un seul arc du CFG (0x85C8 → 0x85EC), qui faisait bien partie des transitions sortantes du contexte L dans la figure 5.5b

Notons ´egalement qu’on ne distingue pas ici les diff´erentes it´erations de la boucle, simplement la premi`ere entr´ee ainsi que la sortie, mais il est possible d’utiliser les mˆemes partitions pour exprimer le contexte correspondant `a une it´eration.

CHAPITRE 5. APPLICATION AU LANGAGE D’ANNOTATION FFX

Benzer Belgeler