摘要: 线性扫描寄存器分配(1):基础介绍 这里所讲的内容主要来自于[1],也就是最为基础的线性扫描寄存器分配方案,可以做到线性时间内进行寄存器分配,比起图着色分配是一种快的多的分配方案。 步骤 首先来介绍最基础的线性扫描分配器,大致分为下面: 计算出每个虚拟寄存器的活跃区间(Live Interval), 阅读全文
posted @ 2022-05-26 23:38 aana 阅读(2020) 评论(0) 推荐(1) 编辑
摘要: 图着色寄存器分配 这里说说图着色,先讲解原理,同时也提供了一个java语言的实现。 图着色问题 在介绍图着色寄存器分配之前,先来说一下图着色问题。下面是一个图: 图中一共6个结点,被边相连的结点表示有相邻的关系,有相邻关系的结点不可以被染成同一种颜色,这就好像给地图上给不同的国家用不同颜色进行标识一 阅读全文
posted @ 2022-05-26 23:25 aana 阅读(1509) 评论(0) 推荐(0) 编辑
摘要: 窥孔优化 窥孔优化(peephole optimization)的概念非常简单,在最早的论文[^2 ]中作者只用了2页来介绍其概念以及一些可用的优化模式。我是在龙书中最早看到了这个概念的,后来又在《Crafting A Compiler》[^6 ]中看到了这个概念。 窥孔优化大致这样操作:使用一个滑 阅读全文
posted @ 2022-05-26 23:20 aana 阅读(1089) 评论(0) 推荐(0) 编辑
摘要: 静态单赋值形式(2) 在**静态单赋值形式(1)**中提到还有其他的方式能够解决消除$\phi$函数,这里就进行介绍。要介绍的内容主要来自*Sreedhar et al.*的论文[1],主要内容包括: Phi Congruence Class的概念。 TSSA和CSSA的概念。 如何将TSSA转为C 阅读全文
posted @ 2022-05-26 23:14 aana 阅读(359) 评论(0) 推荐(1) 编辑
摘要: 静态单赋值形式(1) 静态单赋值形式(Static Single Assignment Form, SSA Form),是一种IR的形式,在《编译器设计(第2版)》[1]中有比较好的描述,在《Static Single Assignment Book》[4]中对应用和扩展SSA有更加多的有关内容。 阅读全文
posted @ 2022-05-26 23:06 aana 阅读(1095) 评论(1) 推荐(1) 编辑
摘要: 计算Live Interval 在寄存器分配的时候,无论时使用图着色还是线性扫描,都会用到live interval信息: live interval的图示如上,可以看到其中有的变量被分开了几段,每一段是一个range,多个range组成了一个interval,从一个range的开始到结束,变量中的 阅读全文
posted @ 2022-05-25 23:30 aana 阅读(740) 评论(2) 推荐(2) 编辑