优化编译器的高效符号分析与递归程序的过程间形状分析
1. 优化编译器的高效符号分析
在优化编译器的工作中,对于循环的处理至关重要。例如,假设 i
是一个归纳变量,有一种方法能够自动识别 (i*i - i)/2
为归纳表达式。这个特性可以用于广义循环强度削减,通过用一个新的归纳变量替换 (i*i - i)/2
,从而优化循环。不过,符号差分方法在广义循环强度削减中检测可优化子表达式时成本较高,因为需要为每个子表达式构建符号差分表。
在过程间分析方面,由于空间限制,相关算法在最初的呈现中未包含过程间分析。虽然可以使用子程序内联,但这可能导致代码规模急剧增大。另一种方式是将子程序调用视为跳转到子程序代码并返回,同时在子程序边界进行一些工作,以确保归纳变量的正确传递。
下面通过对MDG和TRFD代码段应用IVS算法来展示其效果:
- MDG代码段 :
- 首先识别 ikl
和 ji
的GIV更新,将它们从内循环中提升出来。
- 接着分析中间循环,进行 ji = jiz
和 ikl = ik + m
的前向替换。此时, ikl
与 ik
一起被识别为中间循环的归纳变量,而 ji
相对于 k
是循环不变的。
- 提升这些变量赋值后,经过 ik
和