一片自留地 斯坦福 CS143(编译原理)优化

magicyang · 2021年03月14日 · 1572 次阅读

推荐南大的软件分析课程作为参考:
https://zhuanlan.zhihu.com/p/110050716

中间语言


这里关注一个缩写 IR:intermediate representation(中间表示)
中间语言特点:

三地址码和表达式拆分:

IL 和汇编的代码生成相似:

抽象语言:

优化概述:

比较 AST,汇编,IL 的优化优缺点:

IL 举例:

block 的定义:

举例说明优化:

控制流图的概念:

优化关注的内容:

优化的形式:

优化的现实问题:

局部优化:

局部优化是优化中最简单的。

代数简化:


实际商用的代数优化远比介绍的复杂。如 TVM 的 STMT 的代数优化。

constant folding


这也比较简单,在图里也可以做此操作。

这里说明了一个在交叉编译过程中,constant folding 可能导致的问题。
解决办法是,对于浮点数,在源编译器使用全精度记录,让目标机器自己去做精度控制。

去除不会执行的代码:

公共子式消除

copy propagation

举例:

peephole optimization

定义和举例:

L14 总结:

全局优化

流分析

全局传播常量:


条件:

分析 all path 比较难:

全局优化任务的共同特性:

流分析和常量传播的关系:

常量传播:

办法是一个一个变量分析。
这里引入了:

不需要知道变量的具体数字,对程序进行分析。
举例说明:

后续操作:

实现方法:

这部分都是软件分析的范畴:


相应的规则:



buttom 表示 path 不可达,rule3 需要稍微理解一下。




rule7 也需要注意一下,rule5 的优先级高于 rule7。

操作过程:

举例:

循环


这里关注初始化起点的 Top 和其他点的 Buttom.
流程:

ordering

继续理解 top,constant,buttom 的抽象含义。
可以认为 buttom<constant<top.

这里展示了用求上界办法简化 rule 的方法。

这里可以看到每个步骤的状态最多只会变化 2 次,是有限的变化。

likeness analysis

需要找到 dead 代码,同时进行代码消除。

具体方法:


相关的规则:




算法流程:

举例说明:

方法总结:

两个优化方法总结:


暂无回复。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册