一种优化堆栈空间的寄存器分配方法

文档序号:6584969阅读:260来源:国知局
专利名称:一种优化堆栈空间的寄存器分配方法
技术领域
本发明涉及一种优化堆栈使用的寄存器分配方法。
背景技术
嵌入式系统中,内存资源有限,堆栈空间的溢出将导致指针跑飞,程序出错,这是 极大的安全隐患。堆栈空间的优化将减少程序对堆栈空间的需求,降低堆栈溢出的概率,利 于系统的安全运行。 堆栈空间的构造发生在编译器为程序进行寄存器分配阶段。当物理寄存器不能满 足虚拟寄存器的个数需求时,优先级低的变量将被溢出到堆栈中。编译器为溢出变量顺序 分配堆栈空间,没有考虑到溢出变量的干涉情况,从而导致了冗余堆栈空间的占用;同时在 使用推断技术的目标机器中,由于寄存器分配的干涉图中存在假干涉边,导致了寄存器压 力增大,溢出变量增多,堆栈空间需求增大的现象。

发明内容
本发明的目的在于,为了克服由于寄存器分配时干涉图中存在假干涉边,导致寄 存器分配时溢出变量对堆栈寄存器需求压力增大,从而提出一种优化堆栈空间的寄存器分 配方法。 本发明发明针对以上现象进行改进,采用基于精确干涉图的堆栈空间优化方法。
在构造干涉图阶段,通过分析干涉变量的推断寄存器相交情况消除了假干涉边,减小了寄
存器压力;在堆栈变量溢出时,通过分析堆栈变量的干涉情况,将不干涉的变量分配到同一
堆栈位置。这将大大减少程序对堆栈空间的占用,降低了堆栈溢出的概率。 —种优化的堆栈空间寄存器分配方法,该方法用于物理寄存器分配时有变量溢出
的嵌入式系统中堆栈空间寄存器分配的优化方法,所述的方法包含以下步骤 1)寄存器分配器对程序的中间文件进行数据流分析,得到数据流图; 2)根据数据流图构造程序变量的干涉图; 3)对干涉图进行优化,消除假干涉边; 4)对干涉图试图着色,着色数目为实际物理寄存器个数;如果此步骤顺利,将没 有变量溢出,物理寄存器分配结束;否则进行下一步; 5)对干涉图进行删减,将优先级别低的变量溢出到堆栈空间寄存器中;
6)给优先级最高的虚拟寄存器分配实际物理寄存器; 7)针对步骤5)中溢出的变量,为不干涉的溢出变量在堆栈空间寄存器中分配相 同的堆栈偏移值;为干涉的溢出变量在堆栈空间寄存器中分配不同的堆栈偏移值;
其中,溢出变量的干涉性通过查询步骤3)得到的消除假干涉边后的干涉图进行 判断; 8)重复步骤4)至步骤7),直到所有的虚拟寄存器都被分到物理寄存器,且所有的 溢出变量都得到合适的堆栈偏移值;
所述的消除假干涉边的步骤,具体包含 针对干涉图中干涉的两个变量,进而分析它们的推断寄存器相交关系如果推断 寄存器不相交的两个干涉变量,删除干涉图中两个溢出变量之间的连线,两个溢出变量不 干涉;如果推断寄存器相交的两个干涉变量,保留干涉图中两溢出变量之间的连线,两个溢 出变量为干涉变量。 所述的优化的堆栈空间寄存器分配方法,其特征在于,所述的如果某个变量活跃 时另一个变量被定义,那么它们是干涉的,相干涉的变量在干涉图中用两个节点之间的连 线表示。 本发明优点在于,消除了背景技术中提及的假干涉边,减少了寄存器变量的溢出, 同时也减少了溢出变量对堆栈空间的占用。本发明可以改善嵌入式系统中由于堆栈溢出带 来安全问题。


图1是给出了本发明的详细流程图。
具体实施例方式
下面结合附图和具体实施例对本发明进行详细的说明。堆栈分析器工作步骤如图 l所示 1.寄存器分配器对程序的中间文件进行数据流分析,得到数据流图 2.根据数据流图构造程序变量的干涉图。干涉图的定义是如果某个变量活跃时另
一个变量被定义,那么它们是干涉的。相干涉的变量在干涉图中用两个节点之间的连线来
表示 3.消除干涉图中的假干涉边,对于干涉图中干涉的两个变量,分析它们的推断寄 存器相交关系。因为只有推断寄存器相交时,两个变量才有可能是干涉的。对于推断寄存 器不相交的干涉变量,删除干涉图中两个变量之间的连线。 4.对干涉图试图着色,着色数目为实际物理寄存器个数;如果此步骤顺利,寄存 器分配结束;否则进行到步骤5 5.对干涉图进行删减,将优先级别低的变量溢出到堆栈中
6.给优先级最高的虚拟寄存器分配实际物理寄存器号 7.为步骤5中删除的节点插入溢出代码,步骤3消除了假干涉边得到了精确干涉 图。通过查询溢出变量在精确干涉图中的连线情况,可以得知溢出变量的干涉信息。为不 干涉的溢出变量分配相同的堆栈偏移 8.重复步骤4至7,直到所有的虚拟寄存器都被着色,未着色的虚拟寄存器都被溢 出到堆栈的合适位置 通过以上步骤,本发明可以减少程序对堆栈空间的占用,减少堆栈溢出的概率,利 于系统的安全运行。 最后所应说明的是,以上实施例仅用以说明本发明的技术方案而非限制。尽管参 照实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,对本发明的技术方 案进行修改或者等同替换,都不脱离本发明技术方案的精神和范围,其均应涵盖在本发明的权利要求范围当中,
权利要求
一种优化的堆栈空间寄存器分配方法,该方法用于物理寄存器分配时有变量溢出的嵌入式系统中堆栈空间寄存器分配的优化方法,所述的方法包含以下步骤1)寄存器分配器对程序的中间文件进行数据流分析,得到数据流图;2)根据数据流图构造程序变量的干涉图;3)对干涉图进行优化,消除假干涉边;4)对干涉图试图着色,着色数目为实际物理寄存器个数;如果此步骤顺利,将没有变量溢出,物理寄存器分配结束;否则进行下一步;5)对干涉图进行删减,将优先级别低的变量溢出到堆栈空间寄存器中;6)给优先级最高的虚拟寄存器分配实际物理寄存器;7)针对步骤5)中溢出的变量,为不干涉的溢出变量在堆栈空间寄存器中分配相同的堆栈偏移值;为干涉的溢出变量在堆栈空间寄存器中分配不同的堆栈偏移值;其中,溢出变量的干涉性通过查询步骤3)得到的消除假干涉边后的干涉图进行判断;8)重复步骤4)至步骤7),直到所有的虚拟寄存器都被分到物理寄存器,且所有的溢出变量都得到合适的堆栈偏移值;所述的消除假干涉边的步骤,具体包含针对干涉图中干涉的两个变量,进而分析它们的推断寄存器相交关系如果推断寄存器不相交的两个干涉变量,删除干涉图中两个溢出变量之间的连线,两个溢出变量不干涉;如果推断寄存器相交的两个干涉变量,保留干涉图中两溢出变量之间的连线,两个溢出变量为干涉变量。
2. 根据权利要求1所述的优化的堆栈空间寄存器分配方法,其特征在于,所述的如果 某个变量活跃时另一个变量被定义,那么它们是干涉的,相干涉的变量在干涉图中用两个 节点之间的连线表示。
全文摘要
本发明提出一种优化堆栈空间的寄存器分配方法,所述的方法包含以下步骤1.寄存器分配器对程序中间文件进行分析,得到数据流图;2.根据数据流图构造程序变量的干涉图;3.对干涉图进行优化,消除假干涉边;4.对干涉图试图着色;如果此步顺利,将没有变量溢出,寄存器分配结束;否则进行下一步;5.对干涉图进行删减,将优先级别低的变量溢出到堆栈中;6.给优先级最高的虚拟寄存器分配实际物理寄存器号;针对步骤5)中的溢出节点,插入相应溢出代码,查询步骤3)的精确干涉图得到为不干涉的溢出变量,分配相同的堆栈偏移;所述的消除假干涉边的方法对于干涉的两个变量,进一步分析对于推断寄存器不相交的干涉变量,删除两个变量的连线,消除假干涉边。
文档编号G06F9/45GK101710291SQ20091024125
公开日2010年5月19日 申请日期2009年11月27日 优先权日2009年11月27日
发明者张铁军, 时磊, 王东辉, 王红梅 申请人:中国科学院声学研究所
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1