編譯器筆記47-代碼優(yōu)化-基本塊的優(yōu)化

基本塊的優(yōu)化

很多重要的局部?jī)?yōu)化技術(shù)首先把一個(gè)基本塊轉(zhuǎn)換成為一個(gè)無環(huán)有向圖(directed acyclic graph , DAG)

基本塊的DAG表示

例.png

基本塊中的每個(gè)語句s都對(duì)應(yīng)一個(gè)內(nèi)部結(jié)點(diǎn)N

  • 結(jié)點(diǎn)N的標(biāo)號(hào)是s中的運(yùn)算符;同時(shí)還有一個(gè)定值變量表被關(guān)聯(lián)到N,表示s是在此基本塊內(nèi)最晚對(duì)表中變量進(jìn)行定值的語句。
  • N的子結(jié)點(diǎn)是基本塊中在s之前、最后一個(gè)對(duì)s所使用的運(yùn)算分量進(jìn)行定值的語句對(duì)應(yīng)的結(jié)點(diǎn) 。如果s的某個(gè)運(yùn)算分量在基本塊內(nèi)沒有在s 之前被定值,則這個(gè)運(yùn)算分量對(duì)應(yīng)的子結(jié)點(diǎn)就是代表該運(yùn)算分量初始值的葉結(jié)點(diǎn)(為區(qū)別起見,葉節(jié)點(diǎn)的定值變量表中的變量加上下腳標(biāo)0)
  • 在為語句x=y+z構(gòu)造結(jié)點(diǎn)N的時(shí)候,如果x已經(jīng)在某結(jié)點(diǎn)M的定值變量表中,則從M的定值變量表中刪除變量x。

基于基本塊的DAG刪除無用代碼

從一個(gè)DAG上刪除所有沒有附加活躍變量(活躍變量是指其值可能會(huì)在以后被使用的變量)的根結(jié)點(diǎn)(即沒有父結(jié)點(diǎn)的結(jié)點(diǎn))。重復(fù)應(yīng)用這樣的處理過程就可以從DAG中消除所有對(duì)應(yīng)于無用代碼的結(jié)點(diǎn)。

例.png

數(shù)組元素賦值指令的表示

例.png

根據(jù)基本塊的DAG可以獲得一些非常有用的信息

  • 確定哪些變量的值在該基本塊中賦值前被引用過

    在DAG中創(chuàng)建了葉結(jié)點(diǎn)的那些變量

  • 確定哪些語句計(jì)算的值可以在基本塊外被引用

    在DAG構(gòu)造過程中為語句s(該語句為變量x定值)創(chuàng)建的節(jié)點(diǎn)N,在DAG構(gòu)造結(jié)束時(shí)x仍然是N的定值變量。

從DAG到基本塊的重組

  • 對(duì)每個(gè)具有若干定值變量的節(jié)點(diǎn),構(gòu)造一個(gè)三地址語句來計(jì)算其中某個(gè)變量的值

    傾向于把計(jì)算得到的結(jié)果賦給一個(gè)在基本塊出口處活躍的變量(如果沒有全局活躍變量的信息作為依據(jù),就要假設(shè)所有變量都在基本塊出口處活躍,但是不包含編譯器為處理表達(dá)式而生成的臨時(shí)變量)

  • 如果結(jié)點(diǎn)有多個(gè)附加的活躍變量,就必須引入復(fù)制語句,以便給每一個(gè)變量都賦予正確的值。

例.png
例.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 代碼優(yōu)化 代碼優(yōu)化的含義是:對(duì)代碼進(jìn)行等價(jià)變換,使得變換后的代碼具有更高的時(shí)間效率和空間效率。代碼優(yōu)化的目的是提高...
    小屋的快樂閱讀 9,928評(píng)論 0 2
  • 在C語言中,五種基本數(shù)據(jù)類型存儲(chǔ)空間長度的排列順序是: A)char B)char=int<=float C)ch...
    夏天再來閱讀 4,007評(píng)論 0 2
  • 大學(xué)期間的筆記補(bǔ)全。編譯原理內(nèi)容太多分幾次。課本《編譯原理》第三版,陳火旺等編著。筆記總目錄:一、引論二、高級(jí)語言...
    嘟嚕嘟嚕啪閱讀 1,258評(píng)論 0 0
  • 1)這本書為什么值得看: Python語言描述,如果學(xué)的Python用這本書學(xué)數(shù)據(jù)結(jié)構(gòu)更合適 2016年出版,內(nèi)容...
    孫懷闊閱讀 12,884評(píng)論 0 15
  • 官網(wǎng) 中文版本 好的網(wǎng)站 Content-type: text/htmlBASH Section: User ...
    不排版閱讀 4,707評(píng)論 0 5

友情鏈接更多精彩內(nèi)容