大多数程序员都懂的java虚拟机:C1编译器从字节码到HIR

从字节码到HIR

正如之前看到的,C1的HIR是一个基于静态单赋值的图IR,由基本块构成控制流图,由静态单赋值指令构成基本块,如图8-1所示。

所有的指令都派生自Instruction类,其中,BlockBegin表示基本块的起点,BlockEnd表示基本块的结束。BlockBegin和BlockEnd合起来表示一个基本块,BlockBegin的predecessors表示当前基本块的前驱块,BlockEnd的successors表示当前基本块的后继块,它们连接起来组成一幅控制流图。BlockBegin的next指向基本块的下一条指令,如LogicOp、LoadField等;下一条指令的next又指向再下一条,如此反复,最终形成一个指令序列,即基本块内部的SSA指令链表。

build_hir()会创建一个GraphBuilder对象,而这个创建的过程就是字节码转换为HIR的过程。该过程主要分为两步:首先使用BlockListBuilder划分出所有基本块,找出循环头,然后使用SSA指令(即Instruction的子类)填充每个基本块。

识别基本块

字节码是线性结构,所以在识别时可以使用BlockListBuilder线

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值