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