Top Banner
Compiler Design Spring 2017 8.5 Reaching definitions Dr. Zoltán Majó Compiler Group – Java HotSpot Virtual Machine Oracle Corporation
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

May 28, 2018

Download

Documents

lydien
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
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