compiler design - eth zpeople.inf.ethz.ch/zmajo/teaching/cd_ss17/slides/w12-02-reaching... ·...

38
Compiler Design Spring 2017 8.5 Reaching definitions Dr. Zoltán Majó Compiler Group – Java HotSpot Virtual Machine Oracle Corporation

Upload: lydien

Post on 28-May-2018

216 views

Category:

Documents


0 download

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Programanalysis

§ Compilerneedsinformation§ Specificproblem

§ Deviseflowanalysistocomputeinformation

§ Letcompileruseinformationtodealwithspecificproblem

76