这章主要讨论了代码的优化技术,主要是跨block的优化
局部优化
对每个代码的block内部进行优化,只涉及内部去重等
Global common subexpression
subexpression已经在先前的块被计算过了,且到当前块之前不会改变值,这个时候当前块如果重复计算就可以省去
copy propagation
在消除相同表达式的时候,如果遇到分支的情况,如左图,这时候可能不知道c应该等于a还是b(计算的分支不同),这时用右边的写法
Dead code
永远不会计算的语句
Code motion
这个对于循环语句进行处理,被循环内部与循环独立的语句拿到循环外部,这样可以极大的减少计算量
limit- 2 会不断计算,拿出循环会比较好
Induction Variables and Reduction in Strength
Induction Variables ,循环变量(随循环不断变化的变量),比如
i = i+1
t = 4*i
可以把他转化为较为简单的计算(乘法换加法)
t = t+4
这称为Reduction in Strength
在操作时,最好从内循环开始考虑。多个循环变量时,一般可以转化为一个唯一的循环变量。