推荐南大的软件分析课程作为参考:
https://zhuanlan.zhihu.com/p/110050716
这里关注一个缩写 IR:intermediate representation(中间表示)
中间语言特点:
三地址码和表达式拆分:
IL 和汇编的代码生成相似:
抽象语言:
比较 AST,汇编,IL 的优化优缺点:
IL 举例:
block 的定义:
举例说明优化:
控制流图的概念:
优化关注的内容:
优化的形式:
优化的现实问题:
局部优化是优化中最简单的。
实际商用的代数优化远比介绍的复杂。如 TVM 的 STMT 的代数优化。
这也比较简单,在图里也可以做此操作。
这里说明了一个在交叉编译过程中,constant folding 可能导致的问题。
解决办法是,对于浮点数,在源编译器使用全精度记录,让目标机器自己去做精度控制。
定义和举例:
条件:
分析 all path 比较难:
全局优化任务的共同特性:
流分析和常量传播的关系:
办法是一个一个变量分析。
这里引入了:
不需要知道变量的具体数字,对程序进行分析。
举例说明:
后续操作:
这部分都是软件分析的范畴:
相应的规则:
buttom 表示 path 不可达,rule3 需要稍微理解一下。
rule7 也需要注意一下,rule5 的优先级高于 rule7。
操作过程:
举例:
这里关注初始化起点的 Top 和其他点的 Buttom.
流程:
继续理解 top,constant,buttom 的抽象含义。
可以认为 buttom<constant<top.
这里展示了用求上界办法简化 rule 的方法。
这里可以看到每个步骤的状态最多只会变化 2 次,是有限的变化。
需要找到 dead 代码,同时进行代码消除。
具体方法:
相关的规则:
算法流程:
举例说明:
方法总结: