一句话:提出 ART 模板,紧凑编码并在校验安全后直接再生流敏感指针分析结果,使消费者免于昂贵不动点计算。
精确的全程序指针分析能提升优化与其他分析精度,但对大型 Java 程序代价高昂,且跨编译器/工具复用已有精确结果存在可信性问题。本文提出 ART(Analysis-Results Representation Template),紧凑编码流敏感、上下文不敏感指针分析结果:生产者用静态分析器计算并编码,消费者在判定安全后重新生成结果,完全避免不动点计算。作者在 Soot 中实现生产者,在 Soot 与 Eclipse OpenJ9 JIT 中实现消费者,并在 DaCapo、SPECjvm2008 上评估。消费者获得精确结果的平均耗时不足原静态分析的 1%,存储开销平均约为程序大小的 4%。
Data-flow analyses like points-to analysis can vastly improve the precision of other analyses, and enable powerful code optimizations. However, whole-program points-to analysis of large Java programs tends to be expensive – both in terms of time and memory. Consequently, many compilers (both static and JIT) and program-analysis tools tend to employ faster – but more conservative – points-to analyses to improve usability. As an alternative to such trading of precision for performance, various techniques have been proposed to perform precise yet expensive fixed-point points-to analyses ahead of time in a static analyzer, store the results, and then transmit them to independent compilation/program-analysis stages that may need them. However, an underlying concern of safety affects all such techniques – can a compiler (or program analysis tool) trust the points-to analysis results generated by another compiler/tool? In this work, we address this issue of trust in the context of Java, while accounting for the issue of performance. We propose ART : Analysis-Results Representation Template – a novel scheme to efficiently and concisely encode results of flow-sensitive, context-insensitive points-to analysis computed by a static analyzer for use in any independent system that may benefit from such a precise points-to analysis. ART also allows for fast regeneration of the encoded sound analysis results in such systems. Our scheme has two components: (i) a producer that can statically perform expensive points-to analysis and encode the same concisely, (ii) a consumer that, on receiving such encoded results (called art work), can regenerate the points-to analysis results encoded by the art work if it is deemed “safe”. The regeneration scheme completely avoids fixed-point computations and thus can help consumers like static analyzers and JIT compilers to obtain precise points-to information without paying a prohibitively high cost. We demonstrate the usage of ART by implementing a producer (in Soot) and two consumers (in Soot and the Eclipse OpenJ9 JIT compiler). We have evaluated our implementation over various benchmarks from the DaCapo and SPECjvm2008 suites. Our results demonstrate that using ART, a consumer can obtain precise flow-sensitive, context-insensitive points-to analysis results in less than (average) 1% of the time taken by a static analyzer to perform the same analysis, with the storage overhead of ART representing a small fraction of the program size (average around 4%).
DOI 原文 · arXiv · PDF(开放获取) · DBLP
@article{HalalingaiahSMN24,
title = {The ART of Sharing Points-to Analysis: Reusing Points-to Analysis Results Safely and Efficiently},
author = {Shashin Halalingaiah and Vijay Sundaresan and Daryl Maier and V. Krishna Nandivada},
journal = {Proceedings of the ACM on Programming Languages},
volume = {8},
number = {OOPSLA2},
year = {2024},
doi = {10.1145/3689803}
}