发明名称 一种针对混合长度指令集的寄存器分配方法
摘要 本发明公开了一种针对混合长度指令集的寄存器分配方法,通过对传统的图着色寄存器分配方法上进行少量的修改,即可充分利用混编指令集的特点,生成代码密度更高的代码,具有简单实用,可靠性强的特点。
申请公布号 CN102360280A 申请公布日期 2012.02.22
申请号 CN201110333460.2 申请日期 2011.10.28
申请人 浙江大学 发明人 李莹;闫卫斌;吴朝晖;尹建伟;邓水光;吴健
分类号 G06F9/30(2006.01)I;G06F9/318(2006.01)I 主分类号 G06F9/30(2006.01)I
代理机构 杭州裕阳专利事务所(普通合伙) 33221 代理人 江助菊
主权项 一种针对混合长度指令集的寄存器分配方法,其特征在于,包括如下步骤:1)查找函数中的所有生命周期,通过设置标志位是否置位来判断设该生命期为A类生命期还是B类生命期;2)执行图着色寄存器分配方法的Renumber1、build1、coalesce1、spill cost1、和simplify1五个过程,为所有A类生命期分配lo‑regs寄存器,得到未进行任何溢出操作的冲突图G1;3)计算空闲lo‑regs寄存器数m,如果所述冲突图G1 非空,则空闲lo‑regs寄存器数m为0,如果所述冲突图G1 为空图,则执行图着色寄存器分配方法的select1过程,并根据生成的寄存器分配方案计算空闲的lo‑regs寄存器数m,并记录空闲寄存器信息;4)执行图着色寄存器分配方法的Renumber2、build2、coalesce2、simplify2 、spill code2和select2过程,为B类生命期分配hi‑regs寄存器和m个空闲的lo‑regs寄存器,并根据生成的分配方案计算空闲的hi‑regs寄存器数量n,并记录空闲寄存器信息;5)执行图着色寄存器分配方法的spill code1和select1过程,如果select1过程已经在步骤3)执行则结束所有步骤,如果没有,则重复执行spill code1 、Renumber1、build1、coalesce1、spill cost1、simplify1   过程直到所述冲突图G1 为空,然后执行select1过程为A类生命期生成寄存器分配方案;Renumber1、build1、coalesce1、spill cost1、simplify1  、spill code1 、select1、Renumber2、build2、coalesce2、spill cost2、simplify2 、spill code2和select2过程均为图着色寄存器分配方法的步骤;所述图着色寄存器分配方法包括如下步骤:11)Renumber:在数据流分析的基础上,找到函数中的所有生命期,并为其分配唯一的编号,其中一个生命期从一个变量的一次定值开始,到对该值的最后一次使用结束;12) build:建立冲突图G,所述冲突图G中的结点为生命期,边则表示通过其相连的两个生命期有冲突,不能为它们分配同一个寄存器;13)coalesce:判断是否需要合并生命期,如需要则通过合并生命期删除不必要的复制语句,合并后返回,重新执行步骤12),如不需要合并,则执行步骤14);14)spill cost:计算每个生命期的溢出代价;15)simplify:对所述冲突图G进行简化,反复地检查图G,删除G中度数小于可用寄存器数k的节点,删除的同时将该节点压入栈s;16)spill code:当所述冲突图G中所有节点的度都大于等于k时,需要将溢出代价最小的生命期溢出,即删除其节点,将其压入栈s,并将其标记为溢出,溢出一个生命期之后返回执行步骤11);17)select:当所述冲突图G为空时,将栈s中的生命期弹出,为其分配寄存器,并为标记为溢出的生命期插入溢出代码;所述lo‑regs寄存器为短指令可寻址的寄存器,剩下的为所述hi‑regs寄存器,所述标志位是否置位的标准为:将有A类指令引用的生命期设为置位,将只有B类指令引用的生命期设为不置位;所述A类指令为一条指令最终生成的机器指令是长指令还是短指令取决于其分配到的寄存器;所述B类指令为不论其寄存器操作数分配到哪个寄存器,其必然生成一条长指令,或者必然生成一条短指令。
地址 310027 浙江省杭州市西湖区浙大路38号