摘要:
线性扫描寄存器分配(2):利用live interval hole进行改进 下面的主要内容来自于*Traub et al.*的[1],会详细的说明如何利用hole和interval split来改善寄存器分配的质量。另外,Hotspot的C1编译器也很大程度上借鉴了这个算法进行寄存器分配,只是细节上 阅读全文
摘要:
线性扫描寄存器分配(1):基础介绍 这里所讲的内容主要来自于[1],也就是最为基础的线性扫描寄存器分配方案,可以做到线性时间内进行寄存器分配,比起图着色分配是一种快的多的分配方案。 步骤 首先来介绍最基础的线性扫描分配器,大致分为下面: 计算出每个虚拟寄存器的活跃区间(Live Interval), 阅读全文
摘要:
图着色寄存器分配 这里说说图着色,先讲解原理,同时也提供了一个java语言的实现。 图着色问题 在介绍图着色寄存器分配之前,先来说一下图着色问题。下面是一个图: 图中一共6个结点,被边相连的结点表示有相邻的关系,有相邻关系的结点不可以被染成同一种颜色,这就好像给地图上给不同的国家用不同颜色进行标识一 阅读全文
摘要:
窥孔优化 窥孔优化(peephole optimization)的概念非常简单,在最早的论文[^2 ]中作者只用了2页来介绍其概念以及一些可用的优化模式。我是在龙书中最早看到了这个概念的,后来又在《Crafting A Compiler》[^6 ]中看到了这个概念。 窥孔优化大致这样操作:使用一个滑 阅读全文
摘要:
静态单赋值形式(2) 在**静态单赋值形式(1)**中提到还有其他的方式能够解决消除$\phi$函数,这里就进行介绍。要介绍的内容主要来自*Sreedhar et al.*的论文[1],主要内容包括: Phi Congruence Class的概念。 TSSA和CSSA的概念。 如何将TSSA转为C 阅读全文
摘要:
静态单赋值形式(1) 静态单赋值形式(Static Single Assignment Form, SSA Form),是一种IR的形式,在《编译器设计(第2版)》[1]中有比较好的描述,在《Static Single Assignment Book》[4]中对应用和扩展SSA有更加多的有关内容。 阅读全文