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