16 | Java JIT编译器(四):Graal的后端是如何工作的?
该思维导图由 AI 生成,仅供参考
后端的处理流程
- 深入了解
- 翻译
- 解释
- 总结
本文深入介绍了Java JIT编译器Graal的后端处理流程及LIR的生成特点。重点讲解了后端处理的流程,包括HIR最后一次排序、LIR生成、寄存器分配、基于LIR的优化和目标代码生成。特别强调了LIR的生成过程,指出LIR反映了目标硬件的特征,可以与机器码一对一地翻译。通过示例程序展示了Graal编译器是如何生成LIR,并在这个过程中实现指令选择的。文章还详细分析了针对不同程序的LIR生成和指令选择的过程,以及优化后的目标代码生成。此外,还提到了Graal对针对AArch64的指令选择较为初级,ARM公司的研发人员正在帮助Graal做改进,为读者提供了最新的技术动态。文章内容丰富,对于想要深入了解编译器后端处理过程的读者具有很高的参考价值。
《编译原理实战课》,新⼈⾸单¥59
全部留言(3)
- 最新
- 精选
- 智昂张智恩震😱请问和JVM握手就是插入safe point的过程吗?具体的握手是在做什么?
作者回复: 在安全点插入代码,是在编译期去做的。在运行期是去执行这些代码。 在这里,安全点的代码主要服务于垃圾收集目的。在JVM做垃圾收集的时候,各个线程都要停在安全点上。那么程序运行到这里的时候,就可以去运行一段代码,检查一下是否正要做垃圾收集,如果是的话,就先把线程停下来。否则,就继续执行。 在安全点插入代码还可以实现其他作用。比如,你可以在这里实现抢占式的并发调度功能,像Go的Goroutine就有这种调度机制。 所以说,编译器生成的目标代码要跟运行时机制相结合,这也是我们在第三篇会着重讲运行时机制的原因。上述说的两种情况,在第三篇讲垃圾收集和并发机制的时候,都会讲到。
2020-07-084 - 手抓饼熊老师能否再开个专栏专门将graal的?这2门课讲的太好了,广度也非常好,如果再挑一个深度讲讲就很完美了,现在市面上对jit,编译优化和后端讲解的很少。
作者回复: 感谢肯定! 是否开一个专栏,取决于是否有足够多的同学对这个话题感兴趣。如果话题比较小众,可以未来在社区里通过博客文章等方法大家一起探讨。
2020-09-163 - 风一些c工具链支持习语识别,能够识别源代码中的特定模式,并从源代码直接生成对应cpu的汇编代码,这类优化属于哪一环节?
作者回复: 在优化算法中,专门会做一些分析,比如控制流分析之类,就是要识别源代码中的某些模式,比如循环结构等,以便于进行变量外提等优化。 另一方面,高抽象度的代码中(比如源代码、HIR),其实会有一些信息,如果利用好了的话,会有利于优化。而我们在Lower的过程中,有可能会把这些有用的信息丢掉。所以,我们在设计IR的时候,要尽量保存下来这些有用的信息,比如变成IR的元数据或标注。
2020-12-24