計算機科學中,複製傳播(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).