03 - Data Flow
Transcript of 03 - Data Flow
03 - Data FlowINF889A
Analyse de programme pour la sécurité logicielle
Jean Privat
Université du Québec à Montréal
Hiver 2020
Jean Privat (UQAM) 03 - Data Flow INF889A Hiver 2020 1 / 49
Plan
1 Aperçu des analyses data flow
2 Un peu de théorie mathématique
3 Cadre monotone
4 Algorithmes
5 Analyses classiques
Jean Privat (UQAM) 03 - Data Flow INF889A Hiver 2020 2 / 49
Aperçu des analyses data flow
Jean Privat (UQAM) 03 - Data Flow INF889A Hiver 2020 3 / 49
Analyse data flow
• Stratégie unifiée d’analyse→ prend en compte le flux de contrôle du programme~/ec
• Cadre pour de nombreux types d’analyse→ en particulier en compilation
• G. Kildall A Unified Approach to Global Program Optimization(POPL’73)
• J. Kam, J. Ullman Monotone data flow analysis frameworks(1977)
Jean Privat (UQAM) 03 - Data Flow INF889A Hiver 2020 4 / 49
Data et flow ?
Flow = Flux de contrôle du programme• Séquence d’instructions• Conditions (if)• Boucles (while)• Etc.
Data = de la donnée arbitraire• Utile et spécifique à l’analyse• Pas forcément de rapport avec les données réelles manipulées
par le programme
Jean Privat (UQAM) 03 - Data Flow INF889A Hiver 2020 5 / 49
Couts et bénéfices
• Prise en compte de sémantique associée à l’analyse• Meilleure précision• Plus compliqué• Plus cher algorithmiquement
Compromis• Le cout vaut-il le gain de précision ?
Jean Privat (UQAM) 03 - Data Flow INF889A Hiver 2020 6 / 49
Data flow, en bref
• À chaque point du programme• Associer de connaissance (l’information, le data)• Transférer l’information à travers les éléments du programme:
produire ou transformer en fonction de l’élément (type del’instruction par exemple)
• Faire circuler l’information (selon le flow)en fusionnant l’information si besoin
Jean Privat (UQAM) 03 - Data Flow INF889A Hiver 2020 7 / 49
Taint analysis: rappel1 a = read();2 b = 10;3 c = b + 5;4 while (a>0) {5 c = b;6 print(b);7 b = read();8 if (b<10) {9 a = b;
10 } else {11 a = c - 1;12 }13 b = c - 1;14 }15 print(c);
• Que donnent 𝐴1, 𝐴2 et 𝐴3 du chapitre précédent ?• Et en vrai ?
Jean Privat (UQAM) 03 - Data Flow INF889A Hiver 2020 8 / 49
Taint analysis et data flow• Identifier les points:
avant et après chaque instruction• Définir l’information :
à chaque point, pour chaque variable: « contaminé » ou « sain »• Définir la circulation:
flux du programme et transfert à travers les instructions• Faire tourner jusqu’à la stabilité
NoteIci le data (« contaminé » et « sain ») n’est pas directement lié auxvaleurs du programme (des entiers)
New game +• Information: à chaque point, pour chaque variable, l’ensemble
des read() contaminants (ou ∅ si sain)
Jean Privat (UQAM) 03 - Data Flow INF889A Hiver 2020 9 / 49
Taint analysis et data flow• Identifier les points:
avant et après chaque instruction• Définir l’information :
à chaque point, pour chaque variable: « contaminé » ou « sain »• Définir la circulation:
flux du programme et transfert à travers les instructions• Faire tourner jusqu’à la stabilité
NoteIci le data (« contaminé » et « sain ») n’est pas directement lié auxvaleurs du programme (des entiers)
New game +• Information: à chaque point, pour chaque variable, l’ensemble
des read() contaminants (ou ∅ si sain)
Jean Privat (UQAM) 03 - Data Flow INF889A Hiver 2020 9 / 49
Questions
• Est-ce que ça fonctionne pour tout programme ?• Est-ce que ça s’adapte à d’autres analyses ?• Est-ce conservateur ?• Est-ce que ça termine ?• Est-ce que l’approximation obtenue est bonne ?• Quelle est la complexité ?
Jean Privat (UQAM) 03 - Data Flow INF889A Hiver 2020 10 / 49
Un peu de théorie mathématique
Jean Privat (UQAM) 03 - Data Flow INF889A Hiver 2020 11 / 49
Avertissement
Quelques structures mathématiques abstraites• de la théorie des graphes• de la théorie des ordres• de l’algèbre générale
C’est un vrai ZOO: on pioche• ce qui nous est utile• ce qui nous permet de comprendre les principes, propriétés et
limitations
Jean Privat (UQAM) 03 - Data Flow INF889A Hiver 2020 12 / 49
Graphes orientés (directed graphs, digraph)
Un graphe (𝑁, 𝐴):• Un ensemble 𝑁 de nœuds (nodes, ou vertices)• Un ensemble d’arcs (arcs, ou edges), paires de nœuds
𝐴 ⊆ 𝑁 × 𝑁• Pas de restriction particulière ni sur 𝑁 ni sur 𝐴.
On représente le flux de contrôle par un graphe• Les nœuds sont des éléments du programmes
(instructions, expressions, etc.)• Les arcs sont « est possiblement exécuté après »
Jean Privat (UQAM) 03 - Data Flow INF889A Hiver 2020 13 / 49
AST vs graphe de flux de contrôle
Distinguer• Les nœuds de l’AST• Des nœuds du graphe de flux de contrôle
→ permet plus de souplesse
Exemple• Ajouts de nœuds de flux supplémentaires
→ L’entrée et la sortie du programme• Associer 0, un ou plusieurs nœuds de flux par nœud d’AST
→ Plus tard ce sera pratique…
Jean Privat (UQAM) 03 - Data Flow INF889A Hiver 2020 14 / 49
Ensembles partiellement ordonnés (poset)Un ensemble partiellement ordonné (𝐿, ⊑) :
• Un ensemble 𝐿• Une relation binaire (⊑) ⊆ 𝐿 × 𝐿
Propriétés• Reflexif: ∀𝑥 ∈ 𝐿 𝑥 ⊑ 𝑥• Antisymétrique: ∀𝑥, 𝑦 ∈ 𝐿 𝑥 ⊑ 𝑦 ∧ 𝑦 ⊑ 𝑥 ⟹ 𝑥 = 𝑦• Transitif: ∀𝑥, 𝑦, 𝑧 ∈ 𝐿 𝑥 ⊑ 𝑦 ∧ 𝑦 ⊑ 𝑧 ⟹ 𝑥 ⊑ 𝑧
VocabulaireSoient 𝑥, 𝑦 ∈ 𝐿 et 𝑋, 𝑌 ⊆ 𝐿
• 𝑦 majore 𝑥 et 𝑥 minore 𝑦 : 𝑥 ⊑ 𝑦• 𝑦 est un majorant de 𝑋 : ∀𝑥′ ∈ 𝑋 𝑥′ ⊑ 𝑦• 𝑥 est un minorant de 𝑌 : ∀𝑦′ ∈ 𝑌 𝑥 ⊑ 𝑦′
Jean Privat (UQAM) 03 - Data Flow INF889A Hiver 2020 15 / 49
Ensembles partiellement ordonnés
Choses notables• Existence d’éléments incomparables• Ensembles possiblement infinis
Exemples de poset
• Les nombres munis de ≤ (ici la relation est totale)• Les sous-ensembles d’un ensemble munis de ⊆• Les nombres entiers positifs munis de la divisibilité• Les classes d’un programme à objets munies de la spécialisation
(l’héritage)
Jean Privat (UQAM) 03 - Data Flow INF889A Hiver 2020 16 / 49
Ensembles partiellement ordonnés
Choses notables• Existence d’éléments incomparables• Ensembles possiblement infinis
Exemples de poset• Les nombres munis de ≤ (ici la relation est totale)• Les sous-ensembles d’un ensemble munis de ⊆• Les nombres entiers positifs munis de la divisibilité• Les classes d’un programme à objets munies de la spécialisation
(l’héritage)
Jean Privat (UQAM) 03 - Data Flow INF889A Hiver 2020 16 / 49
Diagramme de Hasse
Représentation graphique d’un poset• Réduction transitive
→ on dessine ni les arcs de transitivité ni les boucles• En bas ⊑ en haut
→ on dessine pas les têtes de flèches→ pas de traits horizontaux
→ C’est juste une représentation : les arcs et le sens sont implicites
Jean Privat (UQAM) 03 - Data Flow INF889A Hiver 2020 17 / 49
BornesSoient (𝐿, ⊑) un poset, 𝑥, 𝑦 ∈ 𝐿 et 𝑋, 𝑌 ⊆ 𝐿
• 𝑦 est la borne supérieure (join) de 𝑋, notée 𝑦 = ⨆ 𝐿 :𝑦 est le plus petit majorant de 𝑋
• de même pour la borne inférieure (meet) de 𝑋, notée ⨅ 𝐿Pour deux éléments, on a une notation infixe:
• 𝑥 ⊔ 𝑦 = ⨆{𝑥, 𝑦}• 𝑥 ⊓ 𝑦 = ⨅{𝑥, 𝑦}
ImportantUne borne est soit unique, soit n’existe pas
• aucun majorant: pas de borne sup• des majorants mais aucun plus petit: pas de borne sup• un seul plus petit majorant: c’est la borne sup• plusieurs plus petits majorants: pas de borne sup
Exercice: trouver un exemple de chacun des cas
Jean Privat (UQAM) 03 - Data Flow INF889A Hiver 2020 18 / 49
Dessus et dessous• Dessus (top): ⊤ = ⨆ 𝐿 = ⨅ ∅• Dessous (bottom): ⊥ = ⨆ ∅ = ⨅ 𝐿
Attention: n’existent pas nécessairement dans un poset
Note: on peut toujours étendre un poset pour ajouter ⊥ et/ou ⊤Hauteur d’un posetLe plus long chemin (entre ⊥ et ⊤ s’ils existent)
• Possiblement infini• Possiblement fini, même sur un poset infini
QuestionsPour les posets vus,
• Trouver ⊤ et ⊥• Trouver la hauteur
Jean Privat (UQAM) 03 - Data Flow INF889A Hiver 2020 19 / 49
Treillis (lattice)
• Un ensemble partiellement ordonné (𝐿, ⊑)• Qui possède une borne supérieure (⊔) et inférieure (⊓) pour
tout couple d’éléments.Note: demi-treillis si on a que ⊔ ou que ⊓QuestionsParmi les poset vus, lesquels sont des treillis ?
Jean Privat (UQAM) 03 - Data Flow INF889A Hiver 2020 20 / 49
⊑ vs. ⊔ vs. ⊓
Soient 𝑥, 𝑦 ∈ 𝐿. Les 3 propositions sont équivalentes:• 𝑥 ⊑ 𝑦• 𝑦 = 𝑥 ⊔ 𝑦• 𝑥 = 𝑥 ⊓ 𝑦
On peut définir mathématiquement un treillis seulement avec ⊔ et ⊓(et déduire ⊑)
Jean Privat (UQAM) 03 - Data Flow INF889A Hiver 2020 21 / 49
Treillis complets
• Un treillis (𝐸, ⊑)• Qui possède une borne supérieure (⊔) et inférieure (⊓) pour
tout sous-ensemble d’éléments.Question
• Parmi les treillis vus, lesquels sont des treillis complets ?
Notes• ⊤ et ⊥ existent nécessairement dans les treillis complets• Un treillis complet ne peut pas être vide• Un treillis fini est nécessairement complet
Jean Privat (UQAM) 03 - Data Flow INF889A Hiver 2020 22 / 49
Implémenter un treillis
Important un treillis est une structure abstraite mathématique.Quand on implémente, il suffit de respecter les lois. Souvent, undemi-treillis (semilattice) suffit.
• Redéfinir equals (et hashcode)• Définir join (⊔), et si besoin meet (⊓)• Définir <= (⊑)• Déterminer (ou ajouter) ⊥ et ⊤
Mutable ou non mutable ?• E join(E e1, E e2) retourne la borne sup de e1 et e2• void join(E acc, E e) modifie acc
→ encore des compromis…
Jean Privat (UQAM) 03 - Data Flow INF889A Hiver 2020 23 / 49
Algèbre de Boole à 2 éléments
• {⊤, ⊥}• ⊥ ⊑ ⊤• Taille: 2• Hauteur: 1
Utilité• Facile à implémenter (un simple booléen)• Pas recommandé, car on veut souvent garder ⊥ et ⊤ comme
marqueurs à part
Jean Privat (UQAM) 03 - Data Flow INF889A Hiver 2020 24 / 49
Treillis plat
• On part d’un ensemble S→ Un treillis (𝑆 ∪ {⊥, ⊤}, ⊑)→ ∀𝑥 ∈ 𝑆 ⊥ ⊑ 𝑥 ⊑ ⊤→ ∀𝑥, 𝑦 ∈ 𝑆 𝑥 ⊑ 𝑦 ⟹ 𝑥 = 𝑦• Taille: |𝑆| + 2• Hauteur: 2
Utilité• Identifie des états distincts (un seul)• Exemple: « sain » et « contaminé » du taint analysis
Jean Privat (UQAM) 03 - Data Flow INF889A Hiver 2020 25 / 49
Sous-ensembles
• On par d’un ensemble S→ Un treilli (𝒫(𝑆), ⊆)• ⊥ = ∅• ⊤ = 𝑆• Taille: 2|𝑆|
• Hauteur: |𝑆|Utilité
• Combine des états possibles (zéro, un ou plus)• Exemple: l’ensemble des read() du taint analysis NG+• En pratique, on veut souvent ⊥ distinct de ∅
Jean Privat (UQAM) 03 - Data Flow INF889A Hiver 2020 26 / 49
Produit cartésien (et tuples)
• On part de deux treillis (𝐿1, ⊑1) et (𝐿2, ⊑2)→ Un treilli (𝐿1 × 𝐿2, ⊑×)→ (𝑥1, 𝑥2) ⊑× (𝑦1, 𝑦2) ⇔ 𝑥1 ⊑1 𝑦1 ∧ 𝑥2 ⊑2 𝑦2
Pour majorer, il faut majorer dans les deux dimensions• ⊥× = (⊥1, ⊥2)• ⊤× = (⊤1, ⊤2)• Taille: |𝐿1| ⋅ |𝐿2|• Hauteur: ℎ(𝐿1) + ℎ(𝐿2)
Utilité• Combine des treillis existants comme dimension d’un treillis plus
gros• Analyse plusieurs choses en même temps
Jean Privat (UQAM) 03 - Data Flow INF889A Hiver 2020 27 / 49
Ensemble fonctionnel (ou associatif)
• On par d’un ensemble 𝑆• Et d’un treillis (𝐿, ⊑𝐿)
→ Un treillis (𝑆 → 𝐿, ⊑→)→ 𝑥 ⊑→ 𝑦 ⇔ ∀𝑠 ∈ 𝑆 𝑥(𝑠) ⊑𝐿 𝑦(𝑠)
Pour majorer, il faut majorer dans tout les éléments de 𝑆• ⊥→ ∶ 𝑆 → 𝐿 ∀𝑥 ∈ 𝑆 ⊥→(𝑥) = ⊥𝐿• ⊤→ ∶ 𝑆 → 𝐿 ∀𝑥 ∈ 𝑆 ⊤→(𝑥) = ⊤𝐿• Taille: |𝐿||𝑆|
Utilité• Attache un treillis existant à des éléments connus• Exemple associer un treillis pour chaque variable
Jean Privat (UQAM) 03 - Data Flow INF889A Hiver 2020 28 / 49
Fonctions monotones
Soient• deux ensembles partiellement ordonnés (𝐿1, ⊑1) et (𝐿2, ⊑2)• une fonction 𝑓 ∶ 𝐿1 → 𝐿2
𝑓 est monotone ssi• ∀𝑥, 𝑦 ∈ 𝐿1 𝑥 ⊑1 𝑦 ⟹ 𝑓(𝑥) ⊑2 𝑓(𝑦)
L’ordre partiel est préservé par la fonctionMonotonie interneC’est plus intéressant sur les fonctions internes
• un poset (𝐿, ⊑)• une fonction 𝑓 ∶ 𝐿 → 𝐿• 𝑓 monotone ssi ∀𝑥, 𝑦 ∈ 𝐿 𝑥 ⊑ 𝑦 ⟹ 𝑓(𝑥) ⊑ 𝑓(𝑦)
Jean Privat (UQAM) 03 - Data Flow INF889A Hiver 2020 29 / 49
Question de monotonie
Soient 𝑆 = 𝒫({𝑎, 𝑏, 𝑐}) et le treillis (𝑆, ⊆)Quelles fonctions sont monotones ?
• 𝑓0 ∶ 𝑥 ↦ 𝑥• 𝑓1 ∶ 𝑥 ↦ {𝑎}• 𝑓2 ∶ 𝑥 ↦ 𝑥 ∪ {𝑎}• 𝑓3 ∶ 𝑥 ↦ 𝑥 ∩ {𝑎, 𝑏}• 𝑓4 ∶ 𝑥 ↦ {𝑎, 𝑏, 𝑐} ∖ 𝑥
Jean Privat (UQAM) 03 - Data Flow INF889A Hiver 2020 30 / 49
Point fixe
• une fonction 𝑓 ∶ 𝑆 → 𝑆• 𝑥 ∈ 𝐿 est un point fixe de 𝑓 ssi 𝑥 = 𝑓(𝑥)
Note• une fonction peut avoir aucun, un ou plusieurs points fixes
Question• Trouver les points fixes des fonctions 𝑓 précédentes
Jean Privat (UQAM) 03 - Data Flow INF889A Hiver 2020 31 / 49
Théorème du point fixe de Kleene• B. Knaster, Un théorème sur les fonctions d’ensembles (1928)• S. Kleene, Introduction to Metamathematics (1953)• A. Tarski A lattice-theoretical fixpoint theorem and its
applications (1955)Soient
• (𝐿, ⊑) un treillis de hauteur finie• 𝑓 ∶ 𝐿 → 𝐿 une fonction monotone
Alors ∃𝑘 𝑓𝑘(⊥) est l’unique plus petit point fixe de 𝑓Traduction
• Si on part de ⊥• Qu’on applique 𝑓 continuellement
→ On arrive nécessairement à un point fixe 𝑝 = 𝑓(𝑝)→ qui est le plus petit point fixe de 𝑓
Jean Privat (UQAM) 03 - Data Flow INF889A Hiver 2020 32 / 49
Algo naïf de point fixe
1: fonction PointFixeNaif(𝑓 ∶ 𝐿 → 𝐿) : 𝐿2: 𝑥 ← ⊥3: tant que 𝑥 ≠ 𝑓(𝑥) faire4: 𝑥 ← 𝑓(𝑥)5: retourner x
En pratique, on utilise des algo plus efficaces…
Question• Appliquer l’algo pour trouver le plus petit point fixe des
fonctions 𝑓 (cf. questions précédentes)
Jean Privat (UQAM) 03 - Data Flow INF889A Hiver 2020 33 / 49
Cadre monotone
Jean Privat (UQAM) 03 - Data Flow INF889A Hiver 2020 34 / 49
Taint analysis revisité
• Un treillis pour l’info des variables• 𝐿0 = {contaminé, sain} ∪ {⊤, ⊥} (treillis plat)
• On veut l’info de chaque variable• 𝐿 = 𝑉 𝑎𝑟𝑠 → 𝐿0 : treillis d’un nœud• 𝑉 𝑎𝑟𝑠 est l’ensemble des variables du programme
• On veut l’info pour tout point• 𝐿Π = 𝑁 → 𝐿: treillis global• 𝑁 est l’ensemble des nœuds du flux de contrôle du programme• On note [[𝑛]] = 𝐿Π(𝑛) l’information en sortie d’un nœud
Jean Privat (UQAM) 03 - Data Flow INF889A Hiver 2020 35 / 49
Calcul de l’informationL’information [[𝑛]] dépend des autres nœuds du flux de contrôle
• Si 𝑛 est l’entrée : [[𝑛]] = 𝜆𝑥.⊥• Si 𝑛 est « 𝑥 = 𝑎 » : [[𝑛]] = 𝑗(𝑛)[𝑥 ↦ 𝑒𝑣𝑎𝑙(𝑗(𝑛), 𝑎)]• Sinon [[𝑛]] = 𝑗(𝑛)
Fonction de jonction:
𝑗(𝑛) ∶ 𝑁 → 𝐿 = ⨆𝑝∈pred(𝑛)
[[𝑝]]
Fonction d’évaluation: 𝑒𝑣𝑎𝑙(𝑙, 𝑎) ∶ 𝐿 → 𝐴𝐸𝑥𝑝𝑟 → 𝐿0• 𝑒𝑣𝑎𝑙(𝑙, 𝑛) = sain• 𝑒𝑣𝑎𝑙(𝑙, read()) = contaminé• 𝑒𝑣𝑎𝑙(𝑙, 𝑥) = 𝑙(𝑥)• 𝑒𝑣𝑎𝑙(𝑙, 𝑎1𝑜𝑝𝑎𝑎2) = 𝑒𝑣𝑎𝑙(𝑙, 𝑎1) 𝑜𝑝 𝑒𝑣𝑎𝑙(𝑙, 𝑎2)
Jean Privat (UQAM) 03 - Data Flow INF889A Hiver 2020 36 / 49
Fonction de transfertOn a souvent des équations de la forme
• [[𝑛𝑖]] = 𝑡𝑖(𝑗(𝑛))où 𝑡𝑖 ∶ 𝐿 → 𝐿 est appelée fonction de transfert
• Un seul argument, le join des nœuds précédentsRéécriture
• Si 𝑛𝑖 est l’entrée : 𝑡𝑖(𝑙) = 𝜆𝑥.⊥• Si 𝑛𝑖 est « 𝑥 = 𝑎 » : 𝑡𝑖(𝑙) = 𝑙[𝑥 ↦ 𝑒𝑣𝑎𝑙(𝑙, 𝑎)]• Sinon 𝑡𝑖(𝑙) = 𝑙
Notes• Ça simplifie l’implémentation de nombreuses analyses• Attention à pas se coincer le jour où on veut distinguer les
nœuds précédents
Jean Privat (UQAM) 03 - Data Flow INF889A Hiver 2020 37 / 49
Opérations concrètes et abstraitesOn a besoin d’interpréter les opérations arithmétiques 𝑜𝑝 en fonctionde l’information sur les variables
𝑜𝑝 ⊥ sain contaminé ⊤⊥ ⊥ ⊥ ⊥ ⊥
sain ⊥ sain contaminé ⊤contaminé ⊥ contaminé contaminé ⊤
⊤ ⊥ ⊤ ⊤ ⊤
QuestionDans cette analyse on de distingue pas les opérations entres elles
• Quelles opérations pourrait-on améliorer ?• Comment abstraire une nouvelle opération « 𝑎 → clean(𝑎1)» ?
Jean Privat (UQAM) 03 - Data Flow INF889A Hiver 2020 38 / 49
Système d’équations• Chaque [[𝑛𝑖]] peut dépendre d’autres [[𝑛𝑖]]• On a un système d’équations
[[𝑛1]] = 𝑓1([[𝑛1]], [[𝑛2]], … , [[𝑛𝑧]])[[𝑛2]] = 𝑓2([[𝑛1]], [[𝑛2]], … , [[𝑛𝑧]])
⋮[[𝑛𝑧]] = 𝑓𝑧([[𝑛1]], [[𝑛2]], … , [[𝑛𝑧]])
qui peut devenir une seule équation• 𝑥 = 𝑓(𝑥), avec• 𝑓(𝑙1, 𝑙2, … , 𝑙𝑧) =
(𝑓1(𝑙1, 𝑙2, … , 𝑙𝑧), 𝑓2(𝑙1, 𝑙2, … , 𝑙𝑧), … , 𝑓𝑧(𝑙1, 𝑙2, … , 𝑙𝑧))Si chaque 𝑓𝑖 est monotone, alors 𝑓 est aussi monotone
• Donc on sait trouver un point fixe (si 𝐿 est de hauteur finie)→ on sait résoudre le système d’équations
Jean Privat (UQAM) 03 - Data Flow INF889A Hiver 2020 39 / 49
Algorithmes
Jean Privat (UQAM) 03 - Data Flow INF889A Hiver 2020 40 / 49
Tourniquet (round-robin)1: fonction RoundRobin(𝑓1, 𝑓2, … , 𝑓𝑧 ∶ 𝑁 → 𝐿 → 𝐿) : 𝐿2: pour 𝑛 ∈ {𝑛1, 𝑛2, … , 𝑛𝑧} faire3: 𝑟𝑒𝑠[𝑛] ← ⊥4: 𝑐ℎ𝑎𝑛𝑔𝑒 ← 𝑣𝑟𝑎𝑖5: tant que 𝑐ℎ𝑎𝑛𝑔𝑒 faire6: 𝑐ℎ𝑎𝑛𝑔𝑒 ← 𝑓𝑎𝑢𝑥7: pour 𝑖 ← 1 à 𝑧 faire8: 𝑦 ← 𝑓𝑖(𝑟𝑒𝑠)9: si 𝑛𝑒𝑤 ≠ 𝑟𝑒𝑠[𝑛𝑖] alors
10: 𝑐ℎ𝑎𝑛𝑔𝑒 ← 𝑣𝑟𝑎𝑖11: 𝑟𝑒𝑠[𝑛𝑖] ← 𝑦12: retourner 𝑟𝑒𝑠
C’est une évolution de l’algo naïfQuestion: en quoi est-il différent ?
Jean Privat (UQAM) 03 - Data Flow INF889A Hiver 2020 41 / 49
Tourniquet (round-robin)1: fonction RoundRobin(𝑓1, 𝑓2, … , 𝑓𝑧 ∶ 𝑁 → 𝐿 → 𝐿) : 𝐿2: pour 𝑛 ∈ {𝑛1, 𝑛2, … , 𝑛𝑧} faire3: 𝑟𝑒𝑠[𝑛] ← ⊥4: 𝑐ℎ𝑎𝑛𝑔𝑒 ← 𝑣𝑟𝑎𝑖5: tant que 𝑐ℎ𝑎𝑛𝑔𝑒 faire6: 𝑐ℎ𝑎𝑛𝑔𝑒 ← 𝑓𝑎𝑢𝑥7: pour 𝑖 ← 1 à 𝑧 faire8: 𝑦 ← 𝑓𝑖(𝑟𝑒𝑠)9: si 𝑛𝑒𝑤 ≠ 𝑟𝑒𝑠[𝑛𝑖] alors
10: 𝑐ℎ𝑎𝑛𝑔𝑒 ← 𝑣𝑟𝑎𝑖11: 𝑟𝑒𝑠[𝑛𝑖] ← 𝑦12: retourner 𝑟𝑒𝑠
C’est une évolution de l’algo naïfQuestion: en quoi est-il différent ?
Jean Privat (UQAM) 03 - Data Flow INF889A Hiver 2020 41 / 49
Liste de travail (worklist)
1: fonction WorkList(𝑓1, 𝑓2, … , 𝑓𝑧 ∶ 𝑁 → 𝐿 → 𝐿) : 𝐿2: pour 𝑛 ∈ {𝑛1, 𝑛2, … , 𝑛𝑧} faire3: 𝑟𝑒𝑠[𝑛] ← ⊥4: 𝑊 ← {𝑛1, 𝑛2, … , 𝑛𝑧}5: tant que 𝑊 ≠ ∅ faire6: 𝑛𝑖 ← 𝑊.enlèvePremier()7: 𝑦 ← 𝑓𝑖(𝑟𝑒𝑠)8: si 𝑦 ≠ 𝑟𝑒𝑠[𝑛𝑖] alors9: 𝑟𝑒𝑠[𝑛𝑖] ← 𝑦
10: pour 𝑛𝑗 ∈ successeurs(𝑛𝑖) faire11: 𝑊.ajoute(𝑛𝑗)12: retourner 𝑟𝑒𝑠
Jean Privat (UQAM) 03 - Data Flow INF889A Hiver 2020 42 / 49
Analyses classiques
Jean Privat (UQAM) 03 - Data Flow INF889A Hiver 2020 43 / 49
Variables vivantes (live variable)
Quelles variables seront utilisées plus tard ?Celles non utilisées peuvent être éliminées
• Registre ou place dans la pile• Treillis plus petit dans d’autres analyses
IdéePour chaque point, l’ensemble des variables vivantes
Jean Privat (UQAM) 03 - Data Flow INF889A Hiver 2020 44 / 49
Variables vivantes (live variable)
Quelles variables seront utilisées plus tard ?Celles non utilisées peuvent être éliminées
• Registre ou place dans la pile• Treillis plus petit dans d’autres analyses
IdéePour chaque point, l’ensemble des variables vivantes
Jean Privat (UQAM) 03 - Data Flow INF889A Hiver 2020 44 / 49
Variables vivantes (live variable)Treillis
• (𝐿, ⊑) = (𝒫(𝑉 𝑎𝑟𝑠), ⊆) les sous-ensembles des variablesContraintes
• 𝑛 est la sortie:[[𝑛]] = ∅
• 𝑛 est « 𝑥 = 𝑎 »:[[𝑛]] = 𝑗(𝑛) ∖ {𝑥} ∪ 𝑣𝑎𝑟𝑠(𝑎)
• 𝑛 est « if(𝑎) », « while(𝑎) » ou « print(𝑎) »:[[𝑛]] = 𝑗(𝑛) ∪ 𝑣𝑎𝑟𝑠(𝑎)
• pour le reste[[𝑛]] = 𝑗(𝑛)
avec• 𝑣𝑎𝑟𝑠(𝑎) l’ensemble des variables utilisées par 𝑎• 𝑗(𝑛) ∶ 𝑁 → 𝐿 = ⨆𝑠∈successeurs(𝑛)[[𝑠]]
Note : le flux de contrôle est à l’enversJean Privat (UQAM) 03 - Data Flow INF889A Hiver 2020 45 / 49
Expressions disponibles (available expressions)
Quels résultats de sous-expressions :• ont déjà été calculées• et sont toujours valide à un point donné ?
Permets de supprimer des calculs redondants
IdéePour chaque point, l’ensemble des expressions calculées encoredisponiblesNote: sur les chemins, on veut des garanties (must) pas despossibilités (may)
Jean Privat (UQAM) 03 - Data Flow INF889A Hiver 2020 46 / 49
Expressions disponibles (available expressions)
Quels résultats de sous-expressions :• ont déjà été calculées• et sont toujours valide à un point donné ?
Permets de supprimer des calculs redondants
IdéePour chaque point, l’ensemble des expressions calculées encoredisponiblesNote: sur les chemins, on veut des garanties (must) pas despossibilités (may)
Jean Privat (UQAM) 03 - Data Flow INF889A Hiver 2020 46 / 49
Expressions disponibles (available expressions)
Treillis• (𝐿, ⊑) = (𝒫(𝐴𝐸𝑥𝑝𝑟), ⊇) les sous-ensembles des expressions
Note: ∩ pour ⊔ (au lieu de ∪) et 𝐴𝐸𝑥𝑝𝑟 pour ⊥ (au lieu de ∅)Contraintes
• si 𝑛 est l’entrée: [[𝑛]] = ∅• 𝑛 est « 𝑥 = 𝑎 »: [[𝑛]] = (𝑗(𝑛) ∪ 𝑒𝑥𝑝𝑟𝑠(𝑎)) ∖ 𝐴𝐸𝑥𝑝𝑟𝑥• 𝑛 est « if(𝑎) », « while(𝑎) », « print(𝑎) »: [[𝑛]] = 𝑗(𝑛) ∪ 𝑒𝑥𝑝𝑟𝑠(𝑎)• pour le reste: [[𝑛]] = 𝑗(𝑛)
avec• 𝑗(𝑛) = ⨆𝑠∈prec(𝑛)[[𝑠]]• 𝑒𝑥𝑝𝑟𝑠(𝑎) l’ensemble des sous-expression de 𝑎• 𝐴𝐸𝑥𝑝𝑟𝑥 l’ensemble des sous-expressions qui contiennent 𝑥
Jean Privat (UQAM) 03 - Data Flow INF889A Hiver 2020 47 / 49
Cadre à vecteur de bits (bit vector framework)
Plusieurs analyses data flow ont les caractéristiques suivantes• 𝐿 est un treillis de sous-ensembles fini• La fonction de transfert est sous la forme
𝑡𝑖(𝑙) = (𝑙 ∪ 𝐺𝑒𝑛𝑖) ∖ 𝐾𝑖𝑙𝑙𝑖où 𝐺𝑒𝑛𝑖 et 𝐾𝑖𝑙𝑙𝑖 ne dépendent que de 𝑛𝑖
Implémentation efficace• Représenter l’information 𝐿 par un vecteur de bit• Faire une passe pour précalculer 𝐺𝑒𝑛𝑖 et 𝐾𝑖𝑙𝑙𝑖 pour chaque
nœud• Faire tourner l’algo de point fixe avec des opérations bit-à-bit
Jean Privat (UQAM) 03 - Data Flow INF889A Hiver 2020 48 / 49
Aller plus loin
• Cadre à vecteur de bits (bit vector framework)• Propagation de constante• Analyse d’intervalles
Jean Privat (UQAM) 03 - Data Flow INF889A Hiver 2020 49 / 49