一種面向bswap指令的窺孔優(yōu)化方法
【專利摘要】本發(fā)明提出了一種面向BSWAP指令的窺孔優(yōu)化方法,其使在代碼生成階段,通過(guò)分析BSWAP指令操作數(shù)的特殊性,判斷該條BSWAP指令是否冗余,通過(guò)分析Load/Store指令的位置特點(diǎn),判斷相應(yīng)的BSWAP指令是否冗余;對(duì)于冗余的BSWAP指令,設(shè)置刪除標(biāo)記位,同時(shí)對(duì)配對(duì)的BSWAP指令也設(shè)置相應(yīng)的刪除標(biāo)記位。本發(fā)明通過(guò)刪除冗余的BSWAP指令,大大提升了程序的執(zhí)行效率,使程序的性能得到增強(qiáng)。
【專利說(shuō)明】 —種面向BSWAP指令的窺孔優(yōu)化方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計(jì)算機(jī)【技術(shù)領(lǐng)域】,具體涉及一種面向BSWAP指令的窺孔優(yōu)化方法。
【背景技術(shù)】
[0002]程序數(shù)據(jù)在內(nèi)存中的對(duì)齊方式和在寄存器中的對(duì)齊方式會(huì)存在不一致的情況,BSffAP指令被設(shè)計(jì)用來(lái)調(diào)整數(shù)據(jù)的字節(jié)對(duì)齊方式,從而保證程序數(shù)據(jù)的一致性,保障程序的正確運(yùn)行。
[0003]BSWAP指令由編譯器在代碼生成階段插入。當(dāng)檢測(cè)到一個(gè)內(nèi)存訪問指令時(shí),編譯器會(huì)在該條指令的前后分別插入兩條BSWAP指令。然而編譯器往往忽略了程序數(shù)據(jù)和內(nèi)存訪問指令所具有的特點(diǎn),導(dǎo)致插入的BSWAP存在很大的冗余性,這會(huì)導(dǎo)致程序執(zhí)行時(shí)間延長(zhǎng),嚴(yán)重影響程序性能。
【發(fā)明內(nèi)容】
[0004]本發(fā)明所要解決的技術(shù)問題是如何消除編譯器插入的冗余BSWAP指令,縮短程序執(zhí)行時(shí)間,提聞程序性能。
[0005]為解決上述技術(shù)問題,本發(fā)明所采取的技術(shù)方案是:一種面向BSWAP指令的窺孔優(yōu)化方法,該方法用于寄存器數(shù)據(jù)的字節(jié)對(duì)齊方式和內(nèi)存數(shù)據(jù)的字節(jié)對(duì)齊方式不一致的系統(tǒng)中,是能夠消除多余BSWAP指令的優(yōu)化方法,所述的優(yōu)化方法包含以下步驟:
⑴.對(duì)程序進(jìn)行數(shù)據(jù)流分析,得到數(shù)據(jù)訪問使用-定義鏈;
(2).頭遍進(jìn)行前向遍歷,訪問程序指令鏈:如果檢測(cè)到內(nèi)存存儲(chǔ)指令,那么根據(jù)使用-定義鏈找到BSWAP的定義指令;如果該指令為數(shù)據(jù)初始化指令,那么進(jìn)入步驟⑶;否貝U,如果該指令為內(nèi)存加載指令,那么進(jìn)入步驟⑷;否則進(jìn)入步驟(5);
(3).如果初始化數(shù)據(jù)具有內(nèi)存對(duì)稱性,而且BSWAP指令沒有多余的使用,那么該條BSffAP指令是多余的,標(biāo)記BSWAP為可刪除;
⑷.內(nèi)存存儲(chǔ)指令和內(nèi)存加載指令之間的使用-定義鏈包含至少兩條BSWAP指令,如果這兩條BSWAP指令沒有多余使用,那么標(biāo)記BSWAP指令為可刪除;
(5).遍歷下一條指令,重復(fù)步驟⑵-⑷直到該基本塊的所有指令都遍歷完畢,進(jìn)入步驟
[6];
(6).二遍進(jìn)行后向遍歷,如果遇到BSWAP指令標(biāo)記為可刪除,那么執(zhí)行刪除操作;
(7).執(zhí)行步驟⑴-(6),直到程序的所有基本塊處理完畢。
[0006]本發(fā)明基于輕量的數(shù)據(jù)流分析方法,在代碼生成階段,通過(guò)分析BSWAP指令操作數(shù)的特殊性,判斷該條BSWAP指令是否冗余;通過(guò)分析Load/Store指令的位置特點(diǎn),判斷相應(yīng)的BSWAP指令是否冗余。對(duì)于冗余的BSWAP指令,設(shè)置刪除標(biāo)記位,同時(shí)由于BSWAP指令總是成對(duì)出現(xiàn)的,還要找到配對(duì)的BSWAP指令,也設(shè)置相應(yīng)的刪除標(biāo)記位。由于BSWAP指令總是Load/Store指令個(gè)數(shù)的兩倍,刪除冗余的BSWAP將大大提升程序執(zhí)行效率。
[0007]本發(fā)明采用上述技術(shù)方案所設(shè)計(jì)的面向BSWAP指令的窺孔優(yōu)化方法,大大消除了程序中冗余的BSWAP指令,同時(shí)暴露了更多的程序優(yōu)化機(jī)會(huì),提高了程序性能。
【專利附圖】
【附圖說(shuō)明】
[0008]圖1表示本發(fā)明面向BSWAP指令的窺孔優(yōu)化方法的流程圖。
【具體實(shí)施方式】
[0009]下面結(jié)合附圖對(duì)本發(fā)明面向BSWAP指令的窺孔優(yōu)化方法作具體說(shuō)明。
[0010]參見圖1,本發(fā)明面向BSWAP指令的窺孔優(yōu)化方法,該方法用于寄存器數(shù)據(jù)的字節(jié)對(duì)齊方式和內(nèi)存數(shù)據(jù)的字節(jié)對(duì)齊方式不一致的系統(tǒng)中,是能夠消除多余BSWAP指令的優(yōu)化方法,所述的優(yōu)化方法包含以下步驟:
(1).以基本塊為單位對(duì)程序進(jìn)行簡(jiǎn)單的數(shù)據(jù)流分析,得到數(shù)據(jù)訪問的使用-定義鏈(U-D鏈),并記錄每一個(gè)使用-定義鏈的使用次數(shù);
(2).以基本塊為單位對(duì)指令鏈進(jìn)行前向遍歷:如果檢測(cè)到內(nèi)存存儲(chǔ)Store指令,那么訪問使用-定義鏈找到BSWAP的定義指令,如果該指令為數(shù)據(jù)初始化指令,那么進(jìn)入步驟⑶;如果該指令為內(nèi)存加載Load指令,那么進(jìn)入步驟⑷;否則進(jìn)入步驟(5);
(3).如果初始化數(shù)據(jù)具有內(nèi)存對(duì)稱性(即翻轉(zhuǎn)前與翻轉(zhuǎn)后數(shù)據(jù)值相同),同時(shí)BSWAP的使用-定義鏈上的每條指令的使用次數(shù)都為一,那么該條BSWAP指令時(shí)多余的,標(biāo)記BSWAP為可刪除;
⑷.Load指令和Store指令之間的使用-定義鏈包含至少兩條BSWAP指令,如果這條定義-使用鏈上每條指令的使用次數(shù)都為一,那么這兩條BSWAP指令是多余的,標(biāo)記BSWAP指令為可刪除;
(5).遍歷下一條指令,重復(fù)步驟⑵-⑷,直到該基本塊的所有指令都遍歷完畢,進(jìn)入步驟(6);
(6).以基本塊為單位對(duì)指令鏈進(jìn)行后向遍歷,如果遇到BSWAP指令標(biāo)記為可刪除,那么執(zhí)行刪除操作,更新使用-定義鏈,設(shè)置BSWAP指令的定義指令使用次數(shù)減一;
(7).執(zhí)行步驟⑴-(6),直到程序的所有基本塊處理完畢。
[0011]最后應(yīng)說(shuō)明的是,以上實(shí)施例僅用于說(shuō)明本發(fā)明的技術(shù)方案而非限制。盡管參照實(shí)例對(duì)本發(fā)明進(jìn)行了詳細(xì)說(shuō)明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解,對(duì)本發(fā)明的技術(shù)方案進(jìn)行修改或者等同替換,都不脫離本發(fā)明技術(shù)方案的精神和范圍,其均應(yīng)涵蓋在本發(fā)明的保護(hù)范圍當(dāng)中。
【權(quán)利要求】
1.一種面向BSWAP指令的窺孔優(yōu)化方法,其特征是該方法用于寄存器數(shù)據(jù)的字節(jié)對(duì)齊方式和內(nèi)存數(shù)據(jù)的字節(jié)對(duì)齊方式不一致的系統(tǒng)中,是能夠消除多余BSWAP指令的優(yōu)化方法,所述的優(yōu)化方法包含以下步驟: ⑴.對(duì)程序進(jìn)行數(shù)據(jù)流分析,得到數(shù)據(jù)訪問使用-定義鏈; (2).頭遍進(jìn)行前向遍歷,訪問程序指令鏈:如果檢測(cè)到內(nèi)存存儲(chǔ)指令,那么根據(jù)使用-定義鏈找到BSWAP的定義指令;如果該指令為數(shù)據(jù)初始化指令,那么進(jìn)入步驟⑶;否貝U,如果該指令為內(nèi)存加載指令,那么進(jìn)入步驟⑷;否則進(jìn)入步驟(5); (3).如果初始化數(shù)據(jù)具有內(nèi)存對(duì)稱性,而且BSWAP指令沒有多余的使用,那么該條BSffAP指令是多余的,標(biāo)記BSWAP為可刪除; ⑷.內(nèi)存存儲(chǔ)指令和內(nèi)存加載指令之間的使用-定義鏈包含至少兩條BSWAP指令,如果這兩條BSWAP指令沒有多余使用,那么標(biāo)記BSWAP指令為可刪除; (5).遍歷下一條指令,重復(fù)步驟⑵-⑷直到該基本塊的所有指令都遍歷完畢,進(jìn)入步驟(6); (6).二遍進(jìn)行后向遍歷,如果遇到BSWAP指令標(biāo)記為可刪除,那么執(zhí)行刪除操作; (7).執(zhí)行步驟⑴-(6),直到程序的所有基本塊處理完畢。
【文檔編號(hào)】G06F9/30GK104049949SQ201410236773
【公開日】2014年9月17日 申請(qǐng)日期:2014年5月30日 優(yōu)先權(quán)日:2014年5月30日
【發(fā)明者】劉尚爭(zhēng), 郭奇青, 楊磊 申請(qǐng)人:南陽(yáng)理工學(xué)院