什么是代碼優(yōu)化優(yōu)化技術(shù)簡(jiǎn)介課件_第1頁(yè)
什么是代碼優(yōu)化優(yōu)化技術(shù)簡(jiǎn)介課件_第2頁(yè)
什么是代碼優(yōu)化優(yōu)化技術(shù)簡(jiǎn)介課件_第3頁(yè)
什么是代碼優(yōu)化優(yōu)化技術(shù)簡(jiǎn)介課件_第4頁(yè)
什么是代碼優(yōu)化優(yōu)化技術(shù)簡(jiǎn)介課件_第5頁(yè)
已閱讀5頁(yè),還剩82頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

什么是代碼優(yōu)化優(yōu)化技術(shù)簡(jiǎn)介第十章代碼優(yōu)化某些編譯程序在中間代碼或目標(biāo)代碼生成之后要對(duì)生成的代碼進(jìn)行優(yōu)化。所謂優(yōu)化,實(shí)質(zhì)上是對(duì)代碼進(jìn)行等價(jià)變換,使得變換后的代碼運(yùn)行結(jié)果與變換前代碼運(yùn)行結(jié)果相同,而運(yùn)行速度加大或占用存儲(chǔ)空間少,或兩者都有。優(yōu)化可在編譯的不同階段進(jìn)行,對(duì)同一階段,涉及的程序范圍也不同,在同一范圍內(nèi),可進(jìn)行多種優(yōu)化

優(yōu)化分類:按階段分與機(jī)器無關(guān)的優(yōu)化對(duì)中間代碼進(jìn)行

依賴于機(jī)器的優(yōu)化對(duì)目標(biāo)代碼進(jìn)行根據(jù)優(yōu)化所涉及的程序范圍分成:(1)局部?jī)?yōu)化:(基本塊)(2)循環(huán)優(yōu)化:對(duì)循環(huán)中的代碼進(jìn)行優(yōu)化(3)全局優(yōu)化:大范圍的優(yōu)化優(yōu)化工作數(shù)據(jù)流分析

控制流分析

優(yōu)化技術(shù)簡(jiǎn)介1.刪除多余運(yùn)算2.循環(huán)不變代碼外提3.強(qiáng)度削弱4.變換循環(huán)控制條件5.合并已知量與復(fù)寫傳播6.刪除無用賦值例:P:=0forI:=1to20doP:=P+A[I]*B[I](1)P:=0(2)I:=1(3)T1:=4*I(4)T2:=addr(A)-4(5)T3:=T2[T1](6)T4:=4*I(7)T5:=addr(B)-4(8)T6:=T5[T4](9)T7:=T3*T6(10)P:=P+T7(11)I:=I+1(12)ifI<=20goto(3)1.刪除多余運(yùn)算2.循環(huán)不變代碼外提(1)P:=0(2)I:=1(3)T1:=4*I(4)T2:=addr(A)-4(5)T3:=T2[T1](6)T4:=4*I(7)T5:=addr(B)-4(8)T6:=T5[T4](9)T7:=T3*T6(10)P:=P+T7(11)I:=I+1(12)ifI<=20goto(3)(1)P:=0(2)I:=1(3)T1:=4*I(5)T3:=T2[T1](8)T6:=T5[T4](9)T7:=T3*T6(10)P:=P+T7(11)I:=I+1(12)ifI<=20goto(3)(4)T2:=addr(A)-4(7)T5:=addr(B)-4(6)T4:=T13.強(qiáng)度削弱(1)P:=0(2)I:=1(4)T2:=addr(A)-4(7)T5:=addr(B)-4(3)T1:=4*I(5)T3:=T2[T1](6)T4:=T1(8)T6:=T5[T4](9)T7:=T3*T6(10)P:=P+T7(11)I:=I+1(12)ifI<=20goto(3)(1)P:=0(2)I:=1(4)T2:=addr(A)-4(7)T5:=addr(B)-4(5)T3:=T2[T1](6)T4:=T1(8)T6:=T5[T4](9)T7:=T3*T6(10)P:=P+T7(11)I:=I+1(12)ifI<=20goto(5)(3)T1:=4*I(3‘)T1:=T1+44.變換循環(huán)控制條件5.合并已知量與復(fù)寫傳播(1)P:=0(2)I:=1(4)T2:=addr(A)-4(7)T5:=addr(B)-4(3)T1:=4*I(5)T3:=T2[T1](6)T4:=T1(8)T6:=T5[T4](9)T7:=T3*T6(10)P:=P+T7(11)I:=I+1(3’)T1:=T1+4(12)if

I<=20goto(5)(1)P:=0(2)I:=1(4)T2:=addr(A)-4(7)T5:=addr(B)-4(5)T3:=T2[T1](6)T4:=T1(8)T6:=T5[T1](9)T7:=T3*T6(10)P:=P+T7(11)I:=I+1(3’)T1:=T1+4(12)ifT1<=80goto(5)(3)T1:=46.刪除無用賦值(1)P:=0(2)I:=1(4)T2:=addr(A)-4(7)T5:=addr(B)-4(3)T1:=4(5)T3:=T2[T1](6)T4:=T1(8)T6:=T5[T1](9)T7:=T3*T6(10)P:=P+T7(11)I:=I+1(3’)T1:=T1+4(12)ifT1<=80goto(5)(1)P:=0(4)T2:=addr(A)-4(7)T5:=addr(B)-4(3)T1:=4(5)T3:=T2[T1](8)T6:=T5[T1](9)T7:=T3*T6(10)P:=P+T7(3’)T1:=T1+4(12)ifT1<=80goto(5)局部?jī)?yōu)化:基本塊內(nèi)的優(yōu)化基本塊:是指程序中一順序執(zhí)行的語(yǔ)句序列,其中只有一個(gè)入口語(yǔ)句和一個(gè)出口語(yǔ)句。入口語(yǔ)句:1、程序的第一個(gè)語(yǔ)句;或者,2、條件轉(zhuǎn)移語(yǔ)句或無條件轉(zhuǎn)移語(yǔ)句的轉(zhuǎn)移目標(biāo)語(yǔ)句;或者3、緊跟在條件轉(zhuǎn)移語(yǔ)句后面的語(yǔ)句。

劃分基本塊的算法:1、求出四元式程序之中各個(gè)基本塊的入口語(yǔ)句。2、對(duì)每一入口語(yǔ)句,構(gòu)造其所屬的基本塊。它是由該語(yǔ)句到下一入口語(yǔ)句(不包括下一入口語(yǔ)句),或到一轉(zhuǎn)移語(yǔ)句(包括該轉(zhuǎn)移語(yǔ)句),或到一停語(yǔ)句(包括該停語(yǔ)句)之間的語(yǔ)句序列組成的。3、凡未被納入某一基本塊的語(yǔ)句,都是程序中控制流程無法到達(dá)的語(yǔ)句,因而也是不會(huì)被執(zhí)行到的語(yǔ)句,我們可以把它們刪除。

(1)P:=0(2)I:=1

B1(3)T1:=4*I(4)T2:=addr(A)-4(5)T3:=T2[T1](6)T4:=4*I(7)T5:=addr(B)-4(8)T6:=T5[T4]B2(9)T7:=T3*T6

(10)P:=P+T7(11)I:=I+1(12)ifI<=20goto(3)

(1)read(C)(2)A:=0(3)B:=1(4)L1:A:=A+B(5)ifB>=CgotoL2(6)B:=B+1(7)gotoL1(8)L2:write(A)(9)halt

基本塊的DAG表示

DAGDirectedAcyclicGraph

無環(huán)路有向圖n1n2n3n4n1n2n3n5n4n6n7n8n9在一個(gè)有向圖中,我們稱任一有向邊ni→nj(或表示為有序?qū)Γ╪i,nj))中的結(jié)點(diǎn)ni為結(jié)點(diǎn)nj的前驅(qū)(父結(jié)),結(jié)點(diǎn)nj為結(jié)點(diǎn)ni的后繼(子結(jié))。又稱任一有向邊序列n1→n2,n2→n3,…,nk—1→nk為從結(jié)點(diǎn)n1到結(jié)點(diǎn)nk的一條通路。如果其中n1=nk,則稱通路為環(huán)路。該結(jié)點(diǎn)序列也記為(n1,n2,…,nk)。n1n2n3n4n1n2n3n5n4n6n7n8n9圖中有向圖的通路(n2,n2)和(n3,n4,n3)就是環(huán)路。如果有向圖中任一通路都不是環(huán)路,則稱該有向圖為無環(huán)路有向圖,簡(jiǎn)稱DAG。

有向圖就是一個(gè)DAG。在DAG中,如果(n1,n2,…,nk)是其中一條通路,則稱結(jié)點(diǎn)n1為結(jié)點(diǎn)nk的祖先,結(jié)點(diǎn)nk為結(jié)點(diǎn)n1的后代。我們這一節(jié)中要用到的有向圖,是一種其結(jié)點(diǎn)帶有標(biāo)記或附加信息的DAG:

1、圖的葉結(jié)點(diǎn),即無后繼的結(jié)點(diǎn),以一標(biāo)識(shí)符(變量名)或常數(shù)作為標(biāo)記,表示該結(jié)點(diǎn)代表該變量或常數(shù)的值。如果葉結(jié)點(diǎn)用來代表某變量A的地址,則用addr(A)作為該結(jié)點(diǎn)的標(biāo)記。通常把葉結(jié)點(diǎn)上作為標(biāo)記的標(biāo)識(shí)符加上下標(biāo)0,以表示它是該變量的初值。2、圖的內(nèi)部結(jié)點(diǎn),即有后繼的結(jié)點(diǎn)以一運(yùn)算符作為標(biāo)記,表示該結(jié)點(diǎn)代表應(yīng)用該運(yùn)算符對(duì)其后繼結(jié)點(diǎn)所代表的值進(jìn)行運(yùn)算的結(jié)果。3、圖中各個(gè)結(jié)點(diǎn)上可能附加一個(gè)或多個(gè)標(biāo)識(shí)符,表示這些變量具有該結(jié)點(diǎn)所代表的值。

上述這種DAG可用來描述計(jì)算過程,又稱描述計(jì)算過程的DAG。在以下的討論中,我們簡(jiǎn)稱DAG。一個(gè)基本塊,可用一個(gè)DAG來表示。下面列出各種四元式及相對(duì)應(yīng)的DAG的結(jié)點(diǎn)形式。1、圖中ni為結(jié)點(diǎn)編號(hào)2、結(jié)點(diǎn)下面的符號(hào)(運(yùn)算符、標(biāo)識(shí)符或常數(shù))是各結(jié)點(diǎn)的標(biāo)記3、各結(jié)點(diǎn)右邊的標(biāo)識(shí)符是結(jié)點(diǎn)的附加標(biāo)識(shí)符。

基本塊的DAG表示與構(gòu)造DAG結(jié)點(diǎn)n1

A

B

n2A

op

n1

B四元式0型:A:=B(:=,B,-,A)1型:A:=opB(op,B,—,A)2型:A:=BopC(op,B,C,A)

n3Aop

n1n2B

Cn1n2n1n3n1n2用DAG進(jìn)行基本塊的優(yōu)化僅含0,1,2型四元式的基本塊的DAG構(gòu)造算法:首先,DAG為空。對(duì)基本塊的每一四元式,依次執(zhí)行:DAG構(gòu)造算法1、如果NODE(B)無定義,則構(gòu)造一標(biāo)記為B的葉結(jié)點(diǎn)并定義NODE(B)為這個(gè)結(jié)點(diǎn);如果當(dāng)前四元式是0型,則記NODE(B)的值為n,轉(zhuǎn)4。如果當(dāng)前四元式是1型,則轉(zhuǎn)2.(1)。如果當(dāng)前四元式是2型,則:(Ⅰ)如果NODE(1)無定義,則構(gòu)造一標(biāo)記為C的葉結(jié)點(diǎn)并定義NODE(C)為這個(gè)結(jié)點(diǎn);(Ⅱ)轉(zhuǎn)2.(2)。2、(1)如果NODE(B)是標(biāo)記為常數(shù)的葉結(jié)點(diǎn),則轉(zhuǎn)2(3),否則轉(zhuǎn)3.(1)。(2)如果NODE(B)和NODE(C)都是標(biāo)記為常數(shù)的葉結(jié)點(diǎn),則轉(zhuǎn)2.(4),否則轉(zhuǎn)3.(2)。(3)執(zhí)行opB(即合并已知量),令得到的新常數(shù)為P。如果NODE(B)是處理當(dāng)前四元式時(shí)新構(gòu)造出來的結(jié)點(diǎn),則刪除它。如果NODE(P)無定義,則構(gòu)造一用P做標(biāo)記的葉結(jié)點(diǎn)n。置NODE(P)=n,轉(zhuǎn)4.。(4)執(zhí)行BopC(即合并已知量),令得到的新常數(shù)為P。如果NODE(B)或NODE(C)是處理當(dāng)前四元式時(shí)新構(gòu)造出來的結(jié)點(diǎn),則刪除它。如果NODE(P)無定義,則構(gòu)造一用P做標(biāo)記的葉結(jié)點(diǎn)n。置NODE(P)=n,轉(zhuǎn)4。3、(1)檢查DAG中是否已有一結(jié)點(diǎn),其唯一后繼為NODE(B),且標(biāo)記為op(即找公共子表達(dá)式)。如果沒有,則構(gòu)造該結(jié)點(diǎn)n,否則就把已有的結(jié)點(diǎn)作為它的結(jié)點(diǎn)并設(shè)該結(jié)點(diǎn)為n,轉(zhuǎn)4.(2)檢查中DAG中是否已有一結(jié)點(diǎn),其左后繼為NODE(B),其右后繼為NODE(C),且標(biāo)記為

op(即找公共子表達(dá)式)。如果沒有,則構(gòu)造該結(jié)點(diǎn)n,否則就把已有的結(jié)點(diǎn)作為它的結(jié)點(diǎn)并設(shè)該結(jié)點(diǎn)為n,轉(zhuǎn)4.。

4、

如果NODE(A)無定義,則把A附加在結(jié)點(diǎn)n上并令NODE(A)=n;否則先把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。轉(zhuǎn)處理下一四元式。

而后,我們可由DAG重新生成原基本塊的一優(yōu)化的代碼序列。

構(gòu)造以下基本塊G的DAG。T0:=3.14T0:=3.14T1:=2*T0T0:=3.14T1:=2*T0T2:=R+rT0:=3.14T1:=2*T0T2:=R+rA:=T1*T2T0:=3.14T1:=2*T0T2:=R+rA:=T1*T2B:=AT0:=3.14T1:=2*T0T2:=R+rA:=T1*T2B:=AT3:=2*T0T0:=3.14T1:=2*T0T2:=R+rA:=T1*T2B:=AT3:=2*T0T4:=R+rT0:=3.14T1:=2*T0T2:=R+rA:=T1*T2B:=AT3:=2*T0T4:=R+rT5:=T3*T4T0:=3.14T1:=2*T0T2:=R+rA:=T1*T2B:=AT3:=2*T0T4:=R+rT5:=T3*T4T6:=R-rT0:=3.14T1:=2*T0T2:=R+rA:=T1*T2B:=AT3:=2*T0T4:=R+rT5:=T3*T4T6:=R-rB:=T5*T6DAG的應(yīng)用我們將四元式表示成DAG后,可以利用DAG進(jìn)行優(yōu)化首先由DAG構(gòu)造優(yōu)化的四元式序列在構(gòu)造相應(yīng)的DAG的過程中已經(jīng)進(jìn)行了一些基本的優(yōu)化工作而后,可由DAG重新生成原基本塊的一個(gè)優(yōu)化的代碼序列⑴T0:=3.14⑵T1:=6.28⑶T3:=6.28⑷T2:=R+r⑸T4:=T2⑹A:=6.28*T2⑺T5:=A⑻T6:=R-r⑼B:=A*T6T0:=3.14T1:=6.28T3:=6.28T2:=R+rT4:=T2A:=6.28*T2T5:=AT6:=R-rB:=A*T6T0:=3.14T1:=2*T0T2:=R+rA:=T1*T2B:=AT3:=2*T0T4:=R+rT5:=T3*T4T6:=R-rB:=T5*T6優(yōu)化后:例:賦值語(yǔ)句

T4:=A+B-(E-(C+D))四元式序列GT1:=A+BT2:=C+DT3:=E-T2T4:=T1-T3DAG:

ABE

CDn9n3n8n1n2n7n6n4n5T4T1T3T2+--+

控制流分析和循環(huán)優(yōu)化:控制流程圖(流圖):具有唯一首結(jié)點(diǎn)的有向圖G=(N,E,n0)N:結(jié)點(diǎn)集基本塊集

E:有向邊集n0:首結(jié)點(diǎn)包含程序第一個(gè)語(yǔ)句的基本塊分析程序流圖中結(jié)點(diǎn)間的關(guān)系mDOMn定義(必經(jīng)結(jié)點(diǎn))在程序流圖中,對(duì)任意兩個(gè)結(jié)點(diǎn)m和n,如果從流圖的首結(jié)點(diǎn)出發(fā),到達(dá)n的任意通路都要經(jīng)過m,則稱m是n的必經(jīng)結(jié)點(diǎn),記為mDOMn必經(jīng)結(jié)點(diǎn)集定義結(jié)點(diǎn)n的所有必經(jīng)結(jié)點(diǎn)的集合,稱為結(jié)點(diǎn)n的必經(jīng)結(jié)點(diǎn)集,記為D(n).例:

2

6

1

5

7

3

4必經(jīng)結(jié)點(diǎn)和必經(jīng)結(jié)點(diǎn)集D(1)={1}D(2)={1,2}D(3)={1,2,3}D(4)={1,2,4}D(5)={1,2,4,5}D(6)={1,2,4,6}D(7)={1,2,4,7}11.3控制流分析和循環(huán)控制流程圖(流圖):具有唯一首結(jié)點(diǎn)的有向圖G=(N,E,n0)N:結(jié)點(diǎn)集

基本塊集

E:有向邊集

n0:首結(jié)點(diǎn)

包含程序第一個(gè)

語(yǔ)句的基本塊分析程序流圖中結(jié)點(diǎn)間的關(guān)系mDOMn定義在程序流圖中,對(duì)任意兩個(gè)結(jié)點(diǎn)m和n,如果從流圖的首結(jié)點(diǎn)出發(fā),到達(dá)n的任意通路都要經(jīng)過m,則稱m是n的必經(jīng)結(jié)點(diǎn),記為mDOMn(a,aMODa)必經(jīng)結(jié)點(diǎn)集定義結(jié)點(diǎn)n的所有必經(jīng)結(jié)點(diǎn)的集合,稱為結(jié)點(diǎn)n的必經(jīng)結(jié)點(diǎn)集,記為D(n).例:

6

73

4

1

2

3

5

7

6

1

2

1

2

1

2

1必經(jīng)結(jié)點(diǎn)

必經(jīng)結(jié)點(diǎn)集D(1)={1}D(2)={1,2}D(3)={1,2,3}D(4)={1,2,4}D(5)={1,2,4,5}D(6)={1,2,4,6}D(7)={1,2,4,7}3循環(huán)的查找循環(huán)的查找算法回邊:假設(shè)a→b是流圖中的一條有向邊,如果bDOMa,則稱a→b是流圖中的一條回邊。有向邊n→d是回邊,組成的循環(huán)是由結(jié)點(diǎn)d,結(jié)點(diǎn)n以及有通路到達(dá)n而該通路不經(jīng)過d的所有結(jié)點(diǎn)組成,并且d是該循環(huán)的唯一入口結(jié)點(diǎn)?;剡?6循環(huán){6}74{4,5,6,7}42{2,3,4,5,6,7}循環(huán)(結(jié)點(diǎn)序列的性質(zhì))1.強(qiáng)連通的(任意兩結(jié)點(diǎn)間,必有一條通路,且該通路上各結(jié)點(diǎn)都屬于該結(jié)點(diǎn)序列)2.它們中間有且只有一個(gè)是入口結(jié)點(diǎn).例:

6

73

4

1

2

3

5

7

6

1

2

1

2

1

2

3

1數(shù)據(jù)流分析1.活躍變量數(shù)據(jù)流方程2.到達(dá)--定值數(shù)據(jù)流方程3.討論數(shù)據(jù)流問題分類路徑數(shù)據(jù)流方程解不唯一活躍變量的數(shù)據(jù)流分析所謂活躍變量就是它的當(dāng)前值還將被引用(在賦予一個(gè)新值之前)。在全局范圍來分析的話,一個(gè)變量是活躍的,如果存在一條路徑使得該變量被重新定值之前它的當(dāng)前值還要被引用。通過全局活躍變量分析,識(shí)別出其當(dāng)前值不再活躍(即,它的值已經(jīng)死了)的那些變量。死變量的值在基本塊的出口處不需要保存。令B為一個(gè)基本塊,定義LiveIn(B)為在基本塊B入口處為活躍的變量的集合。定義LiveOut(B)為基本塊B的出口處的活躍變量的集合。LiveIn和LiveOut并不是相互獨(dú)立的,令S(B)為流圖中基本塊B的后繼的集合,則有LiveOut(B)=∪LiveIn(i)i∈s(B)

如果基本塊沒有后繼,則其LiveOut為空令LiveUse(B)為B中被定值之前要引用變量的集合。這個(gè)集合由基本塊B中的語(yǔ)句唯一確定。容易看出,如果v∈LiveUse(B),則v∈LiveIn(B);即LiveIn(B)

LiveUse(B)。令Def(B)為在B中定值的變量集合。如果一個(gè)變量在基本塊B的出口處為活躍的且vDef(B),則它在B的入口處也是活躍的,即:LiveIn(B)

LiveOut(B)-Def(B)因此有:LiveIn(B)=LiveUse(B)∪(LiveOut(B)-Def(B))即:一個(gè)變量在基本塊入口處為活躍的,則一定有:或者它在基本塊的LiveUse集中,或者它在基本塊的出口處為活躍的且在基本塊中沒有重新定值

a:=1;ifa=bthenb:=1elsec:=1endif;d:=a+ba:=1ifa=bgotoB2b:=1c:=1d:=a+bB1B2B3B4提取Def和LiveUse集合基本塊DefLiveUseB1{a}B2?B3{c}?B41166666{a,b}a:=1ifa=bgotoB2b:=1c:=1d:=a+bB1B2B3B4從最后一個(gè)基本塊開始由后往前計(jì)算,可以得到一定的解

LiveIn(B)=LiveUse(B)∪(LiveOut(B)-Def(B))

LiveOut(B)=∪LiveIn(i)i∈s(B)LiveOut(B4)=?,因此:LiveIn(B4)=LiveUse(B4)={a,b}-1611166現(xiàn)在LiveOut(B2)=LiveIn(B4)={a,b}-6611161LiveOut(B3)=LiveIn(B4)={a,b}-1616116LiveIn(B2)=LiveOut(B2)-Def(B2)={a,b}--6666616={a}-1666666LiveIn(B3)=LiveOut(B3)-Def(B3)={a,b}–{c}-6666611={a,b}–{c}-6111666LiveOut(B1)=LiveIn(B2)∪LiveIn(B3)={a}∪{a,b}-6116661={a,b}-1661616–{c}最后LiveIn(B1)=LiveUse(B1)∪(LiveOut(B1)-Def(B1))=∪({a,b}–{c}-6611166–{a})=-1616161–{c}

a:=1ifa=bgotoB2b:=1c:=1d:=a+bB1B2B3B4分析程序中所有變量的定值和引用之間的關(guān)系到達(dá)--定值數(shù)據(jù)流方程OUT[B]=(IN[B]-KILL[B])GEN[B]IN[B]=OUT[p]pP[B]P[B]:B的所有前驅(qū)基本塊GEN[B]:B中定值并到達(dá)B出口之后的所有定值點(diǎn)集.KILL[B]:B之外的那些定值點(diǎn)集,其定值的變量在B中又重新定值.IN[B]:到B入口之前(緊)的各變量的所有定值點(diǎn)集OUT[B]:到達(dá)B出口之后(緊)各變量的所有定值點(diǎn)集.GEN位向量KILLB1{d1,d2}11000000011100B2{d3}00100001000000B3{d4}00010000100100B4{d5}00001000101000B5{}00000000000000IN[B]OUT[B]B101111001100000B211111000111100B301111000011000B400110000010100B500111000011100

入口結(jié)點(diǎn)

??

循環(huán)L??

前置結(jié)點(diǎn)入口結(jié)點(diǎn)

???

循環(huán)L?12345

B1

B2

B3

B4

B5(1)I:=1I:=3;(2)ifx<ygoto(3)(3)I:=2(4)x:=x+1(5)y:=y-1(6)ify<=20

gotoB2(7)J:=I

B1

B2

B3

B4

B5(1)I:=1(2)ifx<ygoto(3)(3)I:=2(4)x:=x+1(5)k:=I;y:=y-1(6)ify<=20

gotoB2(7)J:=I當(dāng)把循環(huán)中的不變運(yùn)算s:A:=BopC外提時(shí)注意:(2)

要求循環(huán)中其它地方不再有A的定值點(diǎn)。(3)

要求循環(huán)中A的所有引用點(diǎn)都是而且僅僅是這個(gè)定值所能達(dá)到的(1)要求s所在結(jié)點(diǎn)是循環(huán)的所有出口結(jié)點(diǎn)的必經(jīng)結(jié)點(diǎn)(4)要求A在離開循環(huán)之后不再是活躍的數(shù)據(jù)流問題的討論合流問題向

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論