• Aucun résultat trouvé

Ordonnancement des phases pour l’analyse points-to

Dans le document Analyse des pointeurs pour le langage C (Page 171-174)

6.1 Les différentes approches pour le traitement des sites d’appels

6.1.5 Ordonnancement des phases pour l’analyse points-to

Nous avons vu précédemment que l’analyse points-to ascendante nécessitait la connais- sance des effets des sites d’appel et que le calcul des effets nécessitait la connaissance de l’information points-to afin de pouvoir traduire les effets. Il est donc nécessaire de synchroniser ces deux analyses.

6.1.5.1 Ressources et passes impliquées dans l’analyse points-to

Les points-to L’analyse points-to prend en entrée le code source d’un programme pour fournir en résultat les arcs points-to calculés pour chaque instruction du programme. Quand c’est l’ana- lyse intraprocédurale qui est effectuée il n’y a pas besoin de tous les modules ; c’est-à-dire que les appelées ne sont pas demandées ni analysées. Les ressources qui sont sauvegardées pour être utilisées par la suite soit par d’autres analyses ( voir chapitre 2) soit par l’analyse interprocé- durale des pointeurs sont :

• les points_to_in qui sont les arcs points-to à l’entrée de chaque fonction et qui constituent donc son contexte points-to (voir la sous-section 6.3.1.3 ) ;

• les points_to_out qui sont les arcs points-to connus à la sortie de chaque fonction et qui sont visibles au niveau du site d’appel (voir la sous-section 6.3.1.3 ) ;

• les points_to qui sont les arcs points-to décorant chaque instruction du corps de la fonc- tion.

Notons que dans PIPS les analyses de pointeurs que nous avons introduites précédemment sont appelées :

• INTRAPROCEDURAL_POINTS_TO_ANALYSIS pour l’analyse intraprocédurale (sous-section 6.1.1) ; • FAST_INTERPROCEDURAL_POINTS_TO_ANALYSIS pour l’analyse interprocédurale utilisant les

effets (sous-section 6.1.3) ;

• INTERPROCEDURAL_POINTS_TO_ANALYSIS pour l’analyse interprocédural par transformeur (sous-section 6.1.4).

Les effets propres, calculés ou non avec l’information points-to La ressource produite par l’analyse des effets, proper_effects (section 2.2.2), a été définie et elle contient la liste des variables qui ont été lues et écrites par une instruction, en utilisant ou non l’information points-to pour pouvoir traduire les accès aux variables par déréférencement de pointeurs (comme

6. Le pointeur pz, dont la valeur n’est pas modifiée par l’appel à la fonction, n’apparaît pas sur les figures pour plus de lisibilité.

146 Chapitre 6. L’analyse interprocédurale : traitement des sites d’appels

**p par exemple). La nouvelle phase utilisant l’information points-to est appelée dans PIPS PROPER_EFFECTS_WITH_POINTS_TO7 et requiert comme entrée la ressource points_to_in (voir la figure 6.3).

Les effets résumés avec l’information points-to La ressource summary_effects est cal- culée à partir des effets cumulés de la procédure concernée. Les effets cumulés sont dérivés des effets propres en les propageant vers la haut dans l’arbre syntaxique et en y éliminant les dépendances à l’état mémoire courant. En termes de ressources PIPS, les entrées sont donc :

• proper_effects ; • cumulated_effects.

Les nouvelles analyses sont les deux passes : • PROPER_EFFECTS_WITH_POINTS_TO ; • CUMULATED_EFFECTS_WITH_POINTS_TO.

La ressource SUMMARY_EFFECTS permet de récupérer la liste des variables visibles de l’extérieur, qui ont été modifiés par effet de bord de l’appelée, Cette liste doit encore être traduite en faisant la correspondance entre paramètres formels et effectifs, et plus généralement, entre le contexte formel, qui, rappelons le, contient non seulement les paramètres formels mais aussi les points-to stubs, et le contexte effectif. Elle permet la génération des ensembles Kill et Gen d’un site d’appel en prenant en compte les sources des arcs points-to qui ont été ou non modifiées entre l’entrée et la sortie de la fonction appelée.

6.1.5.2 Ordonnancement des passes relatives aux effets et relations points-to

Effets et analyse intraprocédurale des points-to Après le calcul des arcs points-to pour une fonction, une phase de calcul des effets demande cette ressource pour produire des effets plus précis que ne le ferait un calcul direct des effets (voir la section 2.2.2). Comme indiqué précédemment, ces trois phases sont appelées :

• PROPER_EFFECTS_WITH_POINTS_TO, • CUMULATED_EFFECTS_WITH_POINTS_TO, • SUMMARY_EFFECTS.

Les deux premières ont été introduites spécifiquement pour exploiter l’information points-to en complément des passes pré-existantes, PROPER_EFFECTS, CUMULATED_EFFECTS et SUMMARY_EFFECTS.

Effets et analyse interprocédurale des points-to Pour l’analyse points-to interprocédurale, qui requiert non seulement le code de la fonction en cours de traitement mais aussi celui de tous les appelés ainsi que leur arcs points-to, les ressources points_to_in et points_to_out sont nécessaires. Les summary_effects des appelés, qui ont été calculés indirectement en utilisant les points-to afin de pouvoir déterminer les variables pointeurs qui sont visibles au niveau du site d’appel et qui ont été modifiées par effet de bord ou retournées via l’instruction return, sont aussi nécessaires.

6.1.5.3 Conclusion

L’ordonnancement des phases permet de comprendre comment une des analyses clientes des points-to, le calcul des effets, interagit avec l’analyse de pointeurs et comment cette dernière lors du calcul interprocédural exploite à son tour les résultats des effets. Cet ordonnancement est propre à PIPS et à son gestionnaire de phase pipsmake8.

7. Cette phase a été développée par Béatrice Creusillet.

6.1. Les différentes approches pour le traitement des sites d’appels 147 INTRAPROCEDURAL_POINTS_TO_ANALYSIS PROPER_EFFECTS_WITH_POINTS_TO CUMULATED_EFFECTS_WITH_POINTS_TO SUMMARY_EFFECTS INTERPROCEDURAL_POINTS_TO_ANALYSIS callee.code callee.cumulated_effects callee.points_to_in callee.points_to_out callee.points_to callee.proper_effects callee.summary_effects caller.code caller.points_to_out caller.points_to_in caller.points_to

148 Chapitre 6. L’analyse interprocédurale : traitement des sites d’appels

Notons qu’on aurait aussi pu implémenter un calcul des pointeurs modifiés directement dans l’analyse points-to mais il vaut mieux réutiliser si possible une analyse existante et ne pas mélanger une analyse de type transformeur, celle des effets, et une analyse de type précondition, celle des Points-to.

Dans le document Analyse des pointeurs pour le langage C (Page 171-174)