Post on 03-Apr-2015
CNRS, UMR 3192, Lab-STICCCentre de Recherche - BP 92116F-56321 Lorient Cedex - FRANCE
Modèle CDFG
une proposition pour débattre...
Philippe Coussy, Dominique Heller
2
Plan• Bloc de base
• Branchement conditionnel
• Boucle
• Fonction
• Dépendances de données inter BB
3
CDFG
• Un CDFG est un graphe orienté hiérarchique G(V,E) avec V l ’ensemble des nœuds et E l ’ensemble des arcs. Les arcs représentent le flow de contrôle entre les nœuds. Les nœuds aussi nommés blocs sont de deux types: basiques notés BB ou hiérarchiques notés BH.
4
Bloc de base BB
• Suite linéaire d’instructions un BB ne contient pas de boucle un BB ne contient pas de branchement conditionnel hormis la première instruction, il n’y a pas d’instruction dans
un BB qui est la cible d’un branchement pas de point d ’entrée intermédiaire dans un BB pas de point de sortie intermédiaire dans un BB
• un GOTO hors d ’un if serait donc la dernière instruction d ’un BB ???
Instruction possible appel de fonction affectation
Un BB peut être représenté par un DFG
5
Branchement conditionnel
• Utilisation d’un modèle unique pour représenter les branchements conditionnels
• un branchement conditionnel est un bloc hiérarchique contenant Un nœud fork, un nœud join, un ensemble de blocs
hiérarchiques, un ensemble d’arcs
• il est annoté avec le type de branchement conditionnel qu’il représente if(2) pour un if-then-else if(3) pour un if à trois branche switch(4) pour un switch-case à 4 cas
6
Branchement conditionnel
• Noeuds Fork (BB)
contient le calcul des prédicats
Join (BB) non fusionné avec le BB suivant contiendra les « PHY nodes » si la forme SSA est utilisée
Ensemble de blocs hiérarchiques successeurs du nœud fork et prédécesseur du nœud join
• Arcs Les arcs de contrôle entre le nœud fork et l’ensemble des
blocs hiérarchiques sont annotés avec les prédicats évalués dans le nœud fork
7
Branchement conditionnel : représentation
P(y)
... ...
join
If-then-else
x = c*2;‘ y= (x==0);‘ z= (x== 1);
...
...
join
... ......
Switch-case
‘ x = c*2;‘ y = a<b;‘ z = !y;
P(z) P(y) P(z)
Tag if(2) Tag switch(N)
P(...)
8
Branchement conditionnel : représentation
If « à 3 branches »
P(x)
...
join
‘ x = (a<b);‘ y = (a>b);
‘ z = (a==b);
P(z)
... ...
P(y)
Tag if(3)
9
Branchement conditionnel: switch avec un break manquant
x = c*2;‘ y= (x==0);‘ z= (x== 1);
...
join
......
P(z)
Tag switch(N)
P(...)
...
...
P(y)
10
Boucle
• Représentation unique
Init
Corps de boucle
test de condition d ’arrêt
Next
test de condition d ’arrêt Bloc suivant
11
Init
BB1
test de condition d ’arrêt
Join
test de condition d ’arrêt
Bloc suivant
FORK
BB2 Cont
Boucle avec continue
Next
IF(2)
OK ssi le code est de la forme suivante
If (cond)continue;
elseBB2;
12
Init
BB1
test de condition d ’arrêt
Join
test de condition d ’arrêt
Bloc suivant
FORK
vide Cont
Boucle avec continue
Next
IF(2)
NOK si le code à un else implicite.Il faudra une transformation lors de la création du graphepour utiliser le modèledu slide précédent
If (cond)continue;
BB2;BB2
13
Init
BB1
test de condition d ’arrêt
Join
test de condition d ’arrêt
Bloc suivant
FORK
BB2 Cont
Boucle avec continue
Next
IF(2)
If (cond)continue;
elseBB2;
BB3;
BB3
NOK si le code à un else implicite.Il faudra une transformation lors de la création du graphepour utiliser le modèledu slide précédent
14
Init
BB1
test de condition d ’arrêt
Next
test de condition d ’arrêt
Bloc suivant
FORK
BB2 Break
Boucle avec Break
15
Fonction
• Mise en ligne duplication de chaque appel
un CDFG par appel de fonction (i.e. des nœuds hiérarchiques)
• Non mise en ligne c’est une opération atomique et le BB n ’est pas scindé
16
Dépendances de données
• Expression des dépendances de données entre BB pour les live in et live out par exemple
A REGARDER POUR LA PROCHAINE REUNION
dépendances producteur consommateur nécessaires Par défaut utilisation de la forme SSA ou non SSA ?
Si un BB utilise une fonction dont on ne connais pas le code• => ignorer ce BB ou ajouter dans live in et live out les variables
globales