计算机科学中,复制传播(copy propagation)是一种编译器优化技术,在GCCLLVM等大型编译器中均有使用此技术。[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.

参考

编辑
  1. ^ LLVM: lib/CodeGen/MachineCopyPropagation.cpp Source File. llvm.org. [2021-11-24]. (原始内容存档于2021-11-24). 
  2. ^ Marc Moreno Maza. Data-flow analysis: copy propagation.. www.csd.uwo.ca. [2021-11-24]. (原始内容存档于2021-11-24).