与机器无关的优化

2024 年 8 月 28 日 | 阅读 2 分钟
  • 与机器无关的优化尝试改进中间代码以获得更好的目标代码。此处转换的代码部分不涉及任何绝对的内存位置或任何 CPU 寄存器。
  • 中间代码生成过程引入了许多低效性,例如:使用变量代替常量,变量的额外副本,表达式的重复求值。通过代码优化,您可以消除这些低效性并改进代码。
  • 它有时可以改变程序的结构,甚至超出了识别范围,例如:展开循环,内联函数,消除一些程序员定义的变量。

代码优化可以通过以下不同的方式执行

(1) 编译时评估

(a) z = 5*(45.0/5.0)*r
     在编译时执行 5*(45.0/5.0)*r。

(b) x = 5.7
     y = x/3.6
    在编译时评估 x/3.6 为 5.7/3.6。

(2) 变量传播

优化前的代码是

优化后的代码是

在这里,在变量传播后,a*b 和 x*b 被识别为公共子表达式。

(3) 无用代码消除

消除前的代码是

消除后的代码是

在这里,x=b 是一个无用状态,因为它在程序中永远不会被后续使用。因此,我们可以消除这个状态。

(4) 代码移动

  • 它降低了表达式的求值频率。
  • 它将循环不变语句从循环中移出。

(5) 归纳变量和强度降低

  • 强度降低用于用低强度运算符替换高强度运算符。
  • 归纳变量用于循环中以下类型的赋值,例如 i = i + 常量。

降低前的代码是

降低后的代码是


下一主题循环优化