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