compiler design - eth zpeople.inf.ethz.ch/zmajo/teaching/cd_ss17/slides/w08_02-code... · compiler...
TRANSCRIPT
CompilerDesignSpring2017
7.0Codegeneration
Dr.Zoltán Majó
CompilerGroup– JavaHotSpot VirtualMachineOracleCorporation
46
Outline
§ 7.1Accesstooperands
§ 7.2Assignmentstatement
§ 7.3Conditionalstatement
§ 7.4Loops
§ 7.5Methodinvocation
47
Extendingthecodegenerator
§ NewIRnodes
§ ARRAY§ (Index inframework)§ Specifiesarrayelement§ Requiresnameofarray…§ ...andtreeforindexexpression
§ FIELD
§ Couldincludesubtree tocomputeaddress§ Asdiscussedearlier
49
Otherrestrictions
§ Didnothandlestatementsthatrequiredmoreregistersthanavailable§ Virtualregisterspostponedealingwiththisaspect
§ CouldbreakatreethatrequiresmorethanRregistersintoseparatetrees§ Introducetemporaryvariablestoholdintermediateresults
§ Recommendedoption:Handleregistershortageonthefly§ Needaregister?Freearegister§ Saveregistercontentsontostack§ Exampleonnextslide
50
Outline
§ 7.1Accesstooperands
§ 7.2Assignmentstatement
§ 7.3Conditionalstatement
§ 7.4Loops
§ 7.5Methodinvocation
53
7.3Conditionalstatement
JavaLi allowstwokindsofconditionalstatements
1. “if-then”if (expression) { <body> }
2. “if-then-else”if (expression) { <body> }
else { <body> }
54
1. “if-then”if (expression) { <then-part> }InvokecodegeneratoronexpressionCodetodecideifthen-partisexecutedInvokecodegeneratoronthen-part
2. “if-then-else”if (expression) { <then-part> }
else { <else-part> }InvokecodegeneratoronexpressionCodetodecideifthen-partisexecutedInvokecodegeneratoronthen-partCodetoskiparoundelse-partInvokecodegeneratoronelse-part
55
Codeoutline
57
Eval expression
Test
Branch
dThen-part
…continue
Eval expression
Test
Branch
Then-part
…continue
Else-part
d
d
Uncond.branch
Outline
§ 7.1Accesstooperands
§ 7.2Assignmentstatement
§ 7.3Conditionalstatement
§ 7.4Loops
§ 7.5Methodinvocation
59
7.4Loops
§ JavaLi hasonlyoneloopingconstructwhile (expression) {
<loop-body>}
§ Cantranslateallotherkindsofloopingconstructsintowhile-loops
60
§ Translationsimilartoconditionalstatement§ Samerulesforexpression
while-loopwhile (expression) { <loop-body> }
InvokecodegeneratoronexpressionCodetodecideifloop-bodyisexecutedInvokecodegeneratoronloop-bodyCodetojumpbacktostartofloop
61
§ Expressionmustbeevaluatedforeveryiteration
§ Simplescheme
§ Straightforwardtoimplement§ Closetoconditionalstatement
§ Oneunconditionalbranchforeachiteration
64
Codeoutline2
§ Idea:eliminateunconditionalbranchattheendofeachloopbody
§ Moveloopcontinuationtesttotheendoftheloop
65
§ Possibleperformanceimprovement§ Reducednumberofunconditionalbranches§ Basedontheguessthattheloopbodyisexecuted§ Processorimplementationmayprefetch /pre-executeunconditional
branches
§ Otheroptionsexist
67
Otherloopconstructs
Takeasheetofpaperandsketchhowyoucouldtranslatea“for”loop
for (int i = low; i < high; i++) {<body>
}
Showafigurethatoutlinesthecode(similartoslidesshownduringthelecture)
69
Codeoutline
70
Eval expression
Test
Branch
Body
…continue
d
Uncond.branch
Init loopcounter
Updateloopcounter
Outline
§ 7.1Accesstooperands
§ 7.2Assignmentstatement
§ 7.3Conditionalstatement
§ 7.4Loops
§ 7.5Methodinvocation
72
7.5Methodinvocation
§ Findingthecorrectbodyofcode§ Coveredearlier
§ Storageformethod-localvariables
§ Passingofparameters(arguments)
§ Handlingthereturnvalue
73
Terminology
Considerasimpleclasswithonemethod:class B {
int bar(int x1, int x2, ..., int xn) { … }}// somewhere in some method fooB bref; int val = bref.bar(y1,y2, …, yn);
74
callee
target(instance)receiver(y0– firstactual)
argumentsactualparametersactuals
callsite
caller
Callingconvention
§ Thecallingconventiondecideswhichsteps/actionsofmethodinvocation/returnare§ Donebythecaller§ Donebythecallee
§ …andhowanydatatransferisimplemented§ Wherethedataarestored§ Dataincludesreturnaddressandreturnvalue§ Mayhavetoincludetypecasts
§ Usuallydefinedforallcompilers/softwaredevelopersonagivenoperatingsystem§ Ensuresinteroperability
77
Callingconvention
§ Stackprincipaldatastructure§ “Controlstack”
§ Setupbyrun-timesystem§ Supportedbyinstructionsand/orresources(registers)onsome
systems
§ Activationrecord keepsinformationonmethodinvocationsthatarecurrently“active”(or“live”)§ Alsoknownasframe
78
Actions
Considerthismethodinvocation.// in some method fooB bref; int val = bref.bar(y1,y2, …, yn);
Listallthestepsthatarenecessarytoimplementthecallanditsreturn(onasheetofpaper).
79
Actions (relatedtomethodinvocation)
§ Identifytarget
§ Identifystartingaddressofcallee
§ Handleparameters§ Evaluateyi
§ Castasnecessary§ Putintolocationwhereitcanbefound
§ Pushontostack§ Placeintoregister§ Leavesomewhereelse
§ Saveregisters
§ Findspacefortemporaries
81
Actions (relatedtomethodinvocation)
§ Determineandstorereturnaddress
§ Findspaceforreturnvalue
§ Setupactivationrecordforcallee§ Linktoactivationrecordofcaller(“controllink”)
§ Transfercontroltocallee
82
Callling convention
§ Someofthesesteps§ Mustbedonebycaller§ Mustbedonebycallee
§ Methodthatwasinvoked§ Canbedonebyeitherone
83
Actions (relatedtomethodreturn)
§ Transfercontroltocaller/returnaddress
§ Deliverreturnvalue
§ Removeactivationrecordforcallee§ Reclaimanytemporarystorage§ Switchtoactivationrecordofcaller
84
Simpleactivationrecord
85
Temp k
...
Temp0
Local m
…
Local0
oldSP
oldFP
Returnaddress
target(parametery0)
parametery1
…
parameteryn
Returnvalue
framepointer
stackpointer
Comments
§ SufficientforJavaLi§ Willnotworkfor“varargs”
§ Methodswithavariablenumberofarguments(actuals)
§ Parametersarefoundonthestack§ Actuals:positiveoffsetfromframepointer§ Offsetrecordedinsymboltable
§ Localsarefoundonthestack§ Negativeoffsetfromframepointer§ Offsetrecordedinsymboltable
§ Temporaryregioncangroww/olimit§ Temporariescanbeaccessedviaframepointer
87
Symboltable
§ Mustcompletesymboltablepriortocodegeneration
88
local0 - 4
local1 - 8
parameter1 +16
parameter 2 +20
return value +24
this (implicitparameter) + 12
Parameterpassing
§ (Recall)JavaLi passesallargumentsbyvalue
§ Nottheaddressofavariableispassedbutitsvalue
§ Thevalueofareferencecanbeusedtoread/writetheobjectthereferencerefersto§ Butthereferencecannotbechanged
§ Atcallsite(ofbref.bar(y1,y2, …, yn))§ Evaluateyn,pushontostack
§ Evaluateyn-1,yn-2,…y1,y0§ Couldbeanexpression,i.e.bref.bar(y1, a × b, …, yn)
§ Mayrequirecast
89
Actual-formalcorrespondence
§ Otherlanguagesarebasedon(orinclude)differentmodels§ Languagespecshouldspecifymodel
§ Herewelookatthecompiler’sside7.5.1Call-by-value7.5.2Call-by-reference7.5.3Call-by-result7.5.4Call-by-name
90
7.5.1Call-by-value
§ TheonlyoptioninJava(andJavaLi)
§ Easytounderstand§ Lookatmethodinisolation§ Withreferencesriskofaliasing
§ Easytoimplement§ Callerknowshowtoevaluateactuals§ Callee usesaparameterlikealocal– initializedbycaller
§ Potentiallyinefficient§ Passanarray/anobjectbyvalue?§ Mayrequirecopy(timeconsuming)§ Languagerestrictscall-by-valueto“word-size”entities(ints,references)
91
Adminissues
§ Norecitationsessiontoday
§ Easterbreakstartssoon§ Usefreetime(ifany)toworkonHomework3(dueonApril27)§ Andonoptionalparsing-relatedhomework(HWPRS)
§ Outtoday
§ Nextrecitation:April27at10:15inCABG61§ DiscussionofHomework4(completecodegenerator)
§ Willsendoutreminder
93