C2編譯器之概述


使用-XX:-TieredCompilation命令關閉分層編譯后只能使用C2編譯器了。

 

字節碼轉換為Ideal Graph,而Ideal Graph基於ad文件轉換為機器碼。ad(DSL(domain-specific language)文件描述了一個BURS匹配系統的匹配規則。

 C2編譯器的主入口為Compile::Compile()方法(opto/compile.cpp文件中定義)

編譯流程包括三個步驟:

(1)parse在opto/callGenerator.cpp文件的ParseGenerator::generate()方法中生成parser實例,真正的parsing就是從其構造函數Parse::Parse()開始的。

Parse的過程中,(幾乎)每個節點在生成出來之后都會馬上經過PhaseGVN::transform()的優化: 

而這就是圖里右上角的部分:Ideal() -> Value() -> Identity() -> global value numbering 。Ideal()、Value()、Identity()是Node類上可以說最核心的三個方法,它們的作用貫穿在整個C2的優化過程中。

(2)optimize步驟對應Compiler方法中調用的Compile::Optimize()方法 

(3)code_gen 步驟對應Compiler方法中調用的Compile::Code_Gen()方法

 

 

 

參考文章:

(1)HotSpot C2編譯器 https://blog.csdn.net/fishmai/article/details/77824224 

(2)關於JIT編譯器給出的相關資料鏈接 https://www.cnblogs.com/WCFGROUP/p/6086580.html

(3)討論C2的帖子https://hllvm-group.iteye.com/group/topic/39493?page=2

 


免責聲明!

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



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