Graphe de flot de contrôle

Graphe de flot de contrôle
Graphes de flot de contrôle simplifiées[1]

En informatique, un graphe de flot de contrôle (abrégé en GFC, control flow graph ou CFG en anglais) est une représentation sous forme de graphe de tous les chemins qui peuvent être suivis par un programme durant son exécution.

Sommaire

Vue d'ensemble

Dans un GFC, les nœuds du graphe representent un bloc de base, c'est-à-dire un bout de code d'un seul tenant sans sauts ni cibles de sauts. Les cibles de sauts marquent le début d'un bloc de base, tandis que les sauts en marquent la fin. Les arcs représentent les sauts dans le flot de contrôle. La plupart des représentations d'un CFG comprennent deux blocs spéciaux : le bloc d'entrée, par lequel on entre dans le graphe de flot de contrôle et le bloc de sortie, par lequel on le quitte.

Les diagrammes de flot de contrôle sont essentiels pour de nombreuses optimisations de compilation et outils d'analyse statique.

Exemple

Prenons le fragment de code suivant :

0: (A) t0 = read_num
1: (A) if t0 mod 2 == 0
2: (B)   print t0 + " is odd."
3: (B)   goto 5
4: (C) print t0 + " is even."
5: (D) end program

On a quatre blocs de base :

  • le bloc A, allant de la ligne 0 à la ligne 1
  • le bloc B, allant de la ligne 2 à la ligne 3
  • le bloc C, constitué par la ligne 4
  • le bloc D, constitué par la ligne 5

A est le bloc d'entrée. D est le bloc de sortie. Les lignes 4 et 5 sont des cibles de sauts.

Le graphe de flot de contrôle associé à ce fragment comporte les arcs suivants :

  • de A en B,
  • de A en C (saut si t0 est impair),
  • de B en D (saut inconditionnel)
  • de C en D.

Atteignabilité

L'atteignabilité est une autre propriété de graphe utile en optimisation.

Si un bloc ou une portion du graphe n'est pas connecté au bloc d'entrée, ce bloc ne peut jamais être atteint durant l'exécution, et il s'agit de code mort qui peut être supprimé sans danger.

Si le bloc de sortie ne peut pas être atteint, c'est le signe d'une boucle infinie. Toutes les boucles infinies ne sont pas détectables, bien entendu, voir le problème de l'arrêt.

Le code mort et certaines boucles infinies sont possibles même si le programmeur ne les a pas codées explicitement ainsi. En effet, les optimisations comme la propagation de constantes et le constant folding suivis par des enchaînements de sauts (jump threading) peuvent réduire plusieurs blocs de base en un seul, ce qui fait que des arcs sont supprimés du GCF, ce qui peut déconnecter certaines partie du graphe.

Relation de domination

On dit qu'un bloc M domine un bloc N si chaque chemin qui atteint le bloc N passe par M. Le bloc d'entrée domine tous les blocs. En sens inverse, on dit qu'un bloc M postdomine un bloc N si chaque chemin de N vers le bloc de sortie passe par M. Le bloc de sortie postdomine tous les blocs.

Un bloc M domine immédiatement un bloc N si M domine N et s'il n'existe pas de bloc intermédiaire tel que M domine P et P domine N. En d'autres termes, M est le dernier dominant pour tous les chemins depuis le bloc d'entrée vers N. Chaque bloc a un seul dominant unique. De même, on peut parler de postdomination immédiate.

L'arbre de domination est un graphe décrivant les relations de domination immédiate. Ce graphe est un arbre puisque chaque bloc a un seul dominant immédiat. La racine de l'arbre est le bloc d'entrée. L'arbre de domination peut être déterminé efficacement grâce à l'algorithme de Lengauer-Tarjan. En sens inverse, l'arbre de postdomination a pour racine le bloc de sortie.

Arcs spéciaux

Pour les besoins du traitement, on a besoin d'introduire artificiellement certains arcs et d'en traiter à part d'autres.

Un arc critique est un arc qui n'est ni le seul arc à partir de son bloc source, ni le seul arc à arriver à son bloc destination. De tels arcs doivent être coupés en deux : un nouveau bloc doit être créé au milieu de l'arc critique de manière à pouvoir traiter cet arc sans affecter les autres arcs.

Un arc en arrière est un arc qui pointe vers un bloc déjà rencontré lors d'un parcours en profondeur du graphe. Ces arcs sont typiques des boucles.

Un arc anormal est un arc dont la destination est inconnue. Les constructions de gestion d'exception peuvent en produire. Ces arcs ont tendance à empêcher l'optimisation.

Un arc impossible, connu également sous le nom de faux arc est un arc qui a été ajouté au graphe uniquement pour préserver la propriété que le bloc de sortie postdomine tous les blocs. Il ne peut jamais être parcouru.

Traitement des boucles

L'en-tête de boucle est le point d'entrée de la boucle. C'est un bloc dominant qui est la cible de l'arc en arrière de la fin de boucle. Il domine tous les blocs du corps de la boucle.

Supposons qu'un bloc M soit dominant tout en étant la cible de plusieurs arcs, dont certains sont des arcs en arrière, de telle sorte que M est un en-tête de boucle. Il est intéressant pour plusieurs optimisations de diviser M en deux blocs, Mpréboucle et Mboucle. Le contenu de M et des arcs inverses vont dans Mboucle, tandis que les autres arcs sont modifiés pour pointer vers Mpréboucle. Enfin, un nouvel arc est ajouté pour permettre de passer de Mpréboucle à Mboucle (et Mpréboucle domine donc immédiatement Mboucle). Au départ, Mpréboucle ne contient pas d'instructions, mais des passes d'optimisation comme le déplacement des invariants de boucle peuvent lui ajouter du contenu. Mpréboucle est appelé le pré-entête de boucle tandis que Mboucle est l'entête de boucle.

Références

Voir aussi

Articles connexes

Liens externes


Wikimedia Foundation. 2010.

Contenu soumis à la licence CC-BY-SA. Source : Article Graphe de flot de contrôle de Wikipédia en français (auteurs)

Игры ⚽ Нужно сделать НИР?

Regardez d'autres dictionnaires:

  • Flot admissible — Problème de flot maximum Un exemple de graphe de flot avec un flot maximum. la source est s, et le puits t. Les nombres indiquent le flot et la capacite. Le problème de flot maximum consiste a trouver un flot réalisable depuis une source unique… …   Wikipédia en Français

  • Probleme de flot maximum — Problème de flot maximum Un exemple de graphe de flot avec un flot maximum. la source est s, et le puits t. Les nombres indiquent le flot et la capacite. Le problème de flot maximum consiste a trouver un flot réalisable depuis une source unique… …   Wikipédia en Français

  • Problème de flot maximum — Un exemple de graphe de flot avec un flot maximum. la source est s, et le puits t. Les nombres indiquent le flot et la capacité. Le problème de flot maximum consiste à trouver un flot réalisable depuis une source unique et vers un puits unique… …   Wikipédia en Français

  • Bloc de base — En informatique, un bloc de base[1] est une portion du code source d un programme caractérisé par certaines propriétés utiles qui le rendent facile à analyser. Les compilateurs décomposent la plupart du temps les programmes en leurs blocs de base …   Wikipédia en Français

  • Parallélisation interprocédurale de programmes scientifiques — Pour les articles homonymes, voir PIPS. PIPS Développeur Centre de Recherc …   Wikipédia en Français

  • Organigramme de programmation — Un organigramme de programmation (parfois appelé algorigramme, logigramme ou plus rarement ordinogramme) est une représentation graphique normalisée de l enchaînement des opérations et des décisions effectuées par un programme d ordinateur.… …   Wikipédia en Français

  • Projet:Mathématiques/Liste des articles de mathématiques — Cette page n est plus mise à jour depuis l arrêt de DumZiBoT. Pour demander sa remise en service, faire une requête sur WP:RBOT Cette page recense les articles relatifs aux mathématiques, qui sont liés aux portails de mathématiques, géométrie ou… …   Wikipédia en Français

  • Liste des articles de mathematiques — Projet:Mathématiques/Liste des articles de mathématiques Cette page recense les articles relatifs aux mathématiques, qui sont liés aux portails de mathématiques, géométrie ou probabilités et statistiques via l un des trois bandeaux suivants  …   Wikipédia en Français

  • SYSTÈMES DYNAMIQUES DIFFÉRENTIABLES — Sans doute née avec le mémoire que Poincaré écrivit en 1881 «sur les courbes définies par des équations différentielles», où l’étude quantitative (analytique) locale des équations différentielles dans le champ complexe est remplacée par leur… …   Encyclopédie Universelle

  • Architecture Dataflow — Un ordinateur dataflow (flot de données) décrit une architecture où les données sont des entités actives qui traversent le programme de manière asynchrone, contrairement à l architecture classique von Neumann où elles attendent passivement en… …   Wikipédia en Français

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”