1. 代码生成器设计中的问题
1.1 代码生成器的输入
1.2 目标程序
1.3 指令选择
1.4 寄存器分配
1.5 求值顺序
2. 目标语言
2.1 一个简单的目标机模型
2.2 程序和指令的代价
3. 目标代码中的地址
3.1 静态分配
3.2 栈分配
3.3 名字的运行时刻地址
4. 基本块和流图
4.1 基本块
4.2 后续使用信息
4.3 流图
4.4 流图的表示方式
4.5 循环
5. 基本块的优化
5.1 基本块的DAG表示
5.2 寻找局部公共子表达式
5.3 消除死代码
5.4 代数恒等式的使用
5.5 数组引用的表示
5.6 指针赋值和过程调用
5.7 从DAG到基本块的重组
6. 一个简单的代码生成器
6.1 寄存器和地址描述符
6.2 代码生成算法
6.3 函数getReg的设计
7. 窥孔优化
7.1 消除冗余的加载和保存指令
7.2 消除不可达代码
7.3 控制流优化
7.4 代数化简和强度消减
7.5 使用机器特有的指令
8. 寄存器分配和指派
8.1 全局寄存器分配
8.2 使用计数
8.3 外层循环的寄存器指派
8.4 通过图着色方法进行寄存器分配
9. 通过树重写来选择指令
9.1 树翻译方案
9.2 通过覆盖一个输入树来生成代码
9.3 通过扫描进行模式匹配
9.4 用于语义检查的例程
9.5 通用的树匹配方法
10. 表达式的优化代码的生成
10.1 Ershov数
10.2 从带标号的表达式树生成代码
10.3 寄存器数量不足时的表达式求值
11. 使用动态规划的代码生成
11.1 连续求值
11.2 动态规划的算法
posted @
2025-04-07 22:47
明er
阅读(
10)
评论()
收藏
举报