一種基于代數(shù)系統(tǒng)的跨文件過程間優(yōu)化方法
【專利摘要】本發(fā)明公開了一種基于代數(shù)系統(tǒng)的跨文件過程間優(yōu)化方法,該方法包括以下步驟:針對目標機特征,選擇出涉及棧操作、邏輯運算類指令,構建代數(shù)系統(tǒng),并為這些指令與代數(shù)系統(tǒng)建立映射關系;從程序入口處開始遍歷程序調(diào)用圖PCG,判斷存在邊相連的節(jié)點是否分屬不同的源文件,如果是,繼續(xù)下一步操作,否則繼續(xù)遍歷PCG;從函數(shù)調(diào)用指令開始逆向沿著當前函數(shù)內(nèi)的控制流圖CFG開始遍歷數(shù)據(jù)依賴圖DDG,生成指令壓棧操作的代數(shù)表達式,并進行表達式歸約;分析后繼節(jié)點函數(shù)的出棧操作,從中讀出常量值,并依次傳遞,優(yōu)化并計算,最終刪除冗余指令片段。本發(fā)明有效地合并、釋放了函數(shù)??蚣苤锌蓛?yōu)化部分。除此之外,本發(fā)明在跨文件過程間優(yōu)化、常量傳播以及常量計算中也取得了較佳效果。
【專利說明】一種基于代數(shù)系統(tǒng)的跨文件過程間優(yōu)化方法
【技術領域】
[0001]本發(fā)明涉及編譯器技術,尤其涉及一種基于代數(shù)系統(tǒng)的跨文件過程間優(yōu)化方法?!颈尘凹夹g】
[0002]函數(shù)??蚣茉趥鹘y(tǒng)編譯框架中是一種通用協(xié)議,并交由用戶在二進制接口(Application Binary Interface, ABI)進行定義。函數(shù)??蚣茉谔幚砗瘮?shù)調(diào)用時,它根據(jù)目標機的硬件資源約束,盡可能的將臨時變量保存在臨時寄存器內(nèi),而溢出部分則在函數(shù)體前被執(zhí)行前壓入棧內(nèi),并通過存儲訪問指令進行棧操作,待函數(shù)體被執(zhí)行完后再逐一釋放函數(shù)棧內(nèi)的數(shù)據(jù)。
[0003]在這種模式下,由于目標機器支持的最大寄存器數(shù)有限,而局部臨時變量由于生命周期而分布于多個基本塊內(nèi),頻繁的入棧、出棧以及局部臨時寄存器復用將直接導致函數(shù)棧操作存在冗余。
[0004]現(xiàn)有技術主要是基于編譯框架下的中間語言進行優(yōu)化,它主要面臨以下幾個主要問題:1、函數(shù)??蚣軈f(xié)議的制定與目標機器直接相關,修改時涉及的代碼量十分龐大,這將導致工作量急增;2、制定一種適合各種應用場景的函數(shù)??蚣苁謴碗s,它牽涉到寄存器分配等多個階段,而且中間語言只是一種抽象語言,它并不能直接、有效的描述棧操作,因此,從中間語言入手進行優(yōu)化的設計復雜度很高。
【發(fā)明內(nèi)容】
[0005]本發(fā)明的目的是為了解決上述現(xiàn)有技術存在的不足之處,提出一種基于代數(shù)系統(tǒng)的跨文件過程間優(yōu)化方法,它通過定義代數(shù)系統(tǒng)來對函數(shù)棧操作進行針對性的優(yōu)化,并取得了更好的效果。
[0006]為實現(xiàn)上述目的,本發(fā)明提供了一種基于代數(shù)系統(tǒng)的跨文件過程間優(yōu)化方法,該方法包括以下步驟:
[0007]針對目標機特征,選擇出涉及棧操作、邏輯運算類等指令,構建代數(shù)系統(tǒng),并為這些指令與代數(shù)系統(tǒng)建立映射關系;
[0008]從程序入口處開始遍歷函數(shù)調(diào)用圖(Procedure Call Graph, PCG),判斷存在邊相連的節(jié)點是否分屬不同的源文件,如果是,繼續(xù)下一步操作,否則繼續(xù)遍歷PCG ;
[0009]從函數(shù)調(diào)用指令開始逆向沿著當前函數(shù)內(nèi)的控制流圖(Control Flow Graph,CFG)開始遍歷數(shù)據(jù)依賴圖(Data Dependence Graph, DDG),生成指令壓棧操作的代數(shù)表達式,并進行代數(shù)表達式歸約;
[0010]分析后繼節(jié)點函數(shù)的出棧操作從中讀出常量值,并依次傳遞,優(yōu)化并計算,最終刪除幾余指令片段。
[0011]本發(fā)明定義一套粗糙的代數(shù)系統(tǒng),通過棧操作生命周期分析將棧相關指令轉(zhuǎn)義為代數(shù)表達式,并最終形成λ表達式,通過迭代歸約λ表達式,有效地合并、釋放了函數(shù)??蚣苤锌蓛?yōu)化部分。除此之外,本發(fā)明在跨文件過程間優(yōu)化、常量傳播以及常量計算中也取得了較佳效果。
【專利附圖】
【附圖說明】
[0012]圖1為棧操作生命周期分析流程示意圖;
[0013]圖2為函數(shù)??蚣軆?yōu)化流程示意圖;
[0014]圖3為圖2所示函數(shù)棧框架優(yōu)化實例;
[0015]圖4為本發(fā)明實施例提供的一種基于代數(shù)系統(tǒng)的跨文件過程間優(yōu)化方法流程圖?!揪唧w實施方式】
[0016]下面通過附圖和實施例,對本發(fā)明的技術方案做進一步的詳細描述。
[0017]線性空間中的代數(shù)系統(tǒng)由非空集合S及定義于集合S上的代數(shù)符集,關系集組成,代數(shù)系統(tǒng)中用于推理計算的代數(shù)表達式則是由常數(shù)、變量、有限個相關代數(shù)操作(加法、減法、乘法等)構成。匯編函數(shù)內(nèi)的執(zhí)行路徑可看作是由多個匯編級基本塊組成有序多元組,假設存在一條執(zhí)行路徑L=〈xl, x2, x3,.., xn>,其中L[i]=xi {i=l,…,n為執(zhí)行節(jié)點或沿路上的匯編級基本塊},針對L的特征可定義函數(shù):
[0018]
【權利要求】
1.一種基于代數(shù)系統(tǒng)的跨文件過程間優(yōu)化方法,其特征在于: 針對目標機特征,選擇出涉及棧操作、邏輯運算類指令,構建代數(shù)系統(tǒng),并為這些指令與代數(shù)系統(tǒng)建立映射關系; 從程序入口處開始遍歷調(diào)用圖PCG,判斷存在邊相連的節(jié)點是否分屬不同的源文件,如果是,繼續(xù)下一步操作,否則繼續(xù)遍歷PCG ; 從函數(shù)調(diào)用指令開始逆向沿著當前函數(shù)內(nèi)的控制流圖CFG開始遍歷數(shù)據(jù)依賴圖DDG,生成指令壓棧操作的代數(shù)表達式,并進行表達式歸約; 分析后繼節(jié)點函數(shù)的出棧操作從中讀出常量值,并依次傳遞,優(yōu)化并計算,最終刪除冗余指令片段。
2.根據(jù)權利要求1所述的方法,其特征在于,所述代數(shù)系統(tǒng)的構建流程為: 分析編譯器端的??蚣芙Y構,選擇出其中與棧操作相關的指令; 根據(jù)這些指令的運算特征,定義代數(shù)符以及表達式規(guī)范; 為這些指令與代數(shù)系統(tǒng)建立映射關系。
3.根據(jù)權利要求1所述的方法,其特征在于,在所述遍歷調(diào)用圖PCG步驟之前還包括步驟:
構建全局函數(shù)調(diào)用圖PCG,所述全局函數(shù)調(diào)用圖PCG用于描述全部函數(shù)之間的調(diào)用關系O
4.根據(jù)權利要求3所述的方法,其特征在于,當所述函數(shù)調(diào)用圖PCG中存在前驅(qū)節(jié)點i以及它的一個后繼節(jié)點j,i調(diào)用j時的參數(shù)列表Params為{PI, P2,…,Pn}時, 當i是j的唯一前驅(qū)節(jié)點,如果Params中存在常量Pk,則將Pk傳遞入j中利用代數(shù)表達式進行計算,刪除i中對Params中各參數(shù)的壓棧以及j中對Params中各參數(shù)的出棧操作并將j的代碼移動至i中進行函數(shù)調(diào)用的部分。
5.根據(jù)權利要求3所述的方法,其特征在于,當所述函數(shù)調(diào)用圖PCG中存在前驅(qū)節(jié)點i以及它的一個后繼節(jié)點j,i調(diào)用j時的參數(shù)列表Params為{PI, P2,...,Pn}時, 當i不是j的唯一前驅(qū)時,如果Params中存在常量Pk,則重新一個段函數(shù)j-rename, i對j的調(diào)用被修改為j-rename, i成為j-rename的唯一前驅(qū),則將Pk傳遞入j-rename中利用代數(shù)表達式進行計算,刪除i中對Params中各參數(shù)的壓棧以及j-rename中對Params中各參數(shù)的出棧操作。
6.根據(jù)權利要求4所述的方法,其特征在于,當所述函數(shù)調(diào)用圖PCG中的前驅(qū)節(jié)點i中調(diào)用j的指令insn的推斷寄存器不為prO,那么需將指令insn修改為分支跳轉(zhuǎn)指令來維護控制流,否則直接移動。
7.根據(jù)權利要求1所述的方法,其特征在于,通過廣度優(yōu)先算法從程序的入口處開始遍歷函數(shù)調(diào)用圖PCG。
8.根據(jù)權利要求1所述的方法,其特征在于,所述生成指令壓棧操作的代數(shù)表達式步驟包括: 根據(jù)棧寄存器遍歷函數(shù)體內(nèi)的控制流圖CFG與數(shù)據(jù)依賴圖DDG ; 獲取全部與棧相關的指令集合; 通過分析指令間的關系,靜態(tài)分析棧操作的生命周期,并從所述與棧相關指令集合中刪除冗余部分。
【文檔編號】G06F9/45GK103559069SQ201310579365
【公開日】2014年2月5日 申請日期:2013年11月18日 優(yōu)先權日:2013年11月18日
【發(fā)明者】朱浩, 王東輝, 洪纓 申請人:中國科學院聲學研究所