CN101710291A - 一种优化堆栈空间的寄存器分配方法 - Google Patents
一种优化堆栈空间的寄存器分配方法 Download PDFInfo
- Publication number
- CN101710291A CN101710291A CN 200910241252 CN200910241252A CN101710291A CN 101710291 A CN101710291 A CN 101710291A CN 200910241252 CN200910241252 CN 200910241252 CN 200910241252 A CN200910241252 A CN 200910241252A CN 101710291 A CN101710291 A CN 101710291A
- Authority
- CN
- China
- Prior art keywords
- variable
- register
- interferogram
- interference
- overflow
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Landscapes
- Devices For Executing Special Programs (AREA)
Abstract
本发明提出一种优化堆栈空间的寄存器分配方法,所述的方法包含以下步骤:1.寄存器分配器对程序中间文件进行分析,得到数据流图;2.根据数据流图构造程序变量的干涉图;3.对干涉图进行优化,消除假干涉边;4.对干涉图试图着色;如果此步顺利,将没有变量溢出,寄存器分配结束;否则进行下一步;5.对干涉图进行删减,将优先级别低的变量溢出到堆栈中;6.给优先级最高的虚拟寄存器分配实际物理寄存器号;针对步骤5)中的溢出节点,插入相应溢出代码,查询步骤3)的精确干涉图得到为不干涉的溢出变量,分配相同的堆栈偏移;所述的消除假干涉边的方法:对于干涉的两个变量,进一步分析对于推断寄存器不相交的干涉变量,删除两个变量的连线,消除假干涉边。
Description
技术领域
本发明涉及一种优化堆栈使用的寄存器分配方法。
背景技术
嵌入式系统中,内存资源有限,堆栈空间的溢出将导致指针跑飞,程序出错,这是极大的安全隐患。堆栈空间的优化将减少程序对堆栈空间的需求,降低堆栈溢出的概率,利于系统的安全运行。
堆栈空间的构造发生在编译器为程序进行寄存器分配阶段。当物理寄存器不能满足虚拟寄存器的个数需求时,优先级低的变量将被溢出到堆栈中。编译器为溢出变量顺序分配堆栈空间,没有考虑到溢出变量的干涉情况,从而导致了冗余堆栈空间的占用;同时在使用推断技术的目标机器中,由于寄存器分配的干涉图中存在假干涉边,导致了寄存器压力增大,溢出变量增多,堆栈空间需求增大的现象。
发明内容
本发明的目的在于,为了克服由于寄存器分配时干涉图中存在假干涉边,导致寄存器分配时溢出变量对堆栈寄存器需求压力增大,从而提出一种优化堆栈空间的寄存器分配方法。
本发明发明针对以上现象进行改进,采用基于精确干涉图的堆栈空间优化方法。在构造干涉图阶段,通过分析干涉变量的推断寄存器相交情况消除了假干涉边,减小了寄存器压力;在堆栈变量溢出时,通过分析堆栈变量的干涉情况,将不干涉的变量分配到同一堆栈位置。这将大大减少程序对堆栈空间的占用,降低了堆栈溢出的概率。
一种优化的堆栈空间寄存器分配方法,该方法用于物理寄存器分配时有变量溢出的嵌入式系统中堆栈空间寄存器分配的优化方法,所述的方法包含以下步骤:
1)寄存器分配器对程序的中间文件进行数据流分析,得到数据流图;
2)根据数据流图构造程序变量的干涉图;
3)对干涉图进行优化,消除假干涉边;
4)对干涉图试图着色,着色数目为实际物理寄存器个数;如果此步骤顺利,将没有变量溢出,物理寄存器分配结束;否则进行下一步;
5)对干涉图进行删减,将优先级别低的变量溢出到堆栈空间寄存器中;
6)给优先级最高的虚拟寄存器分配实际物理寄存器;
7)针对步骤5)中溢出的变量,为不干涉的溢出变量在堆栈空间寄存器中分配相同的堆栈偏移值;为干涉的溢出变量在堆栈空间寄存器中分配不同的堆栈偏移值;
其中,溢出变量的干涉性通过查询步骤3)得到的消除假干涉边后的干涉图进行判断;
8)重复步骤4)至步骤7),直到所有的虚拟寄存器都被分到物理寄存器,且所有的溢出变量都得到合适的堆栈偏移值;
所述的消除假干涉边的步骤,具体包含:
针对干涉图中干涉的两个变量,进而分析它们的推断寄存器相交关系:如果推断寄存器不相交的两个干涉变量,删除干涉图中两个溢出变量之间的连线,两个溢出变量不干涉;如果推断寄存器相交的两个干涉变量,保留干涉图中两溢出变量之间的连线,两个溢出变量为干涉变量。
所述的优化的堆栈空间寄存器分配方法,其特征在于,所述的如果某个变量活跃时另一个变量被定义,那么它们是干涉的,相干涉的变量在干涉图中用两个节点之间的连线表示。
本发明优点在于,消除了背景技术中提及的假干涉边,减少了寄存器变量的溢出,同时也减少了溢出变量对堆栈空间的占用。本发明可以改善嵌入式系统中由于堆栈溢出带来安全问题。
附图说明
图1是给出了本发明的详细流程图。
具体实施方式
下面结合附图和具体实施例对本发明进行详细的说明。堆栈分析器工作步骤如图1所示:
1.寄存器分配器对程序的中间文件进行数据流分析,得到数据流图
2.根据数据流图构造程序变量的干涉图。干涉图的定义是如果某个变量活跃时另一个变量被定义,那么它们是干涉的。相干涉的变量在干涉图中用两个节点之间的连线来表示
3.消除干涉图中的假干涉边,对于干涉图中干涉的两个变量,分析它们的推断寄存器相交关系。因为只有推断寄存器相交时,两个变量才有可能是干涉的。对于推断寄存器不相交的干涉变量,删除干涉图中两个变量之间的连线。
4.对干涉图试图着色,着色数目为实际物理寄存器个数;如果此步骤顺利,寄存器分配结束;否则进行到步骤5
5.对干涉图进行删减,将优先级别低的变量溢出到堆栈中
6.给优先级最高的虚拟寄存器分配实际物理寄存器号
7.为步骤5中删除的节点插入溢出代码,步骤3消除了假干涉边得到了精确干涉图。通过查询溢出变量在精确干涉图中的连线情况,可以得知溢出变量的干涉信息。为不干涉的溢出变量分配相同的堆栈偏移
8.重复步骤4至7,直到所有的虚拟寄存器都被着色,未着色的虚拟寄存器都被溢出到堆栈的合适位置
通过以上步骤,本发明可以减少程序对堆栈空间的占用,减少堆栈溢出的概率,利于系统的安全运行。
最后所应说明的是,以上实施例仅用以说明本发明的技术方案而非限制。尽管参照实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,对本发明的技术方案进行修改或者等同替换,都不脱离本发明技术方案的精神和范围,其均应涵盖在本发明的权利要求范围当中。
Claims (2)
1.一种优化的堆栈空间寄存器分配方法,该方法用于物理寄存器分配时有变量溢出的嵌入式系统中堆栈空间寄存器分配的优化方法,所述的方法包含以下步骤:
1)寄存器分配器对程序的中间文件进行数据流分析,得到数据流图;
2)根据数据流图构造程序变量的干涉图;
3)对干涉图进行优化,消除假干涉边;
4)对干涉图试图着色,着色数目为实际物理寄存器个数;如果此步骤顺利,将没有变量溢出,物理寄存器分配结束;否则进行下一步;
5)对干涉图进行删减,将优先级别低的变量溢出到堆栈空间寄存器中;
6)给优先级最高的虚拟寄存器分配实际物理寄存器;
7)针对步骤5)中溢出的变量,为不干涉的溢出变量在堆栈空间寄存器中分配相同的堆栈偏移值;为干涉的溢出变量在堆栈空间寄存器中分配不同的堆栈偏移值;
其中,溢出变量的干涉性通过查询步骤3)得到的消除假干涉边后的干涉图进行判断;
8)重复步骤4)至步骤7),直到所有的虚拟寄存器都被分到物理寄存器,且所有的溢出变量都得到合适的堆栈偏移值;
所述的消除假干涉边的步骤,具体包含:
针对干涉图中干涉的两个变量,进而分析它们的推断寄存器相交关系:如果推断寄存器不相交的两个干涉变量,删除干涉图中两个溢出变量之间的连线,两个溢出变量不干涉;如果推断寄存器相交的两个干涉变量,保留干涉图中两溢出变量之间的连线,两个溢出变量为干涉变量。
2.根据权利要求1所述的优化的堆栈空间寄存器分配方法,其特征在于,所述的如果某个变量活跃时另一个变量被定义,那么它们是干涉的,相干涉的变量在干涉图中用两个节点之间的连线表示。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 200910241252 CN101710291B (zh) | 2009-11-27 | 2009-11-27 | 一种优化堆栈空间的寄存器分配方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 200910241252 CN101710291B (zh) | 2009-11-27 | 2009-11-27 | 一种优化堆栈空间的寄存器分配方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101710291A true CN101710291A (zh) | 2010-05-19 |
CN101710291B CN101710291B (zh) | 2012-12-12 |
Family
ID=42403083
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN 200910241252 Expired - Fee Related CN101710291B (zh) | 2009-11-27 | 2009-11-27 | 一种优化堆栈空间的寄存器分配方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101710291B (zh) |
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102033773A (zh) * | 2010-11-12 | 2011-04-27 | 西安电子科技大学 | 基于反图描述的嵌入式系统寄存器分配方法 |
CN102360280A (zh) * | 2011-10-28 | 2012-02-22 | 浙江大学 | 一种针对混合长度指令集的寄存器分配方法 |
CN103559069A (zh) * | 2013-11-18 | 2014-02-05 | 中国科学院声学研究所 | 一种基于代数系统的跨文件过程间优化方法 |
WO2015101196A1 (zh) | 2013-12-31 | 2015-07-09 | 上海微电子装备有限公司 | 一种调焦调平装置 |
CN105389194A (zh) * | 2015-10-19 | 2016-03-09 | 华为技术有限公司 | 一种确定应用程序计算逻辑的方法及装置 |
CN105912304A (zh) * | 2016-03-31 | 2016-08-31 | 中国人民解放军国防科学技术大学 | 向量vliw体系结构图着色寄存器分组分配方法 |
CN107632830A (zh) * | 2017-09-19 | 2018-01-26 | 首都师范大学 | 一种溢出优化的寄存器分配方法及系统 |
CN108701024A (zh) * | 2016-02-27 | 2018-10-23 | 金辛格自动化有限责任公司 | 用于在堆栈机器中分配虚拟寄存器堆栈的方法 |
CN111736899A (zh) * | 2020-05-29 | 2020-10-02 | 中国科学院计算技术研究所 | 一种网络处理器上寄存器的分配方法 |
CN112579514A (zh) * | 2020-12-10 | 2021-03-30 | 海光信息技术股份有限公司 | 多核处理器堆栈初始化的方法及装置 |
CN112925567A (zh) * | 2019-12-06 | 2021-06-08 | 中科寒武纪科技股份有限公司 | 分配寄存器的方法和装置及编译方法和装置及电子设备 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6408433B1 (en) * | 1999-04-23 | 2002-06-18 | Sun Microsystems, Inc. | Method and apparatus for building calling convention prolog and epilog code using a register allocator |
-
2009
- 2009-11-27 CN CN 200910241252 patent/CN101710291B/zh not_active Expired - Fee Related
Cited By (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102033773B (zh) * | 2010-11-12 | 2013-08-14 | 西安电子科技大学 | 基于反图描述的嵌入式系统寄存器分配方法 |
CN102033773A (zh) * | 2010-11-12 | 2011-04-27 | 西安电子科技大学 | 基于反图描述的嵌入式系统寄存器分配方法 |
CN102360280A (zh) * | 2011-10-28 | 2012-02-22 | 浙江大学 | 一种针对混合长度指令集的寄存器分配方法 |
CN102360280B (zh) * | 2011-10-28 | 2014-04-23 | 浙江大学 | 一种针对混合长度指令集的寄存器分配方法 |
CN103559069B (zh) * | 2013-11-18 | 2016-08-17 | 中国科学院声学研究所 | 一种基于代数系统的跨文件过程间优化方法 |
CN103559069A (zh) * | 2013-11-18 | 2014-02-05 | 中国科学院声学研究所 | 一种基于代数系统的跨文件过程间优化方法 |
US9857702B2 (en) | 2013-12-31 | 2018-01-02 | Shanghai Micro Electronics Equipment (Group) Co., Ltd. | Focusing leveling device |
WO2015101196A1 (zh) | 2013-12-31 | 2015-07-09 | 上海微电子装备有限公司 | 一种调焦调平装置 |
CN105389194A (zh) * | 2015-10-19 | 2016-03-09 | 华为技术有限公司 | 一种确定应用程序计算逻辑的方法及装置 |
CN105389194B (zh) * | 2015-10-19 | 2019-02-01 | 华为技术有限公司 | 一种确定应用程序计算逻辑的方法及装置 |
CN108701024A (zh) * | 2016-02-27 | 2018-10-23 | 金辛格自动化有限责任公司 | 用于在堆栈机器中分配虚拟寄存器堆栈的方法 |
CN105912304A (zh) * | 2016-03-31 | 2016-08-31 | 中国人民解放军国防科学技术大学 | 向量vliw体系结构图着色寄存器分组分配方法 |
CN105912304B (zh) * | 2016-03-31 | 2018-04-20 | 中国人民解放军国防科学技术大学 | 向量vliw体系结构图着色寄存器分组分配方法 |
CN107632830A (zh) * | 2017-09-19 | 2018-01-26 | 首都师范大学 | 一种溢出优化的寄存器分配方法及系统 |
CN107632830B (zh) * | 2017-09-19 | 2020-07-10 | 首都师范大学 | 一种溢出优化的寄存器分配方法及系统 |
CN112925567A (zh) * | 2019-12-06 | 2021-06-08 | 中科寒武纪科技股份有限公司 | 分配寄存器的方法和装置及编译方法和装置及电子设备 |
CN111736899A (zh) * | 2020-05-29 | 2020-10-02 | 中国科学院计算技术研究所 | 一种网络处理器上寄存器的分配方法 |
CN111736899B (zh) * | 2020-05-29 | 2023-09-08 | 中国科学院计算技术研究所 | 一种网络处理器上寄存器的分配方法 |
CN112579514A (zh) * | 2020-12-10 | 2021-03-30 | 海光信息技术股份有限公司 | 多核处理器堆栈初始化的方法及装置 |
CN112579514B (zh) * | 2020-12-10 | 2022-07-26 | 海光信息技术股份有限公司 | 多核处理器堆栈初始化的方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN101710291B (zh) | 2012-12-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101710291B (zh) | 一种优化堆栈空间的寄存器分配方法 | |
CN101446962B (zh) | 一种数据转换方法、装置及数据处理系统 | |
CN104461471B (zh) | 分簇vliw处理器上统一的指令调度和寄存器分配方法 | |
GB2460841B (en) | Methods of providing access to I/O devices | |
KR20220047397A (ko) | 프로세서를 위한 산술 논리 유닛 레이아웃 | |
WO2009085118A3 (en) | System and method for architecture-adaptable automatic parallelization of computing code | |
CN103745225A (zh) | 分布式ctr预测模型训练的方法和系统 | |
CN102123084B (zh) | 云计算操作系统中资源调度方法及系统 | |
CN106294076A (zh) | 一种服务器关联故障预测方法及其系统 | |
CN105159827A (zh) | 一种面向gui软件的可靠性加速测试方法 | |
US20080256519A1 (en) | Tracking method for embedded system | |
CN110276689A (zh) | 基于动态决策的智能合约实现方法 | |
CN105045743A (zh) | 一种具备优先级调度的多协议转换方法 | |
CN104182283A (zh) | 一种任务同步方法 | |
WO2021134459A1 (en) | Ai intelligentialization based on signaling interaction | |
CN106598693B (zh) | 一种基于延时策略的能耗及负载敏感的虚拟机整合方法 | |
CN101539867B (zh) | 动态二进制翻译系统中可重定向的寄存器分配方法 | |
CN102360280B (zh) | 一种针对混合长度指令集的寄存器分配方法 | |
CN102654843A (zh) | 嵌入式处理器中非抢占式容错调度方法及嵌入式处理器 | |
WO2007099520A3 (en) | A grid computing architecture & associated method of invoking/registering network services for subscription | |
CN102799414B (zh) | 改进推测多线程的方法及装置 | |
CN103870313A (zh) | 一种虚拟机任务调度方法及系统 | |
CN104598302A (zh) | 基于资源竞争模型的aadl模型可调度性验证方法 | |
CN110162483B (zh) | 静态内存碎片整理方法、装置、计算机设备及存储介质 | |
CN105260165A (zh) | 基于smt的线程级推测系统中推测线程数目的动态控制方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20121212 Termination date: 20151127 |
|
CF01 | Termination of patent right due to non-payment of annual fee |