复制传播

来自testwiki
跳转到导航 跳转到搜索

Template:NoteTA计算机科学中,复制传播(copy propagation)是一种编译器优化技术,在GCCLLVM等大型编译器中均有使用此技术。[1]

假设有一直接赋值语句(direct assignment) x:=y ,则 x 是其赋值目标, y 是这个赋值语句的值。那么复制传播便是将代码中所有出现的、能被替换的 x ,统统直接替换成该语句的值 y 的一个过程。[2]

在计算什么赋值目标能被安全地替换时,复制传播经常会使用到定义可达性、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.

参考