作者回复: 首先这些dependency都是为了scheduling服务的,也就是把图序列化为指令序列,图节点中的相互依赖会让它们拥有先后关系。
个人理解哈,原本的IO dependency就是IO顺序,Cliff Click大神的论文中说的是没有内存映射的IO访问。现在C2应该用来泛指非内存访问的JVM状态。
Graal里这种额外的依赖关系都是用控制流先后顺序来表达的。
作者回复: 那个比较老,你可以去下载GraalVM,里面有附带igv的。OpenJDK 7编译是比较难,很多奇奇怪怪的依赖问题,8之后就好多了
作者回复: 先说一下,这个是Graal的IR。
基本块的划分规则是根据其定义来的,即最长的,顺序执行的节点集。
start begin end是为了标注基本块的起始和结尾,便于优化,没有其他实际意义。
merge节点可以看成控制流交汇的节点,在Graal里就是用来挂phi节点的。最后有两个return而没有merge,实际上是另外一个优化code duplicati,将原本的merge优化掉,生成两条独立程序路径。在这两条路径中,b的值是唯一的,而不是一个phi方法。
作者回复: 导出Graal IR不用debug版本的JDK