版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
PAGE2
inta[25][25],…a[i][j]=…a[i][j]=a[i][j]= 一.優(yōu)化所涉及的源程序的范圍—基本塊內(nèi)優(yōu)化;——5—目標(biāo)代碼生成前的優(yōu)化;5BeforeBeforeAfterX+2*Beforee+fe+
Afterx=e+f 3.LoopinvariantcodeBeforeb=for(i=0;i<3;i++)d[i]=2*b+1;
Afterb=z=2*b+for(i=0;i<3;i++)=zBeforeBefore AfterJump-to-jumpBeforeifelsegotoJ1;J1:gotoJ2;
AfterifgotoDeadcodeBeforecharif(c>300)a=1;a=2
Aftera=FunctionBefore AfterintCheck(int{return}voidmain({if(check(y))
voidmain({if(y>10}}Looptransformation-simple Csourcecodeinttable[100];step=1;for(i=0;i<100;i+=step)table[i]=0;beforei=L1:t1=i*4;=if(i<100)goto
afteri=t1=i*L1:table[t1]=0t1=t1+4;if(i<100)gotoLooptransformation-dynamicCsourcestep=for(i=0;i<MAX;i+=step)=beforeoptimizationstep=step_table[1];i=0;L1:t1=i*table[t1]=0;i=i+step;if(i<MAX)goto
afteri=step=t1=i*t2=step*2;L1:table[t1]=0;t1=t1+t2;i=i+step;if(i<MAX)gotoLooptransformation-composedCsourceinttable[0]=table[11]=table[0]=table[11]=table[22]=table[99]=beforei=0;j=t1=i*10;L1:t2=t1+t3=t2* /*addresstable[t3]=i;i=i+1;t1=t1+j=j+if(j<10)goto
i=0;j=t1=1*t2=t1+j;t3=t2*Repeat10table[t3]=i;i=i+1;t3=t3+PAGE20根據(jù)基本塊的結(jié)構(gòu)特點(diǎn),它的入口語句⑵由條件轉(zhuǎn)移語句或無條件轉(zhuǎn)移語句轉(zhuǎn)⑶緊跟在條件轉(zhuǎn)移或無條件轉(zhuǎn)移后面的所屬的基本塊。即:⑴由該入口語句直到下一個(gè)入口語句(不包含下一個(gè)入口語句)之間的所有語句構(gòu)成一⑵由該入口語句到下一轉(zhuǎn)移語句(含該轉(zhuǎn)移語句)之間的所有語句構(gòu)成一個(gè)基本塊;或到程序中的停止或暫停語句(包含該停止或暫 234567PAGE24 Step2:對(duì)求出的每一個(gè)入口語句構(gòu)造相應(yīng)Step3:凡不屬于某一基本塊中的語句,皆G=(N,E,n0N:是流圖的所有的結(jié)點(diǎn)組成的集合。流圖設(shè)有結(jié)點(diǎn)i到結(jié)點(diǎn)k(或說從結(jié)點(diǎn)i到結(jié)點(diǎn)k由有向邊Ei相連)可表示為:iik①基本塊k在流圖中的位置緊跟在基本塊i之后,且基本塊i的出口語句不是無條igotos)if...goto(s)(s)k 234567 ①read②read③R=x/ ④ifR=0gotox=⑤x=x=⑥y=⑦goto⑧write ⑨DAG(DirectedAcyclicGraph)設(shè)G是由若干結(jié)點(diǎn)構(gòu)成的有向圖,從結(jié)點(diǎn)ni到結(jié)點(diǎn)nj的有向邊用ni→nj表示。①若存在有向邊序列ni1→ni2→…→nim,則稱結(jié)ni1與結(jié)點(diǎn)nim之間存在一條路徑,或稱ni1與nim是連通的。路徑上有向邊的數(shù)目為路徑的長度;②如果存在一條路徑,其長度≥2,且該路徑起每個(gè)基本塊都可以用一個(gè)DAG表示,稱為基本塊①葉結(jié)點(diǎn)用標(biāo)識(shí)符或常量作為其惟一的標(biāo)記,②內(nèi)部結(jié)點(diǎn)用運(yùn)算符標(biāo)記,同時(shí)也表示計(jì)算的③各結(jié)點(diǎn)上可以附加一個(gè)或多個(gè)標(biāo)識(shí)符,附加2828例8.3–
+ba,d 01 23 41
常見四元式與DAG結(jié)點(diǎn)對(duì)應(yīng)關(guān)系P226 A=BopC (op,B,C,A) ifBropCgotos(jrop,B,C,(s)Aop op,B, A B, AB31 31 輸入:一個(gè)基本塊iiDAG:[1].[2].[3]. [4]. 3,則令:NODE(B)=n,即葉子結(jié)2,轉(zhuǎn)[2]1,如果NODE(C)無定義,則建立PAGE34NODE(B)是標(biāo)記為常數(shù)的葉子結(jié)點(diǎn),則轉(zhuǎn)②如果NODE(B)和NODE(C)都是標(biāo)記為常數(shù)的葉opB(即常量合并),設(shè)得到的新常數(shù)為P。如果NODE(B)是處理當(dāng)前四元式時(shí)新建立的結(jié)點(diǎn),則刪除它。如果NODE(P)無定義,則建立一標(biāo)記為P的葉子結(jié)點(diǎn),令NODE(P)=n,轉(zhuǎn)[4]。④執(zhí)行BopC(即常量合并),設(shè)得到的新常數(shù)為P。如果NODE(B)或NODE(C)是處理當(dāng)前四元式時(shí)新建立的結(jié)點(diǎn),則刪除它。如果NODE(P義,則建立一標(biāo)記為P的葉子結(jié)點(diǎn),令NODE(P)=n①檢查DAG中是否有一結(jié)點(diǎn),其唯一后繼為NODE(BOP如果沒有,則建立該結(jié)點(diǎn),并令NODE(OP)=n;否則,為了敘述方便,也認(rèn)為NODE(OP)=n。轉(zhuǎn)DAG中是否有一結(jié)點(diǎn),其左后繼為,右后繼為NODE(C)且標(biāo)記為OP(即查找公共子表達(dá)式)。如果沒有,則建立該結(jié)點(diǎn),并令NODE(OP)=n;否則,為了敘述方便,也認(rèn)為如果NODE(A)無定義,則把A附加在否則,先把A從NODE(A)結(jié)點(diǎn)的附加標(biāo)識(shí)符集中刪除(如果NODE(A)是葉子結(jié)點(diǎn),則其標(biāo)記A不刪除),把A附加在結(jié)點(diǎn)n的右邊,并令NODE(A)=n。 2*R+rT1*T22*R+rT3*T4
P228例PAGE39⑴T0=⑵T1=2*⑶T2=⑷A=T1* n5+ ⑴T0=⑵T1=2*⑷⑸A=T1⑷⑸A=T1*B=⑹T3=2*⑺T4=⑻T5=T3*⑼T6=R-⑽B=T5*
6 86578657–234 PAGE44
定義8.3n0出發(fā),到達(dá)nj的任何一條通路都必經(jīng)過ni,則稱ni是nj的必經(jīng)結(jié)點(diǎn),記作niDOMnj。 自反性:aDOMa傳遞性:如果aDOMb,bDOMc,則有:aDOMc。反對(duì)稱性:若有aDOMb,bDOMa,則有:a=b。 D(1)=D(2)=D(3)={1,2,D(4)={1,2,D(5)={1,2,4,D(6)={1,2,4,D(7)={1,2,4,定義8.5(回邊設(shè)a→b是流圖G中一條有向邊,如果bDOMa,則稱a→b是流圖G中的一條回邊。記作<a,b>。例8.5流圖中存在有向邊6→6,7→4和4→2。 D(6)={1,2,4,6則6D(7)={1,2,4,7則4D(4)={1,2,4則24849若<n,d>是一回邊,則由結(jié)點(diǎn)d、結(jié)點(diǎn)nnd的所有<6,6>loop={6<7,4>loop={4,5,6,7<4,2>loop={2,3,4,5,6,7PAGE51.實(shí)施
.循環(huán)優(yōu)化
采集一.為了進(jìn)行循環(huán)優(yōu)化和全局優(yōu)化,編譯程PAGE54點(diǎn) x=a*b+c; readx;x獲得值的中間代碼的位置d,稱為x的定值點(diǎn)。例如di:xdj:read
x的中間代碼的位置d,稱為變x的引用點(diǎn)。dji dki設(shè)有流圖G,變量AGdpd通路到達(dá)p且該通路上沒有對(duì)變量A進(jìn)行 <A>—對(duì)變量A的引用A—對(duì)變量AAp:
變量Ad的定值到達(dá)點(diǎn)
= = = PAGE61定義8.6(ud鏈P引用了變量A的值,則把GPA為A在引用點(diǎn)P的引用-定值鏈(即ud鏈)。 即某變量A在點(diǎn)d的引用的ud鏈,是AdAd注銷掉 在程序中對(duì)某變量A在點(diǎn)P進(jìn)行定值,如果存在一條從P開始的通路,其中引用了APA在點(diǎn)P是活躍的,否則稱變量A在點(diǎn)P是死亡的。定義8.7(du鏈假設(shè)在程序中某點(diǎn)P對(duì)一個(gè)變量A定A的引用點(diǎn)的全體A在定值點(diǎn)P的定值-引用鏈(即du 63A63d-du={d1,d2 ={dj+1,={di,dj+1,
tttt={dj,dk ={dk+2,dj,dkPAGE67 out[B]=gen[B]∪(in[B]–kill[B] 后(每個(gè)基本塊Bi的有關(guān)信息利in[B 前(每個(gè)基本塊Bi的有關(guān)信息利PAGE71IN(BiBi入口點(diǎn)OUT(BiBi出口點(diǎn)后,所有變GEN(Bi):BiBi出口之后所達(dá)Bi結(jié)束點(diǎn)的定值)。
IN(B)= P∈P(B) 12345674512763725①如果某定值點(diǎn)d在IN(B)中,而且被d定值的變量在B中未被重新定值,則d也在OUT(B)中;②如果定值點(diǎn)dGEN(B)中,則它一定在而對(duì)于IN(B),則可知,某定值點(diǎn)d到達(dá)基本 for(i=1;i<=N;i++{IN[Bi]=Φ; /*IN[Bi]和OUT[Bi]的迭代初值}change=―真 change:相繼2次迭代所得的IN[Bi]之值不等則為―真,whilechange 需要繼續(xù)迭代;若相等,則迭代過程結(jié)束,值為― change=―for(i=1;i<=N;i++ NEWIN=∪out[P]; /*P∈Pred(Bi)。求B的前驅(qū)塊的OUT的并*/if(NEWIN!=IN[Bi] /*NEWIN記錄每次迭代后IN[Bi]的新值 =―真”; OUT[Bi]=GEN[Bi]∪(IN[Bi]-}}}}}若在基本塊B中,某變量A的引用點(diǎn)u之前有A的定值點(diǎn)dd點(diǎn)A的定值能到達(dá)u,則Auudggow0jl;若在基本塊B中,某變量A的引用點(diǎn)u之前無A的定值點(diǎn),則包含在IN[B]中的全部A的定值點(diǎn)均可到達(dá)點(diǎn)uIN[B]中的這些A的定值點(diǎn)組成Auud鏈。x+yPP算x+y,并且在最后一個(gè)x+y到P之間未對(duì)x或y定值,則表達(dá)式x+y在點(diǎn)P可用。xyB2中沒有對(duì)變量iB2中沒有對(duì)變量iB2中對(duì)變量i定值B2中對(duì)變量i定值Out[B]=in[B]–kill[B] in(B)=∩ 設(shè)in(B0)= 7979INL(B)=OUTL(B)–DEFL(B)∪USEL(B) OUTL(B)=∪ OUTL(B)B的出口點(diǎn)PAGE81
∴ 代碼外提就是將循環(huán)中的不變運(yùn)算提到這里所指的不變運(yùn)算,是指與循環(huán)執(zhí)行次數(shù)無關(guān)的運(yùn)算,或不受循環(huán)控制變量影響84例如,設(shè)循環(huán)L84 A= I=1;L1:B=J+C=B+A=C+ifI=100gotoL2I=I+1gotoL2:PAGE87<B,B>loop={B,B B=J+1JJ B2查找循環(huán)中的不變運(yùn)算;(X1)實(shí)施代碼外提;(X2)依次查看L如果其中的每個(gè)運(yùn)算對(duì)象為常數(shù)或定值點(diǎn)在L之外(根據(jù)ud鏈判斷),將該語句標(biāo)記為依次查看未被標(biāo)記為“不變運(yùn)算”的語句,如果其運(yùn)算對(duì)象為常數(shù)或定值點(diǎn)在L外,或只有一個(gè)到達(dá)-定值點(diǎn)且該點(diǎn)上的語句已標(biāo)記為“不變運(yùn)算”,則將被查看的 SABopC或A=opB或AB,①(iii)L中所有AS②A在離開L后不再是活躍的,且條件①的在L的任何出口結(jié)點(diǎn)的后繼結(jié)點(diǎn)(指不屬于LL的前置結(jié)點(diǎn)中。但若S中的運(yùn)算對(duì)象(B或C)是在L中定值的,那么,只有當(dāng)這些定值語句都提到前置結(jié)點(diǎn)中后,才可把S也外提。
ifu<vgotoB3
L={B2,B3,B4v=v-ifv<=20goto
B5,A **LA不止一次定值情況下,i阻擋將A=3外B5時(shí),A
A= ifu<vgotoA=ifv<=20gotoj= ***L中所有A的引用點(diǎn)只有語句S中A的定值
ifu<vgoto B4時(shí),A的
k=AA=2;v=v-ifv<=20goto= I=I=T=K*IK1T=T±
98II=I±C式的賦值,其中CI如果I是循環(huán)中一個(gè)基本歸納變量,變量J在循環(huán)中的定值總可化為I的同一線性函數(shù)的形式:J=C1*I±C2,其中:C1、C2是循環(huán)不變量,則稱J是歸納變量,稱J與I同族。 PAGE102 (W1:查找歸納變量step2:尋找L中只有一個(gè)定值的K(歸納K=J*C;K=C*J;K=J/C;K=J±C;J是基本歸納變量,KJ族中;K、J同族}J是歸納變量,J∈K族,K、J、I同族 LJ的惟一定值和對(duì)K的定值間沒有對(duì)I的定值;**找出一族歸納變量,可以變換計(jì)算歸納變量的指令(*→+) (
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024-2025學(xué)年人教版九年級(jí)英語復(fù)習(xí) 專題05 閱讀理解之說明文 【期末必刷15篇】
- 八年級(jí)語文第三次月考卷(考試版A3)【測(cè)試范圍:八上第1~5單元】(湖南長沙專用)-A4
- 三年級(jí)下冊(cè)英語一課一練-Module 7 unit2 it's warm today∣外研社(三起)(含解析)-1小學(xué)英語教學(xué)教材課件
- 2023年高頻電控氣閥項(xiàng)目融資計(jì)劃書
- 烹飪?cè)现R(shí)題庫(附參考答案)
- 養(yǎng)老院老人生活照顧細(xì)節(jié)制度
- 養(yǎng)老院老人健康巡查制度
- 汽車行業(yè)質(zhì)量管理體系內(nèi)審員模擬試題及答案
- 新造集裝箱檢驗(yàn)合同范本
- 承包道路填石粉工程協(xié)議書
- 三維超聲輸卵管造影的應(yīng)用課件
- 高壓旋噴樁檢測(cè)方案
- Unit1 My classroom Part A Lets spell(說課稿)-2022-2023學(xué)年英語四年級(jí)上冊(cè)
- 查看下載鄭州電視臺(tái)商都頻道簡介
- 2023年國開大學(xué)期末考復(fù)習(xí)題-10861《理工英語4》
- 公安廉政心談話六篇
- 【要點(diǎn)解讀】《實(shí)踐是檢驗(yàn)真理的唯一標(biāo)準(zhǔn)》論證邏輯圖
- 數(shù)字電子技術(shù)(山東工商學(xué)院)知到章節(jié)答案智慧樹2023年
- 商務(wù)禮儀(山東聯(lián)盟)知到章節(jié)答案智慧樹2023年山東財(cái)經(jīng)大學(xué)
- 人教部編版語文九年級(jí)上冊(cè)第一單元分層作業(yè)設(shè)計(jì)
- 《怪奇事物所》讀書筆記思維導(dǎo)圖PPT模板下載
評(píng)論
0/150
提交評(píng)論