知识卡片

静态单赋值形式靠一次写入的约束把局部优化能力扩展到全局

普通读书笔记卡 · 1812.d

内容

编译器优化最头疼的是处理写了再读、写了又写、先读后写三种变量依赖,前两种限制优化调整范围。静态单赋值(SSA)通过每个变量只被赋值一次这条规则,直接消灭了后两类依赖只剩写了再读。原本只能在单个基础代码块内安全应用的局部优化(如常量传播),因不再担心变量被反复重写,可安全推广到跨越分支和循环的全局范围。

参考来源

- 位置:《架构之美》第10章《元循环虚拟机的力量:Jikes RVM》10.5.3节《优化编译》"分等级和扩展的数组SSA形式"(源文件:程序之美系列套装(6册)团队之美、项目管理之美、架构之美、数据之美、测试之美、安全之美/_epub-src/OEBPS/Text/part0225.xhtml) - 结论依据:原文明确"静态单一赋值(Static Single Assignment,SSA)形式减少了编译器优化必须关心的依赖……知道一个寄存器写入一次就意味着不会发生输出依赖和反向依赖。这个特性意味着我们先前的局部优化可以应用于全局"。 - 原始内容:静态单一赋值(Static Single Assignment,SSA)形式减少了编译器优化必须关心的依赖……知道一个寄存器写入一次就意味着不会发生输出依赖和反向依赖。这个特性意味着我们先前的局部优化可以应用于全局。