WCC 编译器的循环分析与回注技术解析
1. 循环分析基础与程序切片
在进行循环分析时,程序切片是一项重要的预处理步骤。通过程序切片,能够去除所有多余的语句。这样做有两个主要好处:
- 对于程序的相关子集,抽象解释过程中的定点迭代通常能在更短时间内找到解决方案。
- 后续要介绍的多面体循环评估需要简单的循环体,以便在不进行重复迭代的情况下推断最终抽象状态。原始应用程序的循环体往往过于复杂,不适合进行静态评估,但经过程序切片后,通常能满足所需的前提条件。
2. 多面体评估
多面体 (P) 是一个 (N) 维几何对象,定义为一组线性方程和不等式的集合。正式定义如下:
定义:集合 (P = {x \in Z^N | Ax = a, Bx \geq b}) 对于矩阵 (A, B \in Z^{m×N}) 和向量 (a, b \in Z^m) 以及 (N, m \in N) 被称为多面体。如果 (|P| < \infty),则该多面体被称为多胞体。
多胞体常用于编译器优化,因为它们可用于表示循环嵌套和仿射条件表达式,其正式定义有助于实现高效的代码转换,典型应用领域包括程序执行并行化或嵌套循环优化。
在实际应用中,多胞体模型有两个主要用途:
- 精确计算处理分割控制流的条件节点后的抽象配置。
- 对于由多胞体建模的循环,可静态确定其迭代次数,这一特性用于非迭代循环评估。
2.1 多面体条件评估
通过一个示例来说明该方法的实际应用。假设给定条件:
if ((2 * i + 2 <= j NA
超级会员免费看
订阅专栏 解锁全文
4

被折叠的 条评论
为什么被折叠?



