編譯原理第十一章_第1頁
編譯原理第十一章_第2頁
編譯原理第十一章_第3頁
編譯原理第十一章_第4頁
編譯原理第十一章_第5頁
已閱讀5頁,還剩53頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、2021/8/1412021/8/142 優(yōu)化:是對(duì)代碼進(jìn)行等價(jià)變換,使得變換后的代碼運(yùn)行結(jié)果與變換前代碼運(yùn)行結(jié)果相同,而運(yùn)行速度加大或占用存儲(chǔ)空間少,或兩者都有。 編譯程序的優(yōu)化工作旨在生成較好性能的目標(biāo)代碼,為此,編譯程序需要對(duì)代碼(中間代碼或目標(biāo)代碼)進(jìn)行各種方式的變換 變換的宗旨是:等價(jià)-經(jīng)優(yōu)化工作變換后的代碼運(yùn)行結(jié)果應(yīng)與原來程序運(yùn)行結(jié)果一樣。 2021/8/143 優(yōu)化工作階段可在中間代碼生成之后和(或)目標(biāo)代碼生成之后進(jìn)行 中間代碼的優(yōu)化是對(duì)中間代碼進(jìn)行等價(jià)變換。目標(biāo)代碼的優(yōu)化是在目標(biāo)代碼生成之后進(jìn)行的,在很大程度上依賴于具體的機(jī)器 2021/8/144 依據(jù)優(yōu)化所涉及的程序范圍,

2、可分為三個(gè)不同的級(jí)別。 局部?jī)?yōu)化指的是在只有一個(gè)入口、一個(gè)出口的基本程序塊上進(jìn)行的優(yōu)化。 循環(huán)優(yōu)化是對(duì)循環(huán)中的代碼進(jìn)行的優(yōu)化。 全局優(yōu)化是在整個(gè)程序范圍內(nèi)進(jìn)行的優(yōu)化。 2021/8/145 常用的優(yōu)化技術(shù)有: 刪除多余運(yùn)算,循環(huán)不變代碼外提, 強(qiáng)度削弱,變換循環(huán)控制條件, 合并已知量與復(fù)寫傳播 刪除無用賦值。 2021/8/146 P =0for I =1 to 20 doP =P+AI*BI;假定每個(gè)元素占假定每個(gè)元素占4個(gè)字長(zhǎng)編址個(gè)字長(zhǎng)編址 經(jīng)過編譯得到的中間代碼如圖經(jīng)過編譯得到的中間代碼如圖 2021/8/147 刪除多余運(yùn)算(刪除公共子表達(dá)式)刪除多余運(yùn)算(刪除公共子表達(dá)式) 代碼外提

3、代碼外提 2021/8/1482021/8/149 強(qiáng)度削弱強(qiáng)度削弱 : 2021/8/1410 變換循環(huán)控制條件:變換循環(huán)控制條件: 合并已知量與復(fù)寫傳播合并已知量與復(fù)寫傳播 四元式(四元式(3)可變?yōu)椋┛勺優(yōu)門14 四元式四元式(6)把把T1的值復(fù)寫到的值復(fù)寫到T4中,四元式(中,四元式(8)要)要引用引用T4的值,而從四元式(的值,而從四元式(6)到四元式()到四元式(8)之)之間未改變間未改變T4和和T1的值,則將四元式(的值,則將四元式(8)改為)改為T6 =T5T12021/8/14112021/8/1412 刪除無用賦值刪除無用賦值 (6)對(duì)T4賦值,但T4未被引用;另外,(2)

4、和(11)對(duì)I賦值,但只有(11)引用I 2021/8/1413局部?jī)?yōu)化局部?jī)?yōu)化 指基本塊內(nèi)的優(yōu)化 是指程序中一個(gè)順序執(zhí)行的語句序列,其中只有一個(gè)入口語句和一個(gè)出口語句??刂屏髦荒軓钠淙肟谡Z句進(jìn)入,從其出口語句退出,沒有中途停止或分支 局部?jī)?yōu)化工作包括對(duì)于一個(gè)給定的程序,把它劃分為一系列的基本塊,在各個(gè)基本塊范圍內(nèi)分別進(jìn)行優(yōu)化 如何分基本塊?如何分基本塊?2021/8/1414基本塊的劃分基本塊的劃分 先定義基本塊的入口語句: 程序的第一個(gè)語句;或者, 條件轉(zhuǎn)移語句或無條件轉(zhuǎn)移語句的 轉(zhuǎn)移目標(biāo)語句;或者, 緊跟在條件轉(zhuǎn)移語句后面的語句。 2021/8/1415劃分中間代碼(四元式程序)為基本塊

5、的算法 其步驟如下: 求出四元式程序中各個(gè)基本塊的入口語句。 對(duì)每一入口語句,構(gòu)造其所屬的基本塊。它是由該入口語句到下一入口語句(不包括下一入口語句),或到一轉(zhuǎn)移語句(包括該轉(zhuǎn)移語句),或到一停語句(包括該停語句)之間的語句序列組成的。 凡未被納入某一基本塊的語句、都是程序中控制流程無法到達(dá)的語句,因而也是不會(huì)被執(zhí)行到的語句,可以把它們刪除。 2021/8/1416(1) read (C)(2) A:= 0(3) B:= 1(4) L1: A:=A + B(5) if B= C goto L2(6) B:=B+1(7) goto L1(8) L2: write (A)(9) halt語句(1)

6、是程序的第一個(gè)語句,因此它是入口語句。語句(4)和語句(8)是條件轉(zhuǎn)移語句或無條件轉(zhuǎn)移語句的轉(zhuǎn)移目標(biāo)語句,因此是入口語句。語句(6)是緊跟在條件轉(zhuǎn)移語句后面的語句,因此是入口語句。語句(1),(2)和(3)構(gòu)成一個(gè)基本塊,語句(4)和(5)構(gòu)成一個(gè)基本塊,語句(6)和(7)構(gòu)成一個(gè)基本塊,語句(8)和(9)構(gòu)成一個(gè)基本塊。 2021/8/1417基本塊內(nèi)的優(yōu)化變換 兩類重要的局部等價(jià)變換可用于基本塊:保結(jié)構(gòu)的變換和代數(shù)變換 2021/8/1418 有四元式程序:t1 := 4 - 2t2 := t1 /2 t3 := a * t2t4 := t3 * t1t5 := b + t4c := t5

7、 * t52021/8/1419 進(jìn)行合并已知量變換后得到:t1 := 2t2 := t1 /2 t3 := a * t2t4 := t3 * t1t5 := b + t4c := t5 * t52021/8/1420 再進(jìn)行復(fù)寫傳播和刪除無用賦值等變換后得到:t2 := 2 /2 t3 := a * t2t4 := t3 * 2t5 := b + t4c := t5 * t52021/8/1421 再進(jìn)行合并已知量變換后得到:t2 := 1 t3 := a * t2t4 := t3 * 2t5 := b + t4c := t5 * t5 2021/8/1422 再進(jìn)行復(fù)寫傳播和刪除無用賦值等

8、變換后得到:t3 := a * 1t4 := t3 * 2t5 := b + t4c := t5 * t5接著使用代數(shù)變換后有:t3 := at4 := t3 * 2t5 := b + t4c := t5 * t52021/8/1423 使用復(fù)寫傳播和刪除無用賦值變換后又有:t4 := a * 2t5 := b + t4c := t5 * t5再使用代數(shù)變換:t4 := a + at5 := b + t4c := t5 * t52021/8/1424 重新命名臨時(shí)變量:t1 := a + at5 := b + t1c := t5 * t5還可減少臨時(shí)變量:t1 := a + at1 := b

9、+ t1c := t1 * t1 OK2021/8/1425基本塊的基本塊的DAG表示表示 一個(gè)有向圖中,我們稱任一有向邊ninj(或表示為有序?qū)Γ╪i,nj))中的結(jié)點(diǎn)ni為結(jié)點(diǎn)nj的前驅(qū)(父結(jié)),結(jié)點(diǎn)nj為結(jié)點(diǎn)ni的后繼(子結(jié))。 任一有向邊序列n1n2,n2n3,nk-1nk為從結(jié)點(diǎn)n1到結(jié)點(diǎn)nk的一條通路 。如果其中n1nk,則稱該通路為環(huán)路 如果有向圖中任一通路都不是環(huán)路,則稱該有向圖為無環(huán)路有向圖,簡(jiǎn)稱DAG 2021/8/14262021/8/1427 此處要用到的有向圖,是一種其結(jié)點(diǎn)帶有下述標(biāo)記或附其結(jié)點(diǎn)帶有下述標(biāo)記或附加信息的加信息的DAG: 圖的,即無后繼的結(jié)點(diǎn),以一標(biāo)識(shí)符

10、(變量名)或常數(shù)作為標(biāo)記,表示這個(gè)結(jié)點(diǎn)代表該變量或常數(shù)的值。如果葉結(jié)點(diǎn)用來代表某變量A的地址,則用addr(A)作為這個(gè)結(jié)點(diǎn)的標(biāo)記。通常把葉結(jié)點(diǎn)上作為標(biāo)記的標(biāo)識(shí)符加上下標(biāo)0,以表示它是該變量的初值。 圖的,即有后繼的結(jié)點(diǎn),以一運(yùn)算符作為標(biāo)記,表示這個(gè)結(jié)點(diǎn)代表應(yīng)用該運(yùn)算符對(duì)其后繼結(jié)點(diǎn)所代表的值進(jìn)行運(yùn)算的結(jié)果。 圖中各個(gè)結(jié)點(diǎn)上可能附加一個(gè)或多個(gè)標(biāo)識(shí)符,表示這些變量具有該結(jié)點(diǎn)所代表的值。 2021/8/1428 這種DAG可用來描述計(jì)算過程,又稱為描述計(jì)算過程的DAG 一個(gè)基本塊,可用一個(gè)DAG來表示。下圖列出各種四元式及相對(duì)應(yīng)的DAG的結(jié)點(diǎn)形式。圖中ni為結(jié)點(diǎn)編號(hào),結(jié)點(diǎn)下面的符號(hào)(運(yùn)算符、標(biāo)識(shí)符或

11、常數(shù))是各結(jié)點(diǎn)的標(biāo)記,各結(jié)點(diǎn)右邊的標(biāo)識(shí)符是結(jié)點(diǎn)的附加標(biāo)識(shí)符。 2021/8/1429(0)A:=B (:(:=,B,-,A) (1)A:=op B (op,B,-,A) (2)A:=B op C (op,B,C,A) 2021/8/1430 假設(shè)DAG各結(jié)點(diǎn)信息將用某種適當(dāng)?shù)臄?shù)據(jù)結(jié)構(gòu)來存放。并設(shè)有一個(gè)標(biāo)識(shí)符(包括常數(shù))與結(jié)點(diǎn)的對(duì)應(yīng)表。NODE(A)是描述這種對(duì)應(yīng)關(guān)系的一個(gè)函數(shù),它的值或者是一個(gè)結(jié)點(diǎn)的編號(hào)n,或者無定義。前一個(gè)情況代表DAG中存在一個(gè)結(jié)點(diǎn)n,A是其上的標(biāo)記或附加標(biāo)識(shí)符。 2021/8/1431下面是僅含0,1,2型四元式的基本塊的DAG構(gòu)造算法。 首先,首先,DAG為空。為空。對(duì)

12、基本塊的每一四元式,依次執(zhí)行:對(duì)基本塊的每一四元式,依次執(zhí)行:1 如果如果NODE(B)無定義,則構(gòu)造一標(biāo)記為)無定義,則構(gòu)造一標(biāo)記為B的葉結(jié)點(diǎn)并定的葉結(jié)點(diǎn)并定義義NODE(B)為這個(gè)結(jié)點(diǎn);)為這個(gè)結(jié)點(diǎn);如果當(dāng)前四元式是如果當(dāng)前四元式是0型,則記型,則記NODE(B)的值為)的值為n,轉(zhuǎn),轉(zhuǎn)4。如果當(dāng)前四元式是如果當(dāng)前四元式是1型,則轉(zhuǎn)型,則轉(zhuǎn)2.(1)。)。如果當(dāng)前四元式是如果當(dāng)前四元式是2型,則:(型,則:()如果)如果NODE(C)無定義,)無定義,則構(gòu)造一標(biāo)記為則構(gòu)造一標(biāo)記為C的葉結(jié)點(diǎn)并定義的葉結(jié)點(diǎn)并定義NODE(C)為這個(gè)結(jié)點(diǎn),()為這個(gè)結(jié)點(diǎn),()轉(zhuǎn)轉(zhuǎn)2.(2)。)。2 (1) 如果

13、如果NODE(B)是標(biāo)記為常數(shù)的葉結(jié)點(diǎn),則轉(zhuǎn))是標(biāo)記為常數(shù)的葉結(jié)點(diǎn),則轉(zhuǎn)2.(3),),否則轉(zhuǎn)否則轉(zhuǎn)3.(1)。)。(2) 如果如果NODE(B)和)和NODE(C)都是標(biāo)記為常數(shù)的葉結(jié))都是標(biāo)記為常數(shù)的葉結(jié)點(diǎn),則轉(zhuǎn)點(diǎn),則轉(zhuǎn)2.(4),否則轉(zhuǎn)),否則轉(zhuǎn)3.(2)。)。(3) 執(zhí)行執(zhí)行opB(即合并已知量),令得到的新常數(shù)為(即合并已知量),令得到的新常數(shù)為P。如。如果果NODE(B)是處理當(dāng)前四元式時(shí)新構(gòu)造出來的結(jié)點(diǎn),則刪除它。)是處理當(dāng)前四元式時(shí)新構(gòu)造出來的結(jié)點(diǎn),則刪除它。如果如果NODE(P)無定義,則構(gòu)造一用)無定義,則構(gòu)造一用P做標(biāo)記的葉結(jié)點(diǎn)做標(biāo)記的葉結(jié)點(diǎn)n。置。置NODE(P)n,轉(zhuǎn)

14、,轉(zhuǎn)4.。(4) 執(zhí)行執(zhí)行BopC(即合并已知量即合并已知量),令得到的新常數(shù)為,令得到的新常數(shù)為P。如。如果果NODE(B)或)或NODE(C)是處理當(dāng)前四元式時(shí)新構(gòu)造出來的結(jié))是處理當(dāng)前四元式時(shí)新構(gòu)造出來的結(jié)點(diǎn),則刪除它。如果點(diǎn),則刪除它。如果NODE(P)無定義,則構(gòu)造一用)無定義,則構(gòu)造一用P做標(biāo)記的葉做標(biāo)記的葉結(jié)點(diǎn)結(jié)點(diǎn)n。置。置NODE(P)n,轉(zhuǎn),轉(zhuǎn)4.。 2021/8/1432 3(1) 檢查檢查DAG中是否已有一結(jié)點(diǎn),其唯一后繼為中是否已有一結(jié)點(diǎn),其唯一后繼為NODE(B),且標(biāo)記為),且標(biāo)記為op(即找公共子表達(dá)式)。如果(即找公共子表達(dá)式)。如果沒有,則構(gòu)造該結(jié)點(diǎn)沒有,則構(gòu)

15、造該結(jié)點(diǎn)n,否則就把已有的結(jié)點(diǎn)作為它的結(jié),否則就把已有的結(jié)點(diǎn)作為它的結(jié)點(diǎn)并設(shè)該結(jié)點(diǎn)為點(diǎn)并設(shè)該結(jié)點(diǎn)為n,轉(zhuǎn),轉(zhuǎn)4.。(2) 檢查檢查DAG中是否已有一結(jié)點(diǎn),其左后繼為中是否已有一結(jié)點(diǎn),其左后繼為NODE(B),右后繼為),右后繼為NODE(C),且標(biāo)記為),且標(biāo)記為op(即找即找公共子表達(dá)式公共子表達(dá)式)。如果沒有,則構(gòu)造該結(jié)點(diǎn)。如果沒有,則構(gòu)造該結(jié)點(diǎn)n,否則就把,否則就把已有的結(jié)點(diǎn)作為它的結(jié)點(diǎn)并設(shè)該結(jié)點(diǎn)為已有的結(jié)點(diǎn)作為它的結(jié)點(diǎn)并設(shè)該結(jié)點(diǎn)為n。轉(zhuǎn)。轉(zhuǎn)4.。4如果如果NODE(A)無定義,則把)無定義,則把A附加在結(jié)點(diǎn)附加在結(jié)點(diǎn)n上上并令并令NODE(A)n;否則先把;否則先把A從從NODE(A)

16、結(jié)點(diǎn)上)結(jié)點(diǎn)上的附加標(biāo)識(shí)符集中刪除(注意,如果的附加標(biāo)識(shí)符集中刪除(注意,如果NODE(A)是葉結(jié))是葉結(jié)點(diǎn),則其標(biāo)記點(diǎn),則其標(biāo)記A不刪除),把不刪除),把A附加到新結(jié)點(diǎn)附加到新結(jié)點(diǎn)n上并令上并令NODE(A)n。轉(zhuǎn)處理下一四元式。轉(zhuǎn)處理下一四元式。 2021/8/1433 例 試構(gòu)造以下基本塊G的DAG。(1) T0 =3.14(2) T1 =2 * T0(3) T2 =R + r(4) A =T1 * T2(5) B =A(6) T3 =2 * T0(7) T4 =R + r(8) T5 =T3 * T4(9) T6 =R - r(10) B =T5 * T6 2021/8/1434202

17、1/8/1435 將圖11.10(k)的基本塊G的DAG按原來構(gòu)造其結(jié)點(diǎn)的順序,重新寫成四元式,得到以下的四元式序列G G: (1) T0 =3.14(2) T1 =6.28(3) T3 =6.28(4) T2 =R+r(5) T4 =T2(6) A =6.28*T2(7) T5 =A(8) T6 =R-r(9) B =A*T6原來:G (1) T0 =3.14(2) T1 =2 * T0(3) T2 =R + r(4) A =T1 * T2(5) B =A(6) T3 =2 * T0(7) T4 =R + r(8) T5 =T3 * T4(9) T6 =R - r(10) B =T5 * T

18、6 1 G中的代碼(2)和(6)的已知量都已合并。2 G中(5)的無用賦值已被刪除。3 G中(3)和(7)的公共子表達(dá)式R+r只被計(jì)算一次,刪除了多余運(yùn)算。所以G是G的優(yōu)化結(jié)果。 2021/8/1436控制流分析和循環(huán)優(yōu)化 循環(huán)中的代碼反復(fù)執(zhí)行,因而為了提高目標(biāo)代碼的效率必須著重考慮循環(huán)的代碼優(yōu)化。 進(jìn)行循環(huán)優(yōu)化必須找出程序中的循環(huán),這就需要對(duì)程序的控制流程進(jìn)行分析 2021/8/1437控制流程圖 一個(gè)控制流程圖就是具有唯一首結(jié)點(diǎn)的有向圖。 首結(jié)點(diǎn)就是從它開始到控制流程圖中任何結(jié)點(diǎn)都有一條通路的結(jié)點(diǎn)。 把一個(gè)控制流程圖表示成一個(gè)三元組G(N,E,n0),其中,N代表圖中所有結(jié)點(diǎn)集,E代表圖中

19、所有有向邊集,n0代表首結(jié)點(diǎn)。 控制流程圖簡(jiǎn)稱為流圖流圖。2021/8/1438 一個(gè)程序可用一個(gè)流圖來表示。流圖中的有限結(jié)點(diǎn)集N就是程序的基本塊集,流圖中的結(jié)點(diǎn)就是程序中的基本塊。流圖的首結(jié)點(diǎn)就是包含程序第一個(gè)語句的基本塊。 程序流圖中的有向邊集E是這樣構(gòu)成的:假設(shè)流圖中結(jié)點(diǎn)i和結(jié)點(diǎn)j分別對(duì)應(yīng)于程序的基本塊i和基本塊j,則當(dāng)下述條件1)或2)有一個(gè)成立時(shí),從結(jié)點(diǎn)i有一有向邊引向結(jié)點(diǎn)j:1). 基本塊j在程序中的位置緊跟在基本塊i之后,并且基本塊的出口語句不是無條件轉(zhuǎn)移語句goto(s)或停語句。2). 基本塊i的出口語句是goto(s)或ifgoto(s),并且(s)是基本塊j的入口語句。

20、2021/8/1439 (1) read x(2) read y(3) r =x mod y(4) if r=0 goto (8)(5) x =y(6) y =r(7) goto (3)(8) write y(9) halt 2021/8/14402021/8/1441流圖的簡(jiǎn)潔表示2021/8/1442 在程序流圖中,我們稱具有下列性質(zhì)的結(jié)點(diǎn)序列在程序流圖中,我們稱具有下列性質(zhì)的結(jié)點(diǎn)序列為一個(gè)循環(huán):為一個(gè)循環(huán): 它們是強(qiáng)連通的。也即,其中任意兩個(gè)結(jié)它們是強(qiáng)連通的。也即,其中任意兩個(gè)結(jié)點(diǎn)之間,必有一條通路,而且該通路上各結(jié)點(diǎn)都點(diǎn)之間,必有一條通路,而且該通路上各結(jié)點(diǎn)都屬于該結(jié)點(diǎn)序列。如果序列只

21、包含一個(gè)結(jié)點(diǎn),則屬于該結(jié)點(diǎn)序列。如果序列只包含一個(gè)結(jié)點(diǎn),則必有一有向邊從該結(jié)點(diǎn)引到其自身。必有一有向邊從該結(jié)點(diǎn)引到其自身。 它們中間有且只有一個(gè)是入口結(jié)點(diǎn)。所謂它們中間有且只有一個(gè)是入口結(jié)點(diǎn)。所謂入口結(jié)點(diǎn),是指序列中具有下述性質(zhì)的結(jié)點(diǎn):入口結(jié)點(diǎn),是指序列中具有下述性質(zhì)的結(jié)點(diǎn):從序列外某結(jié)點(diǎn),有一有向邊引到它,或者從序列外某結(jié)點(diǎn),有一有向邊引到它,或者它就是程序流圖的首結(jié)點(diǎn)。它就是程序流圖的首結(jié)點(diǎn)。因此,我們定義的循環(huán)就是程序流圖中具有因此,我們定義的循環(huán)就是程序流圖中具有唯一入口結(jié)點(diǎn)的強(qiáng)連通子圖,從循環(huán)外要進(jìn)入循唯一入口結(jié)點(diǎn)的強(qiáng)連通子圖,從循環(huán)外要進(jìn)入循環(huán),必須首先經(jīng)環(huán),必須首先經(jīng)過循環(huán)的入口

22、結(jié)點(diǎn)。 2021/8/1443 在程序流圖中,對(duì)任意兩個(gè)結(jié)點(diǎn)m和n,如果從流圖的首結(jié)點(diǎn)出發(fā),到達(dá)n的任一通路都要經(jīng)過m,則稱m是n的必經(jīng)結(jié)點(diǎn), 記為m DOM n。流圖中結(jié)點(diǎn)n的所有必經(jīng)結(jié)點(diǎn)的集合,稱為結(jié)點(diǎn)n的必經(jīng)結(jié)點(diǎn)集, 記為D(n)。 循環(huán)的入口結(jié)點(diǎn)是循環(huán)中所有結(jié)點(diǎn)的必經(jīng)結(jié)點(diǎn)。2021/8/1444 D(1)=1D(2)=1,2D(3)=1,2,3D(4)=1,2,4D(5)=1,2,4,5D(6)=1,2,4,6D(7)=1,2,4,72021/8/1445循環(huán)的查找算法循環(huán)的查找算法 假設(shè)ab是流圖中的一條有向邊,如果b DOM a,則稱ab是流圖中的一條回邊。 如果已知有向邊nd是回

23、邊,那么就可以求出由它組成的循環(huán)。該循環(huán)就是由結(jié)點(diǎn)d、結(jié)點(diǎn)n以及有通路到達(dá)n而該通路不經(jīng)過d的所有結(jié)點(diǎn)組成,并且d是該循環(huán)的唯一入口結(jié)點(diǎn)。 2021/8/1446 有向邊66、74、42是回邊。因?yàn)楦鶕?jù)前例的結(jié)果有6 DOM 6,4 DOM 7,2 DOM 4,其它有向邊都不是回邊。 對(duì)于例子,由回邊66組成的循環(huán)就是6,由回邊74組成的循環(huán)是4,5,6,7;由回邊42組成的循環(huán)是2,3,4,5,6,7。 2021/8/1447循環(huán)優(yōu)化循環(huán)優(yōu)化 循環(huán)優(yōu)化的三種重要技術(shù)是代碼外提代碼外提;刪刪除歸納變量除歸納變量和強(qiáng)度削弱強(qiáng)度削弱。 只對(duì)代碼外提再進(jìn)行一些討論 2021/8/1448 代碼外提代碼外提 這種變換把循環(huán)不變運(yùn)算,即產(chǎn)生的結(jié)果獨(dú)立于循環(huán)執(zhí)行次數(shù)的表達(dá)式,放到循環(huán)的前面 所討論的循環(huán)只存在一個(gè)入口。實(shí)行代碼外提時(shí),在循環(huán)的入口結(jié)點(diǎn)前面建立一個(gè)新結(jié)點(diǎn)(基本塊),稱之為循環(huán)的前置結(jié)點(diǎn)。循環(huán)的前置結(jié)點(diǎn)以循環(huán)的入口結(jié)點(diǎn)為其唯一后繼,原來流圖中從循環(huán)外引到循環(huán)入口結(jié)點(diǎn)的有向邊,改成引到循環(huán)前置結(jié)點(diǎn) 2021/8/14492021/8/1450 前置結(jié)點(diǎn)也是唯一的,循環(huán)中外提的代碼將全部提至前置結(jié)點(diǎn)中 EG 是否在任何情況下,都可把循環(huán)不變運(yùn)算是否在任何情況下,都可把循環(huán)不變運(yùn)算外提呢外提呢? 2021/8/14512021/8/1452 B2,B3,B4是循環(huán),

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論