Compiling with Abstract Interpretation (with appendices)
Résumé
Rewriting and static analyses are mutually beneficial techniques: program
transformations change the intensional aspects of the program, and can thus
improve analysis precision, while some efficient transformations are enabled by specific
knowledge of some program invariants. Despite the strong interaction between
these techniques, they are usually considered distinct. In this paper, we
demonstrate that we can turn abstract interpreters into compilers, using a
simple free algebra over the standard signature of abstract domains. Functor
domains correspond to compiler passes, for which soundness is translated to a
proof of forward simulation, and completeness to backward simulation.
We achieve translation to SSA using an abstract domain with a non-standard
SSA signature. Incorporating such an SSA translation to an abstract
interpreter improves its precision; in particular we show that an
SSA-based non-relational domain is always more precise than a standard
non-relational domain for similar time and memory complexity.
Moreover, such a domain allows recovering from precision losses that occur when analyzing low-level
machine code instead of source code. These results help implement analyses or
compilation passes where symbolic and semantic methods simultaneously refine
each other, and improves precision when compared to doing the passes in sequence.
Domaines
Informatique [cs]
Fichier principal
compiling-with-abstract-interpretation-with-appendices.pdf (834.53 Ko)
Télécharger le fichier
Origine : Fichiers produits par l'(les) auteur(s)