Combining Range and Inequality Information for Pointer Disambiguation
Résumé
Pentagons is an abstract domain invented by Logozzo and Fähndrich to validate array
accesses in low-level programming languages. This algebraic structure provides a cheap “less-than
check”, which builds a partial order between the integer variables used in a program. In this paper,
we show how we have used the ideas available in Pentagons to design and implement a novel alias
analysis. This new algorithm lets us disambiguate pointers with offsets, so common in C-style
pointer arithmetics, in a precise and efficient way. Together with this new abstract domain we
describe several implementation decisions that lets us produce a practical pointer disambiguation
algorithm on top of the LLVM compiler. Our alias analysis is able to handle programs as large as
SPEC’s gcc in a few minutes. Furthermore, we have been able to improve the percentage of pairs
of pointers disambiguated, when compared to LLVM’s built-in analyses, by a four-fold factor in
some benchmarks.
Les Pentagons est un domaine abstrait inventé par Logozzo et Fähndrich pour la validation des accès tableaux dans les langages de programmation à bas niveau. Cette structure algébrique fournit une relation d’ordre partiel entre les variables entières du programme. Il s’agit d’une relation "plus petit que". Dans ce papier, nous montrons comment utiliser l’idée des Pentagons pour concevoir et implémenter une nouvelle analyse d’alias. Ce nouvel algorithme nous permet de désambiguiser, d’une manière précide et efficace, des pointeurs avec des offsets fréquemment utlisés dans l’arithmétique des pointeurs en C. Nous décrivons, en plus de ce nouveau domaine abstrait, plusieurs détails d’implémentation qui nous ont permis de produire un algorithme d’analyse de pointeurs dans LLVM. Notre analyse est capable de traiter des programmes aussi larges que gcc de SPEC en quelques minutes seulement. Par ailleurs, pour certains benchmarks, nous avons réussi à améliorer par facteur de quatre le pourcentage de paires de pointeurs désambiguisés, étant comparé aux analyses existantes dans LLVM.
Origine | Fichiers produits par l'(les) auteur(s) |
---|
Loading...