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