compiler design - eth zpeople.inf.ethz.ch/zmajo/teaching/cd_ss17/slides/w12-02-reaching... ·...
TRANSCRIPT
![Page 1: Compiler Design - ETH Zpeople.inf.ethz.ch/zmajo/teaching/cd_ss17/slides/w12-02-reaching... · Compiler Design Spring 2017 8.5 Reaching definitions Dr. ZoltánMajó Compiler Group](https://reader031.vdocument.in/reader031/viewer/2022022518/5b0b6a8f7f8b9aba628de368/html5/thumbnails/1.jpg)
CompilerDesignSpring2017
8.5Reachingdefinitions
Dr.Zoltán Majó
CompilerGroup– JavaHotSpot VirtualMachineOracleCorporation
![Page 2: Compiler Design - ETH Zpeople.inf.ethz.ch/zmajo/teaching/cd_ss17/slides/w12-02-reaching... · Compiler Design Spring 2017 8.5 Reaching definitions Dr. ZoltánMajó Compiler Group](https://reader031.vdocument.in/reader031/viewer/2022022518/5b0b6a8f7f8b9aba628de368/html5/thumbnails/2.jpg)
Adminissues
§ Briefreminder:Codereviewtakesplacetoday§ @15:15§ You’vereceivedroominformationbyemail
33
![Page 3: Compiler Design - ETH Zpeople.inf.ethz.ch/zmajo/teaching/cd_ss17/slides/w12-02-reaching... · Compiler Design Spring 2017 8.5 Reaching definitions Dr. ZoltánMajó Compiler Group](https://reader031.vdocument.in/reader031/viewer/2022022518/5b0b6a8f7f8b9aba628de368/html5/thumbnails/3.jpg)
Lastlecture:Definition(ofreachingdefinitions)
§ Adefinitiondreaches apointPifthereisapathfromdtoPsuchthatdisnotkilledalongthatpath.
§ Remember:Therearearbitrarilymanypaths§ Notfeasibletoreason/processallofthem
§ Reasonaboutclaims atprogrampointsinstead§ Exampleclaim:D=={d1,d2,d5}@Pbefore_S
§ DisthesetofdefinitionsthatreachesPbefore_S
§ Howdowedefineaappropriatetransferfunction?
34
![Page 4: Compiler Design - ETH Zpeople.inf.ethz.ch/zmajo/teaching/cd_ss17/slides/w12-02-reaching... · Compiler Design Spring 2017 8.5 Reaching definitions Dr. ZoltánMajó Compiler Group](https://reader031.vdocument.in/reader031/viewer/2022022518/5b0b6a8f7f8b9aba628de368/html5/thumbnails/4.jpg)
Transferfunction
§ d1 reachestheendofthebasicblockifthereisnostatementfollowingd1 thatmightkilld1
§ DefineforbasicblockB§ killB = {d|diskilledinB}§ genB ={d|dappearsinBandnosubsequentstatementinBkillsd}
35
…d1: var =…
![Page 5: Compiler Design - ETH Zpeople.inf.ethz.ch/zmajo/teaching/cd_ss17/slides/w12-02-reaching... · Compiler Design Spring 2017 8.5 Reaching definitions Dr. ZoltánMajó Compiler Group](https://reader031.vdocument.in/reader031/viewer/2022022518/5b0b6a8f7f8b9aba628de368/html5/thumbnails/5.jpg)
40
d1: a = b + 1d2: a = …
if (Tcond)
d5: a = …d6: c = …
d3: a = … d4: b = …
P
gen={d2}kill={d1,d2,d3,d5}
gen={d3}kill={d1,d2,d5}
gen={d5,d6}kill={d1,d2,d3}
gen={d4}kill=∅
a:{d1,d2,d3,d5}b:{d4}c:{d6}
![Page 6: Compiler Design - ETH Zpeople.inf.ethz.ch/zmajo/teaching/cd_ss17/slides/w12-02-reaching... · Compiler Design Spring 2017 8.5 Reaching definitions Dr. ZoltánMajó Compiler Group](https://reader031.vdocument.in/reader031/viewer/2022022518/5b0b6a8f7f8b9aba628de368/html5/thumbnails/6.jpg)
Runningexample
43
d1: i = m – 1d2: j = n d3: a = …
d7: i = …
d4: i = i + 1d5: j = j - 1
d6: a = …
ENTRY
EXIT
gen={d1,d2,d3}kill={d4,d5,d6,d7}
FromAho etal“Compilers”,p 604
gen={d4,d5}kill={d1,d2,d7}
gen={d6}kill={d3}
gen={d7}kill={d1,d4}
i:{d1,d4,d7}j:{d2,d5}a:{d3,d6}
![Page 7: Compiler Design - ETH Zpeople.inf.ethz.ch/zmajo/teaching/cd_ss17/slides/w12-02-reaching... · Compiler Design Spring 2017 8.5 Reaching definitions Dr. ZoltánMajó Compiler Group](https://reader031.vdocument.in/reader031/viewer/2022022518/5b0b6a8f7f8b9aba628de368/html5/thumbnails/7.jpg)
Transferfunction
§ Sofar:Effectofabasicblockinisolation§ killB = {d|diskilledinB}§ genB ={d|dappearsinBandnosubsequentstatementinBkillsd}
§ (Localanalysis)
§ HowdoweextendtransferfunctionstodefinitionsthatreachPbefore_B andPafter_B
44
…d1: var =…
![Page 8: Compiler Design - ETH Zpeople.inf.ethz.ch/zmajo/teaching/cd_ss17/slides/w12-02-reaching... · Compiler Design Spring 2017 8.5 Reaching definitions Dr. ZoltánMajó Compiler Group](https://reader031.vdocument.in/reader031/viewer/2022022518/5b0b6a8f7f8b9aba628de368/html5/thumbnails/8.jpg)
Transferfunction
§ ForabasicblockBwedefine§ IN(B) ={d|dreachesPbefore_B }§ OUT(B) ={d|dreachesPafter_B }
§ d∈OUT(B)§ disinBandreachestheendofB,i.e.d∈ genB§ d∈ IN(B)anddnotkilledbystatementsinB,i.e.d∉ killB
§ OUT(B)=genB∪ (IN(B)– killB)
45
…d”: var =…
IN(B)={d1,d2,…,dn}
OUT(B)={d’1,d’2,…,d’m}
![Page 9: Compiler Design - ETH Zpeople.inf.ethz.ch/zmajo/teaching/cd_ss17/slides/w12-02-reaching... · Compiler Design Spring 2017 8.5 Reaching definitions Dr. ZoltánMajó Compiler Group](https://reader031.vdocument.in/reader031/viewer/2022022518/5b0b6a8f7f8b9aba628de368/html5/thumbnails/9.jpg)
Transferfunction
§ GivenOUT(B1).
§ WhatshouldbeIN(B2)andIN(B3)?
§ IN(B2)=OUT(B1),IN(B3)=OUT(B1)
46
...
… …
B1
B2 B3
![Page 10: Compiler Design - ETH Zpeople.inf.ethz.ch/zmajo/teaching/cd_ss17/slides/w12-02-reaching... · Compiler Design Spring 2017 8.5 Reaching definitions Dr. ZoltánMajó Compiler Group](https://reader031.vdocument.in/reader031/viewer/2022022518/5b0b6a8f7f8b9aba628de368/html5/thumbnails/10.jpg)
47
![Page 11: Compiler Design - ETH Zpeople.inf.ethz.ch/zmajo/teaching/cd_ss17/slides/w12-02-reaching... · Compiler Design Spring 2017 8.5 Reaching definitions Dr. ZoltánMajó Compiler Group](https://reader031.vdocument.in/reader031/viewer/2022022518/5b0b6a8f7f8b9aba628de368/html5/thumbnails/11.jpg)
Transferfunction
§ GivenOUT(B2) andOUT(B3)
§ WhatshouldbeIN(B1)?§ Adefinitiondreaches apointPifthereisapathfromdtoPsuchthat
disnotkilledalongthatpath.§ Mustconsiderall pathsleadingtoP
48
...
… …
B1
B2 B3
![Page 12: Compiler Design - ETH Zpeople.inf.ethz.ch/zmajo/teaching/cd_ss17/slides/w12-02-reaching... · Compiler Design Spring 2017 8.5 Reaching definitions Dr. ZoltánMajó Compiler Group](https://reader031.vdocument.in/reader031/viewer/2022022518/5b0b6a8f7f8b9aba628de368/html5/thumbnails/12.jpg)
49
![Page 13: Compiler Design - ETH Zpeople.inf.ethz.ch/zmajo/teaching/cd_ss17/slides/w12-02-reaching... · Compiler Design Spring 2017 8.5 Reaching definitions Dr. ZoltánMajó Compiler Group](https://reader031.vdocument.in/reader031/viewer/2022022518/5b0b6a8f7f8b9aba628de368/html5/thumbnails/13.jpg)
Transferfunction
§ GivenOUT(Bi)
§ IN(B)=∪ Bi,Bi ispredecessorofBinCFG OUT(Bi)
50
...
… …
B1
B2 B3
![Page 14: Compiler Design - ETH Zpeople.inf.ethz.ch/zmajo/teaching/cd_ss17/slides/w12-02-reaching... · Compiler Design Spring 2017 8.5 Reaching definitions Dr. ZoltánMajó Compiler Group](https://reader031.vdocument.in/reader031/viewer/2022022518/5b0b6a8f7f8b9aba628de368/html5/thumbnails/14.jpg)
Wehavetheingredients(again)
§ Controlflow(basicblocks,CGF),points,paths§ Sameasforconstantpropagationinpreviouslecture
§ Transferfunction§ Specificforreachingdefinitions
§ Howdoestheanalysiswork?
51
![Page 15: Compiler Design - ETH Zpeople.inf.ethz.ch/zmajo/teaching/cd_ss17/slides/w12-02-reaching... · Compiler Design Spring 2017 8.5 Reaching definitions Dr. ZoltánMajó Compiler Group](https://reader031.vdocument.in/reader031/viewer/2022022518/5b0b6a8f7f8b9aba628de368/html5/thumbnails/15.jpg)
Simplificationsinexamples
§ Donotshowpointsbefore/afterbasicblock
§ Omitconditionaltest§ Evaluationofcondition§ Ifstatement
§ Capturecontroltransfersthroughedges§ Noexplicit“jump”or“branch”statements
52
![Page 16: Compiler Design - ETH Zpeople.inf.ethz.ch/zmajo/teaching/cd_ss17/slides/w12-02-reaching... · Compiler Design Spring 2017 8.5 Reaching definitions Dr. ZoltánMajó Compiler Group](https://reader031.vdocument.in/reader031/viewer/2022022518/5b0b6a8f7f8b9aba628de368/html5/thumbnails/16.jpg)
53
d1: i = m – 1d2: j = n d3: a = …
d7: i = …
d4: i = i + 1d5: j = j - 1
d6: a = …
ENTRY
EXIT
gen={d1,d2,d3}kill={d4,d5,d6,d7}
FromAho etal“Compilers”,p 604
gen={d4,d5}kill={d1,d2,d7}
gen={d6}kill={d3}
gen={d7}kill={d1,d4}
i:{d1,d4,d7}j:{d2,d5}a:{d3,d6}
IN(B1)=?
OUT(B1)=?
IN(B2)=?
IN(B3)=?
IN(B4)=?
OUT(B2)=?
OUT(B3)=?
OUT(B4)=?
![Page 17: Compiler Design - ETH Zpeople.inf.ethz.ch/zmajo/teaching/cd_ss17/slides/w12-02-reaching... · Compiler Design Spring 2017 8.5 Reaching definitions Dr. ZoltánMajó Compiler Group](https://reader031.vdocument.in/reader031/viewer/2022022518/5b0b6a8f7f8b9aba628de368/html5/thumbnails/17.jpg)
FindingIN(B)andOUT(B)
§ genandkillcapturewhathappensinsideabasicblock§ Or…theeffectofeachstatement
§ WeneedINandOUTforeachbasicblock§ IN(B)=∪ Bi,BiispredecessorofBinCFG OUT(Bi)§ OUT(B)=genB∪ (IN(B)– killB)
§ Nbasicblocks,2×NsetsIN/OUT
54
![Page 18: Compiler Design - ETH Zpeople.inf.ethz.ch/zmajo/teaching/cd_ss17/slides/w12-02-reaching... · Compiler Design Spring 2017 8.5 Reaching definitions Dr. ZoltánMajó Compiler Group](https://reader031.vdocument.in/reader031/viewer/2022022518/5b0b6a8f7f8b9aba628de368/html5/thumbnails/18.jpg)
FindingIN(B)andOUT(B)(cont’d)
§ Systemwith2×Nunknowns§ Solvebyiteratinguntilafixedpointisfound
§ Howtostartiteration?§ SafeassumptionOUT[ENTRY]=∅
55
![Page 19: Compiler Design - ETH Zpeople.inf.ethz.ch/zmajo/teaching/cd_ss17/slides/w12-02-reaching... · Compiler Design Spring 2017 8.5 Reaching definitions Dr. ZoltánMajó Compiler Group](https://reader031.vdocument.in/reader031/viewer/2022022518/5b0b6a8f7f8b9aba628de368/html5/thumbnails/19.jpg)
Findingreachingdefinitions
OUT[ENTRY]=∅
InitializeOUT[B]=∅ for∀ B≠ENTRY
while(changestoanyOUT(B)){for(eachbasicblockB≠ENTRY){
IN(B)=∪ Bi,Bi ispredecessorofBinCFG OUT(Bi)OUT(B)=genB∪ (IN(B)– killB)
}}
56
![Page 20: Compiler Design - ETH Zpeople.inf.ethz.ch/zmajo/teaching/cd_ss17/slides/w12-02-reaching... · Compiler Design Spring 2017 8.5 Reaching definitions Dr. ZoltánMajó Compiler Group](https://reader031.vdocument.in/reader031/viewer/2022022518/5b0b6a8f7f8b9aba628de368/html5/thumbnails/20.jpg)
Findingreachingdefinitions
OUT[ENTRY]=∅
InitializeOUT[B]=∅ for∀ B≠ENTRY
while(changestoanyOUT(B)){for(eachbasicblockB≠ENTRY){
IN(B)=∪ Bi,Bi ispredecessorofBinCFG OUT(Bi)OUT(B)=genB∪ (IN(B)– killB)
}}
57
![Page 21: Compiler Design - ETH Zpeople.inf.ethz.ch/zmajo/teaching/cd_ss17/slides/w12-02-reaching... · Compiler Design Spring 2017 8.5 Reaching definitions Dr. ZoltánMajó Compiler Group](https://reader031.vdocument.in/reader031/viewer/2022022518/5b0b6a8f7f8b9aba628de368/html5/thumbnails/21.jpg)
59
![Page 22: Compiler Design - ETH Zpeople.inf.ethz.ch/zmajo/teaching/cd_ss17/slides/w12-02-reaching... · Compiler Design Spring 2017 8.5 Reaching definitions Dr. ZoltánMajó Compiler Group](https://reader031.vdocument.in/reader031/viewer/2022022518/5b0b6a8f7f8b9aba628de368/html5/thumbnails/22.jpg)
60
d1: i = m – 1d2: j = n d3: a = …
d7: i = …
d4: i = i + 1d5: j = j - 1
d6: a = …
ENTRY
EXIT
IN(B1)
OUT(B1)
IN(B2)
IN(B4)
OUT(B2)
OUT(B4)
∅
{d1,d2,d3}
{d1,d2,d3,d5,d6,d7}
{d3,d4,d5,d6}
{d3,d4,d5,d6}
{d3,d5,d6,d7}
IN(B3)
OUT(B3)
{d3,d4,d5,d6}
{d4,d5,d6}
gen={d6}kill={d3}
gen={d1,d2,d3}kill={d4,d5,d6,d7}
gen={d4,d5}kill={d1,d2,d7}
gen={d7}kill={d1,d4}
InitializeOUT[B]=∅while(changestoanyOUT(B)){
for(eachbasicblockB≠ENTRY){IN(B)=∪ Bi,Bi ispredecessorofBinCFG OUT(Bi)OUT(B)=genB∪ (IN(B)– killB)
}
![Page 23: Compiler Design - ETH Zpeople.inf.ethz.ch/zmajo/teaching/cd_ss17/slides/w12-02-reaching... · Compiler Design Spring 2017 8.5 Reaching definitions Dr. ZoltánMajó Compiler Group](https://reader031.vdocument.in/reader031/viewer/2022022518/5b0b6a8f7f8b9aba628de368/html5/thumbnails/23.jpg)
Comments
§ Solutionnotunique§ CouldalwaysuseOUT(B)=alldefinitions§ Notreallyuseful§ Iterativealgorithmfindsleastfixedpoint
§ Orderofvisitingbasicblocksmatters§ Forspeedofiteration,notfortheresult
§ Iterationterminates§ Finitenumberofbasicblocks,finitenumberofdefinitions§ INandOUTcanonlygrow
61
![Page 24: Compiler Design - ETH Zpeople.inf.ethz.ch/zmajo/teaching/cd_ss17/slides/w12-02-reaching... · Compiler Design Spring 2017 8.5 Reaching definitions Dr. ZoltánMajó Compiler Group](https://reader031.vdocument.in/reader031/viewer/2022022518/5b0b6a8f7f8b9aba628de368/html5/thumbnails/24.jpg)
Why?
void foo(int x) {
int a, b, c;
a = x + 1;
b = a;
if (…) { … }
else { … }
c = b + 1;
return c;
}
6262
d1: a = x + 1d2: b = a
if (Tcond)
d3: c = b + 1return c
… //noa,b … //noa,b
IN={d1,d2}
![Page 25: Compiler Design - ETH Zpeople.inf.ethz.ch/zmajo/teaching/cd_ss17/slides/w12-02-reaching... · Compiler Design Spring 2017 8.5 Reaching definitions Dr. ZoltánMajó Compiler Group](https://reader031.vdocument.in/reader031/viewer/2022022518/5b0b6a8f7f8b9aba628de368/html5/thumbnails/25.jpg)
Why?
void foo(int x) {
int a, b, c;
a = x + 1;
b = a;
if (…) { … }
else { … }
c = b + 1;
return c;
}
6363
d1: a = x + 1d2: b = a
if (Tcond)
d3: c = a + 1return c
… //noa,b … //noa,b
IN={d1,d2}
![Page 26: Compiler Design - ETH Zpeople.inf.ethz.ch/zmajo/teaching/cd_ss17/slides/w12-02-reaching... · Compiler Design Spring 2017 8.5 Reaching definitions Dr. ZoltánMajó Compiler Group](https://reader031.vdocument.in/reader031/viewer/2022022518/5b0b6a8f7f8b9aba628de368/html5/thumbnails/26.jpg)
Comments
§ Changeappearstobeminor– butitisnot§ d2 canberemoved(ifthereisnootheruseofb – seenexttopic)§ Valueofvariableacanbepickedupfromregister
§ Thereareotherreasonsforthecompilertocomputereachingdefinitions
64
![Page 27: Compiler Design - ETH Zpeople.inf.ethz.ch/zmajo/teaching/cd_ss17/slides/w12-02-reaching... · Compiler Design Spring 2017 8.5 Reaching definitions Dr. ZoltánMajó Compiler Group](https://reader031.vdocument.in/reader031/viewer/2022022518/5b0b6a8f7f8b9aba628de368/html5/thumbnails/27.jpg)
Foodforthought
void foo(int x) {
int a, b, c;
a = x + 1;
if (…) {
b = x;
} else { … }
c = b + 1;
return c;
}
6565
d1: a = x + 1if (Tcond)
d3: c = b + 1return c
… //noa,b d2: b = x
IN={d1,d2}
![Page 28: Compiler Design - ETH Zpeople.inf.ethz.ch/zmajo/teaching/cd_ss17/slides/w12-02-reaching... · Compiler Design Spring 2017 8.5 Reaching definitions Dr. ZoltánMajó Compiler Group](https://reader031.vdocument.in/reader031/viewer/2022022518/5b0b6a8f7f8b9aba628de368/html5/thumbnails/28.jpg)
66
![Page 29: Compiler Design - ETH Zpeople.inf.ethz.ch/zmajo/teaching/cd_ss17/slides/w12-02-reaching... · Compiler Design Spring 2017 8.5 Reaching definitions Dr. ZoltánMajó Compiler Group](https://reader031.vdocument.in/reader031/viewer/2022022518/5b0b6a8f7f8b9aba628de368/html5/thumbnails/29.jpg)
Foodforthought
67
d1: a = x + 1if (Tcond1)
d5: c = a + 1return c
… //noa,b d2: b = x
IN={d3,d2}
d3: a = y + 1if (Tcond2)
… //noa,b d4: c = b + 1
![Page 30: Compiler Design - ETH Zpeople.inf.ethz.ch/zmajo/teaching/cd_ss17/slides/w12-02-reaching... · Compiler Design Spring 2017 8.5 Reaching definitions Dr. ZoltánMajó Compiler Group](https://reader031.vdocument.in/reader031/viewer/2022022518/5b0b6a8f7f8b9aba628de368/html5/thumbnails/30.jpg)
Programisbroken
§ Asfaraswecantell,d4 mayreadanundefinedvalueofb§ Maybenot– cannotdecideingeneral
§ Couldweuse“reachingdefinitions”toidentifysuchtroublespots§ Backtotheuseofflowanalysisforprogramchecking
68
![Page 31: Compiler Design - ETH Zpeople.inf.ethz.ch/zmajo/teaching/cd_ss17/slides/w12-02-reaching... · Compiler Design Spring 2017 8.5 Reaching definitions Dr. ZoltánMajó Compiler Group](https://reader031.vdocument.in/reader031/viewer/2022022518/5b0b6a8f7f8b9aba628de368/html5/thumbnails/31.jpg)
Uninitializedvariables
§ Reachingdefinitions:setofdefinitionsthatreachstartofabasicblock
§ Idea:insert“fake”definitionsintotheENTRYnode§ Oneforeachvariable§ “fake”meansthereisnocorrespondenceinthesourceprogram§ Identifybytag,number,… (herenumber>100)§ StartiterationwithOUT(ENTRY)=setoffakedefinitions
§ Ifafakedefinitiondthatsetsdestinationdest reachesablockB,andthereisauseofdest inBpriortoanydefinitionofdest inB,thendest ispotentiallyuninitialized§ Compilercan(ingeneral)onlyissuewarning,cannotbesurevariable
isuninitialized
69
![Page 32: Compiler Design - ETH Zpeople.inf.ethz.ch/zmajo/teaching/cd_ss17/slides/w12-02-reaching... · Compiler Design Spring 2017 8.5 Reaching definitions Dr. ZoltánMajó Compiler Group](https://reader031.vdocument.in/reader031/viewer/2022022518/5b0b6a8f7f8b9aba628de368/html5/thumbnails/32.jpg)
Uninitializedvariables
70
d1: a = x + 1if (Tcond1)
d5: c = a + 1return c
… //noa,b d2: b = x
d3: a = y + 1if (Tcond2)
… //noa,b d4: c = b + 1
d100: a = …d101: b = …d102: c = …
ENTRY
IN:{d100,d101,d102}
IN:{d1,d101,d102}
IN:{d1,d2,d101,d102}
IN:{d3,d2,d101,d102}
IN:{d3,d2,d4,d101,d102}
IN:{d3,d2,d101,d102}
IN:{d1,d101,d102}
EXIT
xoryareglobalorparameterssowedonotneeda“fake”definition
![Page 33: Compiler Design - ETH Zpeople.inf.ethz.ch/zmajo/teaching/cd_ss17/slides/w12-02-reaching... · Compiler Design Spring 2017 8.5 Reaching definitions Dr. ZoltánMajó Compiler Group](https://reader031.vdocument.in/reader031/viewer/2022022518/5b0b6a8f7f8b9aba628de368/html5/thumbnails/33.jpg)
71
![Page 34: Compiler Design - ETH Zpeople.inf.ethz.ch/zmajo/teaching/cd_ss17/slides/w12-02-reaching... · Compiler Design Spring 2017 8.5 Reaching definitions Dr. ZoltánMajó Compiler Group](https://reader031.vdocument.in/reader031/viewer/2022022518/5b0b6a8f7f8b9aba628de368/html5/thumbnails/34.jpg)
Uninitializedvariables
…// no a or bif (Tcond1)
d1: a = x + 1 d2: b = x + 2
d3: x = a + 1d4: b = y + 1d5: y = b + 1
d100: a = …d101: b = …
ENTRY
IN:{d1,d2,d101,d100}
xoryareglobalorparameterssowedonotneeda“fake”definition
![Page 35: Compiler Design - ETH Zpeople.inf.ethz.ch/zmajo/teaching/cd_ss17/slides/w12-02-reaching... · Compiler Design Spring 2017 8.5 Reaching definitions Dr. ZoltánMajó Compiler Group](https://reader031.vdocument.in/reader031/viewer/2022022518/5b0b6a8f7f8b9aba628de368/html5/thumbnails/35.jpg)
73
![Page 36: Compiler Design - ETH Zpeople.inf.ethz.ch/zmajo/teaching/cd_ss17/slides/w12-02-reaching... · Compiler Design Spring 2017 8.5 Reaching definitions Dr. ZoltánMajó Compiler Group](https://reader031.vdocument.in/reader031/viewer/2022022518/5b0b6a8f7f8b9aba628de368/html5/thumbnails/36.jpg)
Uninitializedvariables
…// no a or bif (Tcond1)
d1: a = x + 1 d2: a = x + 2
d3: a = a + 1return a
d100: a = …
ENTRY
IN:{d1,d2}
xisaglobalorparametersowedonotneeda“fake”definition
![Page 37: Compiler Design - ETH Zpeople.inf.ethz.ch/zmajo/teaching/cd_ss17/slides/w12-02-reaching... · Compiler Design Spring 2017 8.5 Reaching definitions Dr. ZoltánMajó Compiler Group](https://reader031.vdocument.in/reader031/viewer/2022022518/5b0b6a8f7f8b9aba628de368/html5/thumbnails/37.jpg)
75
![Page 38: Compiler Design - ETH Zpeople.inf.ethz.ch/zmajo/teaching/cd_ss17/slides/w12-02-reaching... · Compiler Design Spring 2017 8.5 Reaching definitions Dr. ZoltánMajó Compiler Group](https://reader031.vdocument.in/reader031/viewer/2022022518/5b0b6a8f7f8b9aba628de368/html5/thumbnails/38.jpg)
Programanalysis
§ Compilerneedsinformation§ Specificproblem
§ Deviseflowanalysistocomputeinformation
§ Letcompileruseinformationtodealwithspecificproblem
76