Une modélisation de l'analyse de programmes par instances à travers la théorie des automates : les transducteurs comme relations des instances aux emplacements-mémoire
Institution:
Paris, CNAMDisciplines:
Directors:
Abstract EN:
We introduce a general static analysis framework to reason about program properties at an infinite number of runtime control points, called instances. Provided we take conservatively both branches of conditionals into account, these infinite sets of instances are represented by rational languages. Based on this instancewise framework, we extend the concept of induction variables to recursive loops of recursive programs. For the large class of monoid-based data structures, including arrays and trees, induction variables capture the memory locations accessed at every step of the execution. This compile-time characterization of data is computed in polynomial time as a rational mapping from the set of instances to the abstract sets of addresses in data structures. . . Construction and analysis relative to the rational sets and functions are carried out in the shape of automata and transducers. This model is applicable to any analysis carrying on the data memory references, especially those relative to data dependences, with as precision the instancewise grain. We thus present a dependence test for recursive programs operating on arrays. This test is modelized as a flow problem over a directed graph whose arcs are labelled by integers. We expose a realistic algorithm which is based on the integer linear programming to solve this Np-complete problem. Taking into account the conditional guards is also managed thanks to the insertion of additional linear constraints in the problem
Abstract FR:
Nous présentons un cadre général d’analyse statique pour raisonner sur les propriétés des programmes en un nombre infini de points d’exécution, appelés les instances. Sous réserve de prendre conservativement en compte les deux branches des instructions conditionnelles, ces ensembles infinis d’instances sont représentés sous la forme de langages rationnels. Dans le cadre de ce modèle, nous généralisons le concept de variable d’induction aux boucles de récursion des programmes récursifs. Pour la classe large de structures de données équipées d’une structure de monoïde, qui comprend les tableaux et les arbres, les variables d’induction capturent les emplacements-mémoires alloués aux données à chaque étape de l’exécution. Cette caractérisation de données, déterminée à la compilation, est calculée en un temps polynomial comme fonction rationnelle des instances vers les ensembles d’adresses abstraites des structures de données. La construction et les analyses portant sur les ensembles et les fonctions rationnels sont réalisées sous la forme d’automates et de transducteurs. Ce modèle est applicable à toute analyse portant sur les références de données en mémoire, en particulier celles relatives aux dépendances de données, avec pour précision le grain des instances. Nous présentons ainsi un test de dépendances pour des programmes récursifs opérant sur des tableaux. Ce test est modélisé comme un problème de flot sur un graphe orienté dont les arcs sont étiquetés par des entiers. Nous exposons un algorithme réaliste qui s’appuie sur la programmation linéaire en nombres entiers pour résoudre ce problème NP-complet. La prise en compte des gardes conditionnelles est également gérée grâce à l’insertion de contraintes linéaires supplémentaires dans le problème.