发明名称 |
一种解决多寄存器组冲突的方法 |
摘要 |
本发明公开了一种解决多寄存器组冲突的方法,包括:1)建立寄存器冲突图,图中的每个节点都代表一个虚拟寄存器,各个节点有优先级;两个节点之间存在一条边表示存在寄存器组冲突;2)对节点,按照优先级从高到低的顺序开始分配寄存器组;3)对一个节点,计算被分配到各个寄存器组的代价;4)将代价与阀值做比较,如果所有代价均大于阀值,则对该节点做区间分割,否则执行下一步;5)如果节点分配到一个寄存器组的代价小于其它寄存器组,则指定该寄存器组给节点;6)寄存器冲突图中的所有节点分配完寄存器组后,将结果与寄存器冲突图做比较,如果存在寄存器组冲突,则在所有以这两个节点所对应的虚拟寄存器为源操作数的指令前插入拷贝指令。 |
申请公布号 |
CN100368992C |
申请公布日期 |
2008.02.13 |
申请号 |
CN200510077171.5 |
申请日期 |
2005.06.16 |
申请人 |
中国科学院计算技术研究所 |
发明人 |
周峰;吴承勇;张兆庆 |
分类号 |
G06F9/38(2006.01);G06F15/78(2006.01) |
主分类号 |
G06F9/38(2006.01) |
代理机构 |
北京泛华伟业知识产权代理有限公司 |
代理人 |
高存秀 |
主权项 |
1.一种解决多寄存器组冲突的方法,包括:1)根据程序中的指令和双源操作数规则建立寄存器冲突图,寄存器冲突图中的每个节点都代表一个虚拟寄存器,各个节点有优先级;两个节点之间存在一条边表示它们存在寄存器组冲突;2)对由步骤1)得到的寄存器冲突图中的所有节点,按照优先级从高到低的顺序开始分配寄存器组;3)对寄存器冲突图中的一个节点,分别计算该节点被分配到各个寄存器组的代价;4)将步骤3)计算得到的代价与一个预先设定的阀值做比较,如果所有的代价均大于阀值,则对该节点做区间分割,在所述区间分割完成后,选择下一个节点重新执行步骤3),否则执行下一步;5)如果节点分配到一个寄存器组的代价小于其它寄存器组,则指定该寄存器组给节点;6)对寄存器冲突图中的所有节点分配完寄存器组后,将节点指定寄存器组的结果与寄存器冲突图做比较,如果两个节点在寄存器冲突图上是相连的并且被指定到了同一个寄存器组,则它们存在寄存器组冲突,如果节点之间存在寄存器组冲突,则在所有以这两个节点所对应的虚拟寄存器为源操作数的指令前插入拷贝指令,并对所述指令做相应修改;所述拷贝指令将存在寄存器组冲突的两个节点中的一个节点所对应的虚拟寄存器中的值拷贝到一个新建立的和冲突的两个节点的寄存器组不同的虚拟寄存器。 |
地址 |
100080北京市海淀区中关村科学院南路6号 |