在计算机科学中,复制传播(copy propagation)是一种编译器优化技术,在GCC、LLVM等大型编译器中均有使用此技术。
假设有一直接赋值语句(direct assignment) x := y ,则 x 是其赋值目标, y 是这个赋值语句的值。那么复制传播便是将代码中所有出现的、能被替换的 x ,统统直接替换成该语句的值 y 的一个过程。
在计算什么赋值目标能被安全地替换时,复制传播经常会使用到定义可达性、use-def链、def-use链这些算法。以 x := y 为例,如果 x 这个赋值目标在程序中的某个点 p 之前从未被重新赋值过,则在点 p 以前都可以安全地使用 y 替代 x 。
范例
对于以下代码:
x = y
z = 3 + x
经过复制传播转换后,会形成以下代码:
z = 3 + y
可见原代码中多余的赋值操作已被复制传播消除。由于其它优化技术,如公共子表达式消除经常会产生这种类型的多余赋值操作,因此复制传播属于是一种尤为重要的“代码清理”优化。
相关链接
- 复制省略
- 常数折叠
补充书目、地址与网址
- Muchnick, Steven S. Advanced Compiler Design and Implementation. Morgan Kaufmann. 1997.
参考
评论 (0)