編譯原理四——代碼優(yōu)化

代碼優(yōu)化

  • 代碼優(yōu)化的含義是:對代碼進行等價變換,使得變換后的代碼具有更高的時間效率和空間效率。代碼優(yōu)化的目的是提高目標程序的質量媒怯。
  • 優(yōu)化分為局部優(yōu)化鸽嫂、循環(huán)優(yōu)化和全局優(yōu)化

1纵装、局部優(yōu)化

1、基本塊的劃分方法:

  • 基本塊指程序中一順序執(zhí)行的語句序列据某,其中只有一個入口(該序列的第一個語句)和一個出口(該序列的最后一個語句)

  • 在各個基本塊范圍內(nèi)進行的優(yōu)化叫局部優(yōu)化橡娄。

  • 基本塊的劃分:
    從四元式序列確定滿足以下條件的入口語句:

    1. 四元式序列的第一個語句
    2. 能由條件轉移語句或無條件轉移語句轉移到的語句
    3. 緊跟在條件轉移語句后面的語句

    出口

    1. 下一個入口語句的前導語句
    2. 轉移語句(包括轉移語句自身)
    3. 停語句(包括停語句自身)

    舉例:
    695206989.jpg

    2、DAG圖的構建

  • DAG是一種有向圖癣籽,常用于基本塊的優(yōu)化挽唉,圖的葉節(jié)點(無后繼的節(jié)點)以標識符(變量名)或常數(shù)作為標記,圖的內(nèi)部節(jié)點(有后繼的節(jié)點)以一運算符作為標記筷狼。

  • 為了DAG算法的需要瓶籽,將四元式分成四類,算法只用0埂材,1塑顺,2型四元式。


    2074825103.jpg

    (1)是0型四元式俏险,后繼節(jié)點數(shù)為0严拒,(2)是1型四元式,有一個后繼竖独,(3)裤唠、(4)、(5)是2型四元式莹痢,有兩個后繼 (6)是3型四元式种蘸,有三個后繼。大寫字母表示四元式中的變量名(或常數(shù))竞膳,Node(A)表示A在DAG中相應的節(jié)點航瞭。

    算法:
    580404903.jpg
    1218775985.jpg

    自己總結:
    352022156.jpg

練習:
1706012149.jpg

3、DAG圖實現(xiàn)基本塊的優(yōu)化

  • 首先根據(jù)DAG圖寫出四元式序列:注意立即數(shù)是最優(yōu)的坦辟,賦值比計算賦值優(yōu)沧奴。
  • 注意T是臨時變量,A长窄、B這些都是普通變量滔吠。

2纲菌、循環(huán)優(yōu)化

1、程序流圖與循環(huán)
控制流程圖就是有唯一首節(jié)點的有向圖疮绷,用三元組G=(N翰舌,E,n0)表示(節(jié)點集冬骚,邊集椅贱,首節(jié)點)節(jié)點集就是基本塊集,有向邊表示如下:基本塊i出口語句不是轉向語句或停語句只冻,i與緊隨其后的基本塊j有有向邊庇麦。或者i出口轉向j入口語句喜德。
2山橄、循環(huán):程序流圖里的一個節(jié)點序列強連通,任意兩個節(jié)點都有至少一條通路舍悯,它們中有且只有一個入口節(jié)點航棱。(從序列外某節(jié)點有一條有向邊引導它,或他是程序流圖的首節(jié)點萌衬。
3饮醇、找循環(huán):
必經(jīng)節(jié)點集:從流圖首節(jié)點出發(fā),到n的任意通路都要經(jīng)過m秕豫,m是n的必經(jīng)節(jié)點朴艰,記為mDOMn;流圖中結點n的所有必經(jīng)節(jié)點的集合稱為節(jié)點n的必經(jīng)結點集混移,極為D(n)祠墅。
DOM的性質:自反性:流圖中任意節(jié)點a,都有aDOMa沫屡。傳遞性:aDOMb,bDOMc則aDOMc撮珠。反對稱性:aDOMb,bDOMa,a=b沮脖。DOM是一個偏序關系,任何節(jié)點n的必經(jīng)節(jié)點集是一個有序集芯急。
必經(jīng)節(jié)點的求法:一定包括自己好吧勺届。。娶耍。免姿。。榕酒。必經(jīng)節(jié)點集就是前驅節(jié)點必經(jīng)節(jié)點集的交集加自己沒準胚膊。
找回邊:假設a\rightarrowb是流圖中的一條有向邊故俐,如果bDOMa,則a\rightarrowb是流圖中的一條回邊紊婉。已知有向邊n\rightarrowd是一條回邊药版,則由它組成的循環(huán)就是由結點d、結點n以及有通路到達n但該通路不經(jīng)過d的所有結點組成的喻犁。
4槽片、可規(guī)約流圖:當且僅當一個流圖除去回邊后,其余邊構成一個無環(huán)路流圖肢础。性質:1. 圖中任何直觀環(huán)路都是循環(huán)还栓。2. 找到所有回邊可以對應找出所有循環(huán)。3. 循環(huán)或嵌套或不相交(可能有公共入口節(jié)點)传轰,goto語句不可跳入循環(huán)剩盒。

練習:

5、循環(huán)優(yōu)化

  • 代碼外題:對于一個循環(huán)L路召,存在循環(huán)不變運算S(不隨循環(huán)次數(shù)變化):A=BopC或A=opB或A=B勃刨,要滿足下述條件:
    1. S所在節(jié)點是L所有出口節(jié)點的必經(jīng)節(jié)點。
    2. A在L中其它地方未在定值
    3. L中所有A引用只有S中A定值才可達
    算法如下:
  1. 看L中各基本塊的每個四元式股淡,他的每個運算對象為常數(shù)或者在定值點L外身隐,將此四元式標為不變運算。
  2. 依次查看尚未標記的四元式唯灵,如果.......贾铝,或者只有一個到達一定值點且該點上的四元式標記為不變運算,比如A=3,X=A+2埠帕,循環(huán)中A=3定值定值點可唯一到達的X=A+2也標記為不變運算垢揩。
  3. 不變運算提到L之外,(滿足三條件敛瓷,或者出循環(huán)后不活躍的話滿足后倆就可以)

練習:

  • 強度削弱:乘法外提里面換為加法叁巨,或者加法外提里面換成加一

練習:

  • 刪除歸納變量:循環(huán)中對變量I只有形如I=I\pmC的賦值,其中C為循環(huán)不變量呐籽,稱I為基本歸納變量锋勺。J=C1*I\pmC2,其中C1和C2都是循環(huán)不變量狡蝶,J是歸納變量庶橱。。贪惹。苏章。。。枫绅。
  • 基本歸納變量:給自己定值泉孩,給其他歸納變量賦值,控制循環(huán)(給其他歸納變量賦值在強度削弱時已經(jīng)撇清了)撑瞧,出循環(huán)不活躍可刪棵譬。刪除歸納變量就是變換循環(huán)控制條件。選一個M预伺,盡量在循環(huán)中引用订咸,出了循環(huán)活躍,有M和B關系酬诀。


    刪除歸納變量.jpg

    參考171頁例題脏嚷。

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市瞒御,隨后出現(xiàn)的幾起案子父叙,更是在濱河造成了極大的恐慌,老刑警劉巖肴裙,帶你破解...
    沈念sama閱讀 222,590評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件趾唱,死亡現(xiàn)場離奇詭異,居然都是意外死亡蜻懦,警方通過查閱死者的電腦和手機甜癞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來宛乃,“玉大人悠咱,你說我怎么就攤上這事≌髁叮” “怎么了析既?”我有些...
    開封第一講書人閱讀 169,301評論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長谆奥。 經(jīng)常有香客問我眼坏,道長,這世上最難降的妖魔是什么酸些? 我笑而不...
    開封第一講書人閱讀 60,078評論 1 300
  • 正文 為了忘掉前任宰译,我火速辦了婚禮,結果婚禮上擂仍,老公的妹妹穿的比我還像新娘囤屹。我一直安慰自己熬甚,他們只是感情好逢渔,可當我...
    茶點故事閱讀 69,082評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著乡括,像睡著了一般肃廓。 火紅的嫁衣襯著肌膚如雪智厌。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,682評論 1 312
  • 那天盲赊,我揣著相機與錄音铣鹏,去河邊找鬼。 笑死哀蘑,一個胖子當著我的面吹牛诚卸,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播绘迁,決...
    沈念sama閱讀 41,155評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼合溺,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了缀台?” 一聲冷哼從身側響起棠赛,我...
    開封第一講書人閱讀 40,098評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎膛腐,沒想到半個月后睛约,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,638評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡哲身,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,701評論 3 342
  • 正文 我和宋清朗相戀三年晴叨,在試婚紗的時候發(fā)現(xiàn)自己被綠了穆律。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,852評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖岛杀,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情旋炒,我是刑警寧澤尤泽,帶...
    沈念sama閱讀 36,520評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站巾钉,受9級特大地震影響翘狱,放射性物質發(fā)生泄漏。R本人自食惡果不足惜砰苍,卻給世界環(huán)境...
    茶點故事閱讀 42,181評論 3 335
  • 文/蒙蒙 一潦匈、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧赚导,春花似錦茬缩、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春掂为,著一層夾襖步出監(jiān)牢的瞬間裕膀,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評論 1 274
  • 我被黑心中介騙來泰國打工勇哗, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留昼扛,地道東北人。 一個月前我還...
    沈念sama閱讀 49,279評論 3 379
  • 正文 我出身青樓欲诺,卻偏偏與公主長得像抄谐,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子扰法,可洞房花燭夜當晚...
    茶點故事閱讀 45,851評論 2 361

推薦閱讀更多精彩內(nèi)容

  • 鏈接地址:https://www.tutorialspoint.com/compiler_design/compi...
    dannyvi閱讀 4,738評論 1 12
  • Lua 5.1 參考手冊 by Roberto Ierusalimschy, Luiz Henrique de F...
    蘇黎九歌閱讀 13,836評論 0 38
  • feisky云計算斯稳、虛擬化與Linux技術筆記posts - 1014, comments - 298, trac...
    不排版閱讀 3,867評論 0 5
  • 如果把營銷看做釣魚的話,你就會發(fā)現(xiàn)有兩種常見的營銷玩法: 第一種:魚餌營銷 只見魚餌迹恐,沒有魚鉤 第二種:魚鉤營銷 ...
    柳相同閱讀 954評論 0 0
  • 這兩天感冒咳嗽挣惰,真?zhèn)€人都不好了。原本吃了晚飯殴边,喝了藥就乖乖的躺被窩憎茂,昏昏欲睡,可是就剛才被一陣鈴聲炸醒锤岸,炸的睡意全...
    桅笑閱讀 424評論 8 18