Loop Optimization
:material-circle-edit-outline: 约 372 个字 :material-clock-time-two-outline: 预计阅读时间 1 分钟
Dominators
必经节点
s0 是入口节点
Finding Dominator
定理:必经节点是有序的
idom 即离 n 最近的非 n 必经节点
Dominator Tree
Natural Loops
我们关心一个 loop 有几个入口节点
这里 1234 就是 4-1 这个回边的自然循环
Nested Loop
Loop-Nest Tree
注意结点有两行,第一行是头节点,第二行是其它结点
Loop Preheader
Loop-Invariant Computations
例子
第二个不行的原因是这个语句不一定会被执行
第三个是循环内 t 有多个赋值语句
第四个是循环内在赋值前有被用到
针对 while 循环需要改一下:
Induction Variables
这样省去了访问 i 导致的开销
Linear Induction Variable
这里 i 就不是线性归纳变量,因为两个循环体 i 的变化不一样
下图是用归纳变量优化的例子
Detection of Induction Variables
相关定义如下
Strength Reduction
将乘法转化为加法
Chapter18.pdf 27 页有例子
Elimination
注意语句的删除可能会产生新的无用变量
Rewriting Comparisons
Chapter18.pdf 34 例子
Array-Bounds Checks
编译器会插入检查数组越界的指令,但很多是冗余的,我们想减少冗余
不用学
Loop Unrolling
可能 body 小,导致条件判断占大头,我们就试着一次执行多次 body
但很明显,如果循环次数是基数词,示例的两次 body 做法就有问题,所以要额外检查奇数词
不用学