利用别名分析和跟踪堆存储

时间:2019-04-25 17:37:19

标签: compiler-construction

我目前正在通过nand2tetris上大学课程和思想 添加一些优化会很有趣。对于堆栈虚拟机,这主要涉及 将栈顶映射到寄存器,映射不存在的栈槽 跨越对恒定内存的调用并使用已知的专用指令 输入以避免不必要的堆栈操作。我最初加了一个 专业化太晚了,所以x = x + 1最终变成了

push 1
push x
add
pop x


store temp
load x
inc
store x
load temp

store temp
inc x
load temp

inc x降至@x; M = M + 1,不会覆盖D寄存器,因此 不需要存储/加载。

提问时间:实际的编译器将如何在常规设置中优化这种不必要的存储/加载类型?我的直觉说像:

  • 基于流的分析以找出可能对堆数据的分配
  • 别名分析,所以我们知道何时使这些映射无效

我发现这些分析的可能实现有很多,但很少 如何利用结果数据。是否可以做这种 在孤立的通道中进行优化还是需要一些专门的混合动力 多种算法的版本?

0 个答案:

没有答案