複製傳播
![本頁使用了標題或全文手工轉換](http://images.weserv.nl/?url=//upload.wikimedia.org/wikipedia/commons/thumb/c/cd/Zh_conversion_icon_m.svg/35px-Zh_conversion_icon_m.svg.png)
在電腦科學中,複製傳播(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).