freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

編譯原理之代碼生成-wenkub.com

2025-05-09 04:33 本頁(yè)面
   

【正文】 L1: goto L2 若沒(méi)有跳轉(zhuǎn)到 L1的指令,且指令 L1: goto L2之前是一個(gè)無(wú)條件跳轉(zhuǎn)指令,則 L1該行指令可刪除??梢詣h除第二條指令 消除不可達(dá)指令 ?緊跟在無(wú)條件轉(zhuǎn)移指令后不帶標(biāo)號(hào)的指令 ? 重復(fù)這個(gè)操作,可刪除一個(gè)指令序列 ?級(jí)聯(lián)跳轉(zhuǎn)代碼 ? 比如示例:調(diào)試代碼(當(dāng) debug= 1時(shí)才運(yùn)行的程序片斷)的原始中間代碼可能如下: ?if debug==1 goto L1 ?goto L2 ?L1:print debugging information ?L2: 有兩個(gè) GOTO 消除不可達(dá)指令 ?級(jí)聯(lián)跳轉(zhuǎn)代碼消除 ? 調(diào)試代碼(當(dāng) debug= 1時(shí)才運(yùn)行的程序片斷)的中間代碼形如: ?if debug==1 goto L1 ?goto L2 ?L1:print debugging information ?L2: ? 可替換為: ?if debug!=1 goto L2 ?print debugging information ?L2: 消除不可達(dá)指令 ?級(jí)聯(lián)跳轉(zhuǎn)代碼 ? 調(diào)試代碼可替換為: ?if debug!=1 goto L2 ?print debugging information ?L2: ? 如果已知 debug一定是 0,那么第一條指令替換成為goto L2;(比如,生成 release版本) ? 替換后,打印調(diào)試信息的所有指令變?yōu)椴豢蛇_(dá)指令,可刪除 控制流優(yōu)化 ?goto L1。 例 ( 1) ?已知: ? a、 b、 c、 d在出口處活躍 ? t、 u、 v是局部臨時(shí)變量 ?將基本塊翻譯成代碼 ,只有三個(gè)寄存器 t = a b u = a – c v = t + u a = d d = v + u 例 ( 2) 寄存器描述符 地址描述符 圖 816 生成的指令及寄存器和地址描述符的改變過(guò)程 初始 例 ( 3) 寄存器描述符 地址描述符 圖 816 生成的指令及寄存器和地址描述符的改變過(guò)程 getReg函數(shù)的設(shè)計(jì)( 1) ?目標(biāo):減少 LD/ST指令 ?任務(wù):為運(yùn)算分量和結(jié)果分配寄存器 ? 例: x= y+z ?為運(yùn)算分量 y分配寄存器 ? 若 y已在某個(gè)寄存器中,不需處理 ? 若 y不在寄存器中,且有空閑寄存器,選擇這個(gè)寄存器 ? 若 y不在寄存器中,且沒(méi)有空閑寄存器(見(jiàn)下頁(yè)) getReg函數(shù)的設(shè)計(jì)( 2) ?為運(yùn)算分量 y分配寄存器 ? … 如果不在寄存器中,且沒(méi)有空閑寄存器,則尋找一個(gè)可使用的寄存器 R ? 設(shè) R的寄存器描述符表示變量 v在 R中,若 V滿(mǎn)足以下三種情況之一,則可以選擇寄存器 R分配給 y: ? v還有其他存儲(chǔ)位置 ? v就是 x,且 x不是運(yùn)算分量之一 (怕 v被修改 ) ? V此后不再被使用 ? 如果前面三條不滿(mǎn)足。 代碼生成器 ?根據(jù)三地址序列生成指令 ? 假設(shè):每個(gè)三地址指令只有一個(gè)對(duì)應(yīng)的機(jī)器指令 ? 有一組寄存器用于計(jì)算基本塊內(nèi)部的值; ?主要目標(biāo) ? 盡量減少加載和保存指令,即最大限度利用寄存器; ?寄存器主要使用方法 ? 執(zhí)行運(yùn)算時(shí),運(yùn)算分量必須放在寄存器中; ? 用于臨時(shí)變量 ? 存放全局的值 ? 進(jìn)行運(yùn)行時(shí)刻管理(比如:棧頂指針) 算法基本思想及數(shù)據(jù)結(jié)構(gòu) ?盡可能留 ? 依次考慮各個(gè)指令,盡可能把值保留在寄存器中,以減少寄存器 /內(nèi)存之間的數(shù)據(jù)交換 ?盡可能用 ? 為一個(gè)三地址指令生成機(jī)器指令時(shí),只有當(dāng)運(yùn)算分量不在寄存器中時(shí),才從內(nèi)存載入; ? 盡量保證寄存器中值不被使用時(shí),才把它覆蓋掉。殺誰(shuí)? ? 全殺 !! 從 DAG到基本塊 ?重構(gòu)的方法 ? 對(duì)每個(gè)結(jié)點(diǎn)構(gòu)造一個(gè)三地址語(yǔ)句來(lái)計(jì)算對(duì)應(yīng)的值 ? 結(jié)果應(yīng)該盡量賦給一個(gè)活躍的變量 ?一般為出口活躍,如果不確定則假設(shè)所有非臨時(shí)變量都出口活躍 ? 如果結(jié)點(diǎn)有多個(gè)關(guān)聯(lián)的變量,則需要用復(fù)制語(yǔ)句進(jìn)行賦值。 ? 殺死的意思--指不能參加優(yōu)化 指針賦值 /過(guò)程調(diào)用 ?通過(guò)指針進(jìn)行取值 /賦值: x=*p *q=y。 ? 如果存在,則不需要生成新的結(jié)點(diǎn),用 N代表 M; ? 例如: ? a=b+c ? b=ad ? c=b+c ? d=ad ? 找出公共的表達(dá)式? ? 注意:兩個(gè) b+c實(shí)際上并不是公共子表達(dá)式 消除死代碼 ?在 DAG圖上消除沒(méi)有附加活躍變量的根結(jié)點(diǎn)(沒(méi)有父結(jié)點(diǎn)的結(jié)點(diǎn)),即可消除死代碼 ?如果圖中 c、 e不是活躍變量,則
點(diǎn)擊復(fù)制文檔內(nèi)容
研究報(bào)告相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1