LLVM 筆記(二)—— PHI node


ilocker:關注 Android 安全(新手) QQ: 2597294287

什么是 PHI node?

所有 LLVM 指令都使用 SSA (Static Single Assignment,靜態一次性賦值) 方式表示。意思是所有變量都只能被賦值一次,這樣做主要是便於后期的代碼優化。

1 a = 1;
2 if (v < 10)
3     a = 2;
4 b = a;

假設 v 的值小於 10,變量 a 就要被賦值為 2,但 a 已經被賦值了一次,由於 SSA 性質的約束,只能賦值另外一個“a”。最后在給 b 賦值時,通過添加一個 PHI node,由其來決定選擇哪個版本的 a 來給 b 賦值。

1 a1 = 1;
2 if (v < 10)
3     a2 = 2;
4 b = PHI(a1, a2);

PHI node 根據控制流是從哪一個 block (“a1 = 1” or “a2 = 2”) 到達,來決定使用 a1 還是 a2 來給 b 賦值。

這些 PHI node 必須在 IR 中顯示創建,llvm 指令集中有對應的 phi 指令。

參考:http://www.llvmpy.org/llvmpy-doc/dev/doc/llvm_concepts.html#ssa-form-and-phi-nodes


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM