專利名稱:一種優(yōu)化堆棧空間的寄存器分配方法
技術領域:
本發(fā)明涉及一種優(yōu)化堆棧使用的寄存器分配方法。
背景技術:
嵌入式系統(tǒng)中,內存資源有限,堆棧空間的溢出將導致指針跑飛,程序出錯,這是 極大的安全隱患。堆??臻g的優(yōu)化將減少程序對堆棧空間的需求,降低堆棧溢出的概率,利 于系統(tǒng)的安全運行。 堆棧空間的構造發(fā)生在編譯器為程序進行寄存器分配階段。當物理寄存器不能滿 足虛擬寄存器的個數(shù)需求時,優(yōu)先級低的變量將被溢出到堆棧中。編譯器為溢出變量順序 分配堆??臻g,沒有考慮到溢出變量的干涉情況,從而導致了冗余堆棧空間的占用;同時在 使用推斷技術的目標機器中,由于寄存器分配的干涉圖中存在假干涉邊,導致了寄存器壓 力增大,溢出變量增多,堆棧空間需求增大的現(xiàn)象。
發(fā)明內容
本發(fā)明的目的在于,為了克服由于寄存器分配時干涉圖中存在假干涉邊,導致寄 存器分配時溢出變量對堆棧寄存器需求壓力增大,從而提出一種優(yōu)化堆??臻g的寄存器分 配方法。 本發(fā)明發(fā)明針對以上現(xiàn)象進行改進,采用基于精確干涉圖的堆棧空間優(yōu)化方法。
在構造干涉圖階段,通過分析干涉變量的推斷寄存器相交情況消除了假干涉邊,減小了寄
存器壓力;在堆棧變量溢出時,通過分析堆棧變量的干涉情況,將不干涉的變量分配到同一
堆棧位置。這將大大減少程序對堆??臻g的占用,降低了堆棧溢出的概率。 —種優(yōu)化的堆??臻g寄存器分配方法,該方法用于物理寄存器分配時有變量溢出
的嵌入式系統(tǒng)中堆??臻g寄存器分配的優(yōu)化方法,所述的方法包含以下步驟 1)寄存器分配器對程序的中間文件進行數(shù)據(jù)流分析,得到數(shù)據(jù)流圖; 2)根據(jù)數(shù)據(jù)流圖構造程序變量的干涉圖; 3)對干涉圖進行優(yōu)化,消除假干涉邊; 4)對干涉圖試圖著色,著色數(shù)目為實際物理寄存器個數(shù);如果此步驟順利,將沒 有變量溢出,物理寄存器分配結束;否則進行下一步; 5)對干涉圖進行刪減,將優(yōu)先級別低的變量溢出到堆??臻g寄存器中;
6)給優(yōu)先級最高的虛擬寄存器分配實際物理寄存器; 7)針對步驟5)中溢出的變量,為不干涉的溢出變量在堆棧空間寄存器中分配相 同的堆棧偏移值;為干涉的溢出變量在堆??臻g寄存器中分配不同的堆棧偏移值;
其中,溢出變量的干涉性通過查詢步驟3)得到的消除假干涉邊后的干涉圖進行 判斷; 8)重復步驟4)至步驟7),直到所有的虛擬寄存器都被分到物理寄存器,且所有的 溢出變量都得到合適的堆棧偏移值;
所述的消除假干涉邊的步驟,具體包含 針對干涉圖中干涉的兩個變量,進而分析它們的推斷寄存器相交關系如果推斷 寄存器不相交的兩個干涉變量,刪除干涉圖中兩個溢出變量之間的連線,兩個溢出變量不 干涉;如果推斷寄存器相交的兩個干涉變量,保留干涉圖中兩溢出變量之間的連線,兩個溢 出變量為干涉變量。 所述的優(yōu)化的堆??臻g寄存器分配方法,其特征在于,所述的如果某個變量活躍 時另一個變量被定義,那么它們是干涉的,相干涉的變量在干涉圖中用兩個節(jié)點之間的連 線表示。 本發(fā)明優(yōu)點在于,消除了背景技術中提及的假干涉邊,減少了寄存器變量的溢出, 同時也減少了溢出變量對堆棧空間的占用。本發(fā)明可以改善嵌入式系統(tǒng)中由于堆棧溢出帶 來安全問題。
圖1是給出了本發(fā)明的詳細流程圖。
具體實施例方式
下面結合附圖和具體實施例對本發(fā)明進行詳細的說明。堆棧分析器工作步驟如圖 l所示 1.寄存器分配器對程序的中間文件進行數(shù)據(jù)流分析,得到數(shù)據(jù)流圖 2.根據(jù)數(shù)據(jù)流圖構造程序變量的干涉圖。干涉圖的定義是如果某個變量活躍時另
一個變量被定義,那么它們是干涉的。相干涉的變量在干涉圖中用兩個節(jié)點之間的連線來
表示 3.消除干涉圖中的假干涉邊,對于干涉圖中干涉的兩個變量,分析它們的推斷寄 存器相交關系。因為只有推斷寄存器相交時,兩個變量才有可能是干涉的。對于推斷寄存 器不相交的干涉變量,刪除干涉圖中兩個變量之間的連線。 4.對干涉圖試圖著色,著色數(shù)目為實際物理寄存器個數(shù);如果此步驟順利,寄存 器分配結束;否則進行到步驟5 5.對干涉圖進行刪減,將優(yōu)先級別低的變量溢出到堆棧中
6.給優(yōu)先級最高的虛擬寄存器分配實際物理寄存器號 7.為步驟5中刪除的節(jié)點插入溢出代碼,步驟3消除了假干涉邊得到了精確干涉 圖。通過查詢溢出變量在精確干涉圖中的連線情況,可以得知溢出變量的干涉信息。為不 干涉的溢出變量分配相同的堆棧偏移 8.重復步驟4至7,直到所有的虛擬寄存器都被著色,未著色的虛擬寄存器都被溢 出到堆棧的合適位置 通過以上步驟,本發(fā)明可以減少程序對堆??臻g的占用,減少堆棧溢出的概率,利 于系統(tǒng)的安全運行。 最后所應說明的是,以上實施例僅用以說明本發(fā)明的技術方案而非限制。盡管參 照實施例對本發(fā)明進行了詳細說明,本領域的普通技術人員應當理解,對本發(fā)明的技術方 案進行修改或者等同替換,都不脫離本發(fā)明技術方案的精神和范圍,其均應涵蓋在本發(fā)明的權利要求范圍當中,
權利要求
一種優(yōu)化的堆??臻g寄存器分配方法,該方法用于物理寄存器分配時有變量溢出的嵌入式系統(tǒng)中堆??臻g寄存器分配的優(yōu)化方法,所述的方法包含以下步驟1)寄存器分配器對程序的中間文件進行數(shù)據(jù)流分析,得到數(shù)據(jù)流圖;2)根據(jù)數(shù)據(jù)流圖構造程序變量的干涉圖;3)對干涉圖進行優(yōu)化,消除假干涉邊;4)對干涉圖試圖著色,著色數(shù)目為實際物理寄存器個數(shù);如果此步驟順利,將沒有變量溢出,物理寄存器分配結束;否則進行下一步;5)對干涉圖進行刪減,將優(yōu)先級別低的變量溢出到堆??臻g寄存器中;6)給優(yōu)先級最高的虛擬寄存器分配實際物理寄存器;7)針對步驟5)中溢出的變量,為不干涉的溢出變量在堆??臻g寄存器中分配相同的堆棧偏移值;為干涉的溢出變量在堆??臻g寄存器中分配不同的堆棧偏移值;其中,溢出變量的干涉性通過查詢步驟3)得到的消除假干涉邊后的干涉圖進行判斷;8)重復步驟4)至步驟7),直到所有的虛擬寄存器都被分到物理寄存器,且所有的溢出變量都得到合適的堆棧偏移值;所述的消除假干涉邊的步驟,具體包含針對干涉圖中干涉的兩個變量,進而分析它們的推斷寄存器相交關系如果推斷寄存器不相交的兩個干涉變量,刪除干涉圖中兩個溢出變量之間的連線,兩個溢出變量不干涉;如果推斷寄存器相交的兩個干涉變量,保留干涉圖中兩溢出變量之間的連線,兩個溢出變量為干涉變量。
2. 根據(jù)權利要求1所述的優(yōu)化的堆??臻g寄存器分配方法,其特征在于,所述的如果 某個變量活躍時另一個變量被定義,那么它們是干涉的,相干涉的變量在干涉圖中用兩個 節(jié)點之間的連線表示。
全文摘要
本發(fā)明提出一種優(yōu)化堆??臻g的寄存器分配方法,所述的方法包含以下步驟1.寄存器分配器對程序中間文件進行分析,得到數(shù)據(jù)流圖;2.根據(jù)數(shù)據(jù)流圖構造程序變量的干涉圖;3.對干涉圖進行優(yōu)化,消除假干涉邊;4.對干涉圖試圖著色;如果此步順利,將沒有變量溢出,寄存器分配結束;否則進行下一步;5.對干涉圖進行刪減,將優(yōu)先級別低的變量溢出到堆棧中;6.給優(yōu)先級最高的虛擬寄存器分配實際物理寄存器號;針對步驟5)中的溢出節(jié)點,插入相應溢出代碼,查詢步驟3)的精確干涉圖得到為不干涉的溢出變量,分配相同的堆棧偏移;所述的消除假干涉邊的方法對于干涉的兩個變量,進一步分析對于推斷寄存器不相交的干涉變量,刪除兩個變量的連線,消除假干涉邊。
文檔編號G06F9/45GK101710291SQ20091024125
公開日2010年5月19日 申請日期2009年11月27日 優(yōu)先權日2009年11月27日
發(fā)明者張鐵軍, 時磊, 王東輝, 王紅梅 申請人:中國科學院聲學研究所