基于值流精炼的带强更新需求驱动指针分析
编程语言
2017-01-23 v1 软件工程
摘要
我们提出一种新的用于 C 程序的需求驱动、流敏感且上下文敏感的带强更新指针分析,称为 SUPA,它能在 IDE 等时间和内存预算较小的环境中通过值流精炼计算指向信息。我们将 SUPA 表述为在一个过程间值流图(表示程序的定义-使用链,该链被高效但过近似地预计算)上求解图可达性问题。为回答客户查询(对变量指向集的请求),SUPA 沿预计算的定义-使用链稀疏地推理值流(而非跨越所有程序点),仅执行查询所需的工作(而非分析整个程序)。特别地,只要总预算未耗尽,就执行强更新以通过值流精炼过滤掉虚假的定义-使用链。SUPA 通过在混合多阶段分析框架中应用不同的指针分析来便利效率与精度的权衡。我们在 LLVM (3.5.0) 中实现了 SUPA,并通过在 18 个开源 C 程序上选择未初始化指针检测作为主要客户来评估它。随着分析预算增加,SUPA 精度提高,其单阶段流敏感分析平均达到全程序流敏感分析精度的 97.4%,每次查询平均消耗约 0.18 秒和 65KB 内存(每查询最多 10000 条值流边的预算)。考虑上下文敏感后,SUPA 的两阶段分析对某些程序更精确但也带来更多分析时间。SUPA 也易于并行化。其单阶段流敏感分析的并行实现在 8 核机器上相对于顺序版本实现了最高 6.9 倍、平均 3.05 倍的加速。
引用
@article{arxiv.1701.05650,
title = {Demand-Driven Pointer Analysis with Strong Updates via Value-Flow Refinement},
author = {Yulei Sui and Jingling Xue},
journal= {arXiv preprint arXiv:1701.05650},
year = {2017}
}