公共子表达式消除——编译器设计中的代码优化技术
代码优化技术是一种通过消除或重新排列代码行来提高代码性能的方法。代码优化技术如下:
- 编译时评估
- 公共子表达式消除
- 死码消除
- 代码移动
- 强度降低
通用子表达式消除:
在代码计算过程中出现并计算过和再次出现的表达式或子表达式是公共子表达式。该子表达式的消除称为通用子表达式消除。
这种消除方法的优点是通过避免重新计算表达式,使计算更快更好。此外,它有效地利用了内存。
常见子表达式消除的类型
公共子表达式消除中的两种消除方法是:
1. 局部公共子表达式消除——在单个基本块内使用。基本块是没有分支的简单代码序列。
2、全局公共子表达式消除——用于公共子表达式消除的整个过程。
示例 1:
淘汰前——
a = 10;
b = a + 1 * 2;
c = a + 1 * 2;
//’c’ has common expression as ‘b’
d = c + a;
淘汰后——
a = 10;
b = a + 1 * 2;
d = b + a;
让我们用图表来理解示例 1 :
如图所示(图:示例 1 ),'d' 的结果与两个表达式相似。因此,我们将消除一种常见的子表达式,因为它有助于更快的执行和有效的内存利用。
示例 2:
淘汰前——
x = 11;
y = 11 * 24;
z = x * 24;
//'z' has common expression as 'y' as 'x' can be evaluated directly as done in 'y'.
淘汰后——
y = 11 * 24;