Course News - University of...
Transcript of Course News - University of...
4/8/17
1
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSEP590–ProgrammingSystemsUniversityofWashington
Lecture2:OverviewPartII–BackEnd
MichaelRingenburgSpring2017
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CourseNews• SubmitpresentaPontopicproposalsbyApril14
– Ifyouwouldliketoworkwithapartner,bothofyouwillhavetopresent,andIwillexpectamoreindepth/longerpresentaPon
– We’reupto19students–trickytofit>18intofinal3weeks.Letmeknowifyou’dbewillingtopresentMay9.
• Otherwisemayhavetocomeearlyorstaylateoneclass(we’llvote)• Todayandnextweek:
– Finishcompileroverview– Cover1or2advancedtopicsincompilers:
• RegisterallocaPonviagraphcoloring• PossiblySSAform
• A]erthat,broadenourhorizonsabitandlookatothertypesofprogrammingsystems
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 1
4/8/17
2
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
Reminder:CompilerStructure
Source Target
Scanner
Parser
OpPmizer
CodeGen
characters
tokens
IR
IR (often different)
Machine code
SemanPcAnalysis
IR (may be different)
“FrontEnd”
“BackEnd”
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 2
IntermediateRepresenta.ons
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 3
4/8/17
3
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
IntermediateRepresentaPons
• TheparserbuildsanintermediaterepresentaPonoftheprogram– TypicallyanAST
• RestofthecompilerchecksandtransformstheIRtoimprove(“opPmize”)it,andeventuallytranslatesittofinalcode– TypicallywilltransforminiPalIRtooneormorelowerlevelIRsalongtheway
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 4
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
IRDesignTaxonomy
• Structure– Graphical(trees,graphs,etc.)– Linear(codeforsomeabstractmachine)– Hybridsarecommon(e.g.,control-flowgraphswithlinearcodeinbasicblocks)
• AbstracPonLevel– High-level,neartosourcelanguage– Low-level,closertomachine
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 5
4/8/17
4
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
Example:ArrayReference
Source:A[i,j]AST:
High-levellinear:t1 ← A[i,j]
Low-levellinear(3address):loadI 1 => r1sub rj,r1 => r2loadI 10 => r3mult r2,r3 => r4sub ri,r1 => r5add r4,r5 => r6loadI @A => r7add r7,r6 => r8load r8 => r9
subscript
A i j
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 6
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
GraphicalIRs
• IRsrepresentedasagraph(ortree)• Nodesandedgestypicallyreflectsomestructureoftheprogram– E.g.,source,controlflow,datadependence
• Maybelarge(especiallysyntaxtrees)• High-levelexamples:
– Syntaxtrees– Controlflowgraphs– Datadependencegraphs– O]enusedinopPmizaPonandcodegeneraPon
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 7
4/8/17
5
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
GraphicalIR:ConcreteSyntaxTrees
• Thefullgrammarisneededtoguidetheparser,butcontainsmanyextraneousdetails– E.g.,syntacPctokens,rulesthatcontrolprecedence
• Typicallythefullsyntaxtreedoesnotneedtobeusedexplicitly
E
T
T * F
F Id(y)
Id(x)
Subscript
A [ i ]
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 8
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
GraphicalIR:AbstractSyntaxTrees
• WantonlyessenPalstructuralinformaPon• Canberepresentedexplicitlyasatreeorinalinearform,e.g.,
intheorderofadepth-firsttraversal.Fora[i+j],thismightbe:Subscript Id(A) Plus Id(i) Id(j)
• Commonoutputfromparser;usedforstaPcsemanPcs(typechecking,etc.)andsomePmeshigh-levelopPmizaPons
Mult
Id(x) Id(y)
Subscript
A Plus
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 9
Id(i) Id(j)
4/8/17
6
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
ControlFlowGraph(CFG)• NodesareBasicBlocks
– Codethatalwaysexecutestogether(i.e.,nobranchesintooroutofthemiddleoftheblock).
– I.e.,“straightlinecode”• Edgesrepresentpathsthatcontrolflowcouldtake.– I.e.,possibleexecuPonorderings.– EdgefromBasicBlockAtoBasicBlockBmeansBlockBcouldexecuteimmediatelya]erBlockAcompletes.
• RequiredformuchoftheanalysisdoneintheopPmizer.
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 10
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CFGExampleprint(“hello”);a = 7;if (x == y) { print(“equal”); b = 9;} else { b = 10;}while (a < b) { a++; print(“increase”);}print(“done”);Spring2017 UWCSEP590(PMPProgrammingSystems):
Ringenburg 11
4/8/17
7
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CFGExampleprint(“hello”);a = 7;if (x == y)
print(“hello”);a = 7;if (x == y) { print(“equal”); b = 9;} else { b = 10;}while (a < b) { a++; print(“increase”);}print(“done”);Spring2017 UWCSEP590(PMPProgrammingSystems):
Ringenburg 12
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CFGExampleprint(“hello”);a = 7;if (x == y)
print(“equal”);b = 9;
print(“hello”);a = 7;if (x == y) { print(“equal”); b = 9;} else { b = 10;}while (a < b) { a++; print(“increase”);}print(“done”);Spring2017 UWCSEP590(PMPProgrammingSystems):
Ringenburg 13
4/8/17
8
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CFGExampleprint(“hello”);a = 7;if (x == y) { print(“equal”); b = 9;} else { b = 10;}while (a < b) { a++; print(“increase”);}print(“done”);
print(“hello”);a = 7;if (x == y)
b = 10;print(“equal”);b = 9;
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 14
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CFGExampleprint(“hello”);a = 7;if (x == y) { print(“equal”); b = 9;} else { b = 10;}while (a < b) { a++; print(“increase”);}print(“done”);
print(“hello”);a = 7;if (x == y)
b = 10;print(“equal”);b = 9;
while (a < b)
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 15
4/8/17
9
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CFGExampleprint(“hello”);a = 7;if (x == y) { print(“equal”); b = 9;} else { b = 10;}while (a < b) { a++; print(“increase”);}print(“done”);
print(“hello”);a = 7;if (x == y)
b = 10;print(“equal”);b = 9;
while (a < b)
a++;print(“increase”);
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 16
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CFGExampleprint(“hello”);a = 7;if (x == y) { print(“equal”); b = 9;} else { b = 10;}while (a < b) { a++; print(“increase”);}print(“done”);
print(“hello”);a = 7;if (x == y)
b = 10;print(“equal”);b = 9;
while (a < b)
a++;print(“increase”);
print(“done”);Spring2017 UWCSEP590(PMPProgrammingSystems):
Ringenburg 17
4/8/17
10
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
(Program/Data)DependenceGraph
• O]enusedinconjuncPonwithanotherIR.• Inadatadependencegraph,edgesbetweennodesrepresent“dependencies”betweenthecoderepresentedbythosenodes.– IfAandBaccessthesamedata,andAmustoccurbeforeBtoachievecorrectbehavior,thenthereisadependenceedgefromAtoB.
– AàBmeanscompilercan’tmoveBbeforeA.– Granularityofnodesvaries.DependsonabstracPonlevelofrestofIR.E.g.,nodescouldbeloads/stores,orwholestatements.
– E.g.,a=2;b=2;c=a+7;• Where’sthedependence?
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 18
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
Typesofdependencies• Read-a]er-write(RAW)/“flowdependence”
– E.g.,a=7;b=a+1;– Thereadof‘a’mustfollowthewriteto‘a’,otherwiseitwon’tseethecorrectvalue.
• Write-a]er-read(WAR)/“anPdependence”– E.g.,b=a*2;a=5;– Thewriteto‘a’mustfollowthereadof‘a’,otherwisethereadwon’tseethecorrectvalue.
• Write-a]er-write(WAW)/“outputdependence”– E.g.,a=1;…a=2;…– Thewritesto‘a’musthappeninthecorrectorder,otherwise‘a’willhavethewrongfinalvalue.
• WhataboutRAR/”inputdependence”??
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 19
4/8/17
11
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
Loop-CarriedDependence
• Loopcarrieddependence:AdependenceacrossiteraPonsofaloop
for(i=0;i<size;i++) x=foo(x);
• RAWloopcarrieddependence:thereadof‘x’dependsonthewriteof‘x’inthepreviousiteraPon
• IdenPfyingandunderstandingtheseiscriPcalforloopparallelizaPon/vectorizaPon– Ifthecompiler“understands”thenatureofthedependence,itcansomePmesberemovedordealtwith
– O]enusesophisPcatedarraysubscriptanalysisforthis
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 20
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
DependenceGraphExample
a = 7;print(“hello”);while (a < b) { print(“increase”); a++;}print(“done”);
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 21
4/8/17
12
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
DependenceGraphExample
a = 7;print(“hello”);while (a < b) { print(“increase”); a++;}print(“done”);
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 22
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
DependenceGraphExample
a = 7;print(“hello”);while (a < b) { print(“increase”); a++;}print(“done”);
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 23
4/8/17
13
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
DependenceGraphExample
a = 7;print(“hello”);while (a < b) { print(“increase”); a++;}print(“done”);
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 24
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
DependenceGraphExample
a = 7;print(“hello”);while (a < b) { print(“increase”); a++;}print(“done”);
LCD
LCD:Loop-CarriedDependence
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 25
4/8/17
14
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
DependenceGraphExample
a = 7;print(“hello”);while (a < b) { print(“increase”); a++;}print(“done”);
LCD
LCD
LCD:Loop-CarriedDependence
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 26
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
LinearIRs
• Pseudo-codeforsomeabstractmachine• LevelofabstracPonvaries• Simple,compactdatastructures
– Commonlyused:arrays,linkedstructures
• Examples:3-addresscode,stackmachinecode T1ß2
T2ßbT3ßT1*T2T4ßaT5ßT4–T3
push2pushbmulPplypushasubtract
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 27
4/8/17
15
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
WhatIRtoUse?
• Commonchoice:all(!)– ASTorotherstructuralrepresentaPonbuiltbyparserandusedinearlystagesofthecompiler
• Closertosourcecode• GoodforsemanPcanalysis• Facilitatessomehigher-levelopPmizaPons
– Lowertolow-levellinearIRforlaterstagesofcompiler• Closertomachinecode• Exposesmachine-relatedopPmizaPons• GoodforresourceallocaPonandscheduling
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 28
Seman.cAnalysis
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 29
4/8/17
16
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
Whatdoweneedtochecktocompilethis?
classC{inta;C(intiniPal){ a=iniPal;}voidsetA(intval){ a=val;}
}
classMain{publicstaPcvoid
main(String[]args){ Cc=newC(17); c.setA(42);
}}
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 30
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
BeyondSyntax
• Thereisalevelofcorrectnessthatisnotcapturedbyacontext-freegrammar– Hasavariablebeendeclared?– Aretypesconsistentinanexpression?– Intheassignmentx=y,isyassignabletox?– Doesamethodcallhavetherightnumberandtypesofparameters?
– Inaselectorp.q,isqamethodorfieldofclassinstancep?– IsvariablexguaranteedtobeiniPalizedbeforeitisused?– Inp.q,couldpbenull?– Etc.
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 31
4/8/17
17
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CheckedProperPes
• SomeenforcedatcompilePme,othersatrunPme(typicallydependsonlanguagespec).
• Differentlanguageshavedifferentrequirements– E.g.,Cvs.Javatypingrules,iniPalizaPonrequirements– SomeoftheseproperPesareo]endesirableinprograms,evenifthelanguagedoesn’trequirethem.
– Compilersshouldn’tenforceapropertythatisnotrequiredbythelanguage(butcanwarn).
– However,therearestaPccheckersforsomeoftheseproperPesthatusecompiler-stylealgorithms.
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 32
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
Whatelsedoweneedtoknowtogeneratecode?
• Wherearefieldsallocatedinanobject?• Howbigareobjects?(i.e.,howmuchstorageneedstobeallocated)
• Wherearelocalvariablesstoredwhenamethodiscalled?– Stack?Whatoffset?Orexclusivelyinregister?Whichregister?
• Whichmethodsareassociatedwithanobject/class?– InparPcular,howdowefigureoutwhichmethodtocallbasedontherun-Pmetypeofanobject?
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 33
4/8/17
18
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
SemanPcAnalysis• Maintasks:
– ExtracttypesandotherinformaPonfromtheprogram– Checklanguagerulesthatgobeyondthecontext-freegrammar– Resolvenames
• RelatedeclaraPonsandusesofeachvariable– “Understand”theprogramwellenoughforsynthesis
• E.g.,sizes,layoutsofclasses/structs• Keydatastructure:Symboltables
– MapeachidenPfierintheprogramtoinformaPonaboutit(kind,type,etc.)
• Thisistypicallyconsideredthefinalpartofthe“frontend”ofthecompiler(oncecomplete,knowwhetherornotprogramislegal).
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 34
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
SomeKindsofSemanPcInformaPon
Information Generated From Used to process
Symbol names (variables, methods)
Declarations Expressions, statements
Type information Declarations, expressions
Operations
Memory layout information
Assigned by compiler Target code generation
Values Constants Expressions (constant folding)
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 35
4/8/17
19
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
ASamplingofSemanPcChecksandComputaPons
• Appearanceofanameinanexpression:id– Check:Symbolhasbeendeclaredandisinscope– Compute:Inferredtypeisthedeclaredtypeofsymbol
• Constant:v– Compute:Inferredtypeandvalueareexplicit– Example:42.0hastypedoubleandvalue42.0
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 36
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
ASamplingofSemanPcChecksandComputaPons
• Binaryoperator:exp1opexp2– Check:exp1andexp2havecompaPbletypes
• EitheridenPcal,orwell-definedconversiontoappropriatetypes
• TypesarecompaPblewithop• Example:42 + truefails,20 + 21.9999passes
– Compute:InferredtypeofexpressionisafuncPonoftheoperatorandoperandtypes
• Example:20 + 21.999hastypedouble,42 + “, the answer”hastypeString(inJava).
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 37
4/8/17
20
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
AyributeGrammars
• AsystemaPcwaytothinkaboutsemanPcanalysis
• FormalizeproperPeschecked/computedduringsemanPcanalysisandrelatethemtogrammarproducPonsintheCFG.
• SomePmesuseddirectly,butevenwhennot,AGsareausefulwaytoorganizetheanalysisandthinkaboutit
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 38
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
AyributeGrammars
• Idea:associateayributeswitheachnodeinthesyntaxtree
• Examplesofayributes– TypeinformaPon– StorageinformaPon– Assignable(e.g.,expressionvsvariable–lvaluevsrvalueforC/C++programmers)
– Value(forconstantexpressions)– etc.…
• NotaPon:X.aifaisanayributeofnodeXSpring2017 UWCSEP590(PMPProgrammingSystems):
Ringenburg 39
4/8/17
21
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
InheritedandSynthesizedAyributes
• GivenaproducPonX::=Y1Y2…Yn• AsynthesizedayributeX.aisafuncPonofsomecombinaPonofayributesofYi’s(boyomup)– E.g.,avalueayribute
• AninheritedayributeYi.bisafuncPonofsomecombinaPonofayributesX.aandotherYj.c(topdown)– O]enrestrictedabit:onlyY’stothele]canbeused.– E.g.,a“typeenvironment”ora“valueenvironment”–mappingsofsymbolstotypesorvalues(iftheyareknownconstants).
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 40
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
AyributeEquaPons
• ForeachkindofnodewegiveasetofequaPonsrelaPngayributevaluesofthenodeanditschildren– Example:
plus.val=exp1.val+exp2.val
• AyribuPon(aka,evaluaPon)meansimplicitlyfindingasoluPonthatsaPsfiesalloftheequaPonsinthetree
Plus
exp1 exp2
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 41
4/8/17
22
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
InformalExampleofAyributeRules
• Supposewehavethefollowinggrammarforatriviallanguageprogram::=declListstmtdeclList::=declListdecl|decltwostmts::=stmtstmtdecl::=intid;stmt::=exp=exp;exp::=id|exp+exp|INTEGER_LITERAL
• Wewanttogivesuitableayributesforbasictypeandlvalue/rvaluechecking,andconstantfolding
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 42
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
InformalExampleofAyributeRules
• Ayributesofnodes– env(typeenvironment)storesthetypesofalldeclaredvariables;synthesizedbydeclaraPons,inheritedbythestatement
• Eachentrymapsanametoitstype– envPre(fordeclaraPons)–Usedtobuilduptheenvironment
• RepresentstheenvironmentpriortothedeclaraPon.• E.g.,“intx;inty;”.TheenvPreof“inty”willmapxtoanint.Theenvof“inty”willmapxtointandytoint.
– type(forexpressions);synthesizedfromchildren(andpossibleenvlookup)
– kind:var(assignable)orval(notassignable);synthesized– value(forexpressions):UNK(unknown)oranInteger,representscomputedconstantvalue;synthesized
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 43
4/8/17
23
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
AyributesforDeclaraPons
• decl::=intid;– decl.env=decl.preEnvU{(id,int)}– IntuiPon:add(id,int)mappingtoanenvironmentcontainingmappingsforpreviousdeclaraPons
• Example:AyribuPonforint y,giventhatwepreviouslysawint x– Sawint xearlier,soassumedecl.preEnv={(x,int)}– decl::=int y;– decl.env=decl.preEnvU{(y,int)}=
{(x,int)}U{(y,int)}= {(x,int),(y,int)}
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 44
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
AyributesforDeclaraPons
• declList1::=declList2decl– decl.preEnv=declList2.env– declList1.env=decl.env– IntuiPon:declList2.envcontainsallofthepreviouslyseenmappings,souseitasthepre-environmentforournewdeclaraPon.Theenvironmentforthecombinedlist(list1)willbetheresultofaddingthemappingfordecltothemappingsofthesublist(list2).
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 45
4/8/17
24
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
AyributesforDeclaraPons
• declList::=decl– decl.preEnv={}– declList.env=decl.env– IntuiPon:ForthefirstelementinourdeclaraPonlist,wecanstartwithanemptyenvironment,becausewewon’thaveseenanydeclaraPonsyet.(Truehere,butprobablynotinareallanguage.)
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 46
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
ExampleDeclaraPonList
int a; int b; int c;
• declList::=decl• decl.preEnv={}• declList.env=decl.env
• declList1::=declList2decl• decl.preEnv=declList2.env• declList1.env=decl.env
• decl::=intid;• decl.env=decl.preEnvU{(id,int)}Spring2017
4/8/17
25
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
ExampleDeclaraPonList
• declList::=decl• decl.preEnv={}• declList.env=decl.env
• declList1::=declList2decl• decl.preEnv=declList2.env• declList1.env=decl.env
• decl::=intid;• decl.env=decl.preEnvU{(id,int)}
int a; int b; int c;
declList
declList
declList
decl
decl
decl
inta
intb
intc
Spring2017
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
ExampleDeclaraPonList
• declList::=decl• decl.preEnv={}• declList.env=decl.env
• declList1::=declList2decl• decl.preEnv=declList2.env• declList1.env=decl.env
• decl::=intid;• decl.env=decl.preEnvU{(id,int)}
int a; int b; int c;
declList
declList
declList
decl
decl
decl
inta
intb
intc
pre:{}
Spring2017
4/8/17
26
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
ExampleDeclaraPonList
• declList::=decl• decl.preEnv={}• declList.env=decl.env
• declList1::=declList2decl• decl.preEnv=declList2.env• declList1.env=decl.env
• decl::=intid;• decl.env=decl.preEnvU{(id,int)}
int a; int b; int c;
declList
declList
declList
decl
decl
decl
inta
intb
intc
pre:{},env:{a,int}
env:{a,int}
Spring2017
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
ExampleDeclaraPonList
• declList::=decl• decl.preEnv={}• declList.env=decl.env
• declList1::=declList2decl• decl.preEnv=declList2.env• declList1.env=decl.env
• decl::=intid;• decl.env=decl.preEnvU{(id,int)}
int a; int b; int c;
declList
declList
declList
decl
decl
decl
inta
intb
intc
pre:{},env:{a,int}
env:{a,int} pre:{a,int}
Spring2017
4/8/17
27
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
ExampleDeclaraPonList
• declList::=decl• decl.preEnv={}• declList.env=decl.env
• declList1::=declList2decl• decl.preEnv=declList2.env• declList1.env=decl.env
• decl::=intid;• decl.env=decl.preEnvU{(id,int)}
int a; int b; int c;
declList
declList
declList
decl
decl
decl
inta
intb
intc
pre:{},env:{a,int}
env:{a,int} pre:{a,int},env:{(a,int)(b,int)}
Spring2017
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
ExampleDeclaraPonList
• declList::=decl• decl.preEnv={}• declList.env=decl.env
• declList1::=declList2decl• decl.preEnv=declList2.env• declList1.env=decl.env
• decl::=intid;• decl.env=decl.preEnvU{(id,int)}
int a; int b; int c;
declList
declList
declList
decl
decl
decl
inta
intb
intc
pre:{},env:{a,int}
env:{a,int} pre:{a,int},env:{(a,int)(b,int)}
env:{(a,int)(b,int)} pre:{(a,int)(b,int)},env:{(a,int)(b,int)(c,int)}
env:{(a,int)(b,int)(c,int)}
Spring2017
4/8/17
28
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
AyributesforProgram
• program::=declListstmt– stmt.env=declList.env– IntuiPon:WewanttotypecheckourstatementgiventhetypeenvironmentsynthesizedbyourdeclaraPonlist.
• Example:Ifprogramwas
int a; int b; b = a + 1;
Wewouldtypechecktheassignmentstatementwiththeenvironment{(a,int),(b,int)}
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 54
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
AyributesforConstants
• exp::=INTEGER_LITERAL– exp.kind=val– exp.type=int– exp.value=INTEGER_LITERAL– IntuiPon:Anintegerconstant(literal)clearlyhastypeint,andexplicitvalue.Youcan’tassigntoit(5=xisnotlegal),soitisavalue(val)notavariable(var).
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 55
4/8/17
29
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
AyributesforIdenPfierExpressions
• exp::=id– id.type=exp.env.lookup(id)
• Ifthislookupfails,issueanundeclaredvariableerror.– exp.type=id.type– exp.kind=var– exp.value=UNK– IntuiPon:WelookuptheidenPfier’stypeintheenvironment,andusethatastheexpression’stype.Ifitdoesn’texistintheenvironment,itmustnothavebeendeclared,soit’sanerror.Sinceitisavariable,itisassignableandhasunknownvalue.
– Example:Typecheckingawithenvironment{(a,int)}givestypeint.Typecheckingbwiththesameenvironmentgivesanerror.
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 56
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
AyributesforAddiPon
• exp::=exp1+exp2– exp1.env=exp2.env=exp.env– errorifexp1.type!=exp2.type(orifnotcompaPbleifusingmore
complexrules)
– exp.type=exp1.type(orconvertedtypeifmorecomplexrules)
– exp.kind=val– exp.value=(exp1.value==UNK||exp2.value==UNK)?
UNK:exp1.value+exp2.value– IntuiPon:TypecheckoperandswithsameenvironmentasoperaPon.VerifythattypesarecompaPble,andsetresulttypeappropriately.Notassignable,sosetkindtoval.Computevalueifbothoperandshaveconstantvalue.
Spring2017 UWCSEP590(PMPProgrammingSystems):
Ringenburg 57
4/8/17
30
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
AyributeRulesforAssignment
• stmt::=exp1=exp2;– exp1.env=stmt.env– exp2.env=stmt.env– Errorifexp2.typeisnotassignmentcompaPblewithexp1.type
– Errorifexp1.kindisnotvar(can’tbeval)– IntuiPon:Verifythatle]handsideisassignable,andthattypesofle]andrighthandsidesarecompaPble.
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 58
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
Exampleintx;inty;intz;x=y+(1+2);
program
declList stmt(=)
exp
id(x)
exp
+
exp exp
id(y)+
…
INT(1) INT(2)
• program::=declListstmt• stmt.env=declList.env
• exp::=INTEGER_LITERAL• exp.kind=val• exp.type=int• exp.value=INTEGER_LITERAL
• exp::=id• type=exp.env.lookup(id)
• (erroriffails)• exp.type=id.type• exp.kind=var• exp.value=UNKSpring2017
4/8/17
31
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
Exampleintx;inty;intz;x=y+(1+2);
program
declList stmt(=)
exp
id(x)
exp
+
exp exp
id(y)+
…
INT(1) INT(2)
• program::=declListstmt• stmt.env=declList.env
• exp::=INTEGER_LITERAL• exp.kind=val• exp.type=int• exp.value=INTEGER_LITERAL
• exp::=id• type=exp.env.lookup(id)
• (erroriffails)• exp.type=id.type• exp.kind=var• exp.value=UNK
TypecheckywithdeclListenvKind:var,Value:UNK
Spring2017
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
Exampleintx;inty;intz;x=y+(1+2);
program
declList stmt(=)
exp
id(x)
exp
+
exp exp
id(y)+
…
INT(1) INT(2)
• program::=declListstmt• stmt.env=declList.env
• exp::=INTEGER_LITERAL• exp.kind=val• exp.type=int• exp.value=INTEGER_LITERAL
• exp::=id• type=exp.env.lookup(id)
• (erroriffails)• exp.type=id.type• exp.kind=var• exp.value=UNK
Type:int,Value:1,Kind:val
Type:int,Value:2,Kind:val
Spring2017
4/8/17
32
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
Exampleintx;inty;intz;x=y+(1+2);
program
declList stmt(=)
exp
id(x)
exp
+
exp exp
id(y)+
…
INT(1) INT(2)
• exp::=exp1+exp2• exp1.env=exp2.env=exp.env
• errorifexp1.type!=exp2.type(orifnotcompaPble)
• exp.type=exp1.type(orconvertedtype)
• exp.kind=val• exp.value=(exp1.value==
UNK||exp2.value==UNK)?UNK:exp1.value+exp2.value
Type:int,Value:3,Kind:val
Spring2017
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
Exampleintx;inty;intz;x=y+(1+2);
program
declList stmt(=)
exp
id(x)
exp
+
exp exp
id(y)+
…
INT(1) INT(2)
• exp::=exp1+exp2• exp1.env=exp2.env=exp.env
• errorifexp1.type!=exp2.type(orifnotcompaPble)
• exp.type=exp1.type(orconvertedtype)
• exp.kind=val• exp.value=(exp1.value==
UNK||exp2.value==UNK)?UNK:exp1.value+exp2.value
Type:int,Value:UNK,Kind:val
Spring2017
4/8/17
33
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
Exampleintx;inty;intz;x=y+(1+2);
program
declList stmt(=)
exp
id(x)
exp
+
exp exp
id(y)+
…
INT(1) INT(2)
• stmt::=exp1=exp2;• exp1.env=stmt.env• exp2.env=stmt.env• Errorifexp2.typeisnot
assignmentcompaPblewithexp1.type
• Errorifexp1.kindisnotvar(can’tbeval)
Type:int,Value:UNK,Kind:val
TypecheckxwithdeclListenvType:int,Kind:var
Spring2017
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
Exampleintx;inty;intz;x=y+(1+2);
program
declList stmt(=)
exp
id(x)
exp
+
exp exp
id(y)+
…
INT(1) INT(2)
• stmt::=exp1=exp2;• exp1.env=stmt.env• exp2.env=stmt.env• Errorifexp2.typeisnot
assignmentcompaPblewithexp1.type
• Errorifexp1.kindisnotvar(can’tbeval)
Type:int,Value:UNK,Kind:val
TypecheckxwithdeclListenvType:int,Kind:var
Passesbothchecks!
Spring2017
4/8/17
34
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
ObservaPons• TheseareequaPonal(funcPonal)computaPons• Thiscanbeautomated(ifequaPonsarenon-circular)• ButimplementaPonproblems
– Non-localcomputaPon:AyributeequaPonscanonlyrefertovaluesassociatedwithsymbolsthatappearinasingleproducPonrule.
• Ifyouneednon-localvalues,youneedtoaddspecialrulestothegrammartocopythemaround.Canmakegrammarverylarge.
– Can’taffordtoliterallypassaroundcopiesoflarge,aggregatestructureslikeenvironments.
– UseofproducPonrulesbindsayributestotheparsetreeratherthanthe(typicallysmaller,andmoreuseful)AST.Canworkaroundthis(use“ASTgrammar”),butresultsinmorecomplexayributerules.
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 66
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
InPracPce
• AyributegrammarsgiveusagoodwayofthinkingabouthowtostructuresemanPcchecks
• SymboltableswillholdenvironmentinformaPon• AddfieldstoASTnodestorefertoappropriateayributes(symboltableentriesforidenPfiers,typesforexpressions,etc.)– PutinappropriateplacesinASTclassinheritancetree–moststatementsdon’tneedtypes,forexample
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 67
4/8/17
35
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
SymbolTables• MapidenPfiersto<type,kind,locaPon,otherproperPes>
• OperaPons– Lookup(id)=>informaPon– Enter(id,informaPon)– Open/closescopes
• Build&useduringsemanPcspass– BuildfirstfromdeclaraPons– ThenusetochecksemanPcrules
• Use(andaddto)duringlaterphasesaswell
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 68
CodeGenera.on
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 69
4/8/17
36
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
BasicCodeGeneraPonStrategy
• WalktheASTorotherIR,outpu�ngcodeforeachconstructencountered
• Handlingofnode’schildrenisdependentontypeofnode– E.g.,forbinaryoperaPonlike+:
• Generatecodetocomputeoperand1(andstoreresult)• Generatecodetocomputeoperand2(andstoreresult)• Generatecodetoloadoperandresultsandaddthemtogether
• Todayisjustasamplingofbasicconstructs,togivebasicidea
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 70
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
ConvenPonsforExamples
• Thefollowingslideswillwalkthroughhowthisisdoneformanycommonlanguageconstructs
• ExamplesshowcodesnippetsinisolaPon• Registereaxusedbelowasagenericexample
– RenameasneededformorecomplexcodeusingmulPpleregisters
• Afewpeepholeop7miza7onsincludedbelowforaflavorofwhat’spossible– LocalizedopPmizaPonsperformedonsmallASMinstrucPonsequences.
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 71
4/8/17
37
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
Variables
• Forourpurposes,assumealldatawillbeineither:– Astackframe(methodlocalvariables)– Anobject(instancevariables)
• Localvariablesaccessedviaebp(stackbasepointer) moveax,[ebp-12]
• Objectinstancevariablesaccessedviaanobjectaddressinaregister
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 72
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CodeGeneraPonforConstants
• Source17
• x86moveax,17
– Idea:realizeconstantvalueinaregister
• OpPmizaPon:ifconstantis0 xoreax,eax
– Maybesmallerandfaster
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 73
4/8/17
38
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
AssignmentStatement
• Sourcevar=exp;
• x86<codetoevaluateexpinto,say,eax>mov[ebp+offsetvar],eax
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 74
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
UnaryMinus
• Source-exp
• x86<codeevaluaPngexpintoeax>negeax
• OpPmizaPon– Collapse-(-exp)toexp
• Unaryplusisano-op
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 75
4/8/17
39
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
Binary+
• Sourceexp1+exp2
• x86<codeevaluaPngexp1intoeax><codeevaluaPngexp2intoedx>addeax,edx
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 76
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
Binary+
• OpPmizaPons– Ifexp2isasimplevariableorconstant,don’tneedtoloaditintoanotherregisterfirst.Instead:
addeax,immConst;immisconstantaddeax,[ebp+offsetvar];offsetisvariable’sstackoffset
– Changeexp1+(-exp2)intoexp1-exp2– Ifexp2is1
inceax• Somewhatsurprising:whetherthisisbeyerthanaddeax,1dependsonprocessorimplementaPonandhaschangedoverPme
Spring2017 UWCSEP590(PMPProgrammingSystems):
Ringenburg 77
4/8/17
40
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
ControlFlow
• Basicidea:decomposehigherleveloperaPonintocondiPonalanduncondiPonalgotos
• Inthefollowing,jfalseisusedtomeanjumpwhenacondiPonisfalse– NosuchinstrucPononx86– CanrealizewithappropriatesequenceofinstrucPonstosetcondiPoncodesfollowedbycondiPonaljumps
– Normallydon’tactuallygeneratethevalue“true”or“false”inaregister
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 78
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
While
• Sourcewhile(cond)stmt
• X86test: <codeevaluaPngcond> jfalsedone <codeforstmt> jmptest
done:
– Note:Ingeneratedasmcodewe’llneedtogenerateuniquelabelsforeachloop
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 79
4/8/17
41
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
If
• Sourceif(cond)stmt
• x86 <codeevaluaPngcond> jfalseskip <codeforstmt>
skip:
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 80
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
BooleanExpressions
• Whatdowedowiththis?x>y
• Itisanexpressionthatevaluatestotrueorfalse– Couldgeneratethevalue(0/1orwhateverthelocalconvenPonis)
– Butnormallywedon’twant/needthevalue;we’reonlytryingtodecidewhethertojump
• OneexcepPon:assignmentexpressions,e.g.,while(my_bool=(x<y)){…}
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 81
4/8/17
42
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
Codeforexp1>exp2
• Generatedcodedependsoncontext– Whatisthejumptarget?– JumpifthecondiPonistrueoriffalse?
• Example:evaluateexp1>exp2,jumponfalse,targetifjumptakenisL123
<evaluateexp1toeax><evaluateexp2toedx>cmpeax,edxjngL123 ;greater-thantest,jumponfalse,sojng ;(jumpnotgreater)
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 82
Op.miza.onOverview
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 83
4/8/17
43
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
OpPmizaPons• UseaddedpassestoidenPfyinefficienciesinintermediate
ortargetcode• Replacewithequivalent(“hasthesameexternallyvisible
behavior”)butbeyersequences– Beyercanmeanmanythings:faster,smaller,lessmemory,moreenergy-efficient,etc.
• Target-independentopPmizaPonsbestdoneonIRcode– RemovingredundantcomputaPons,deadcode,etc.
• Target-dependentopPmizaPonsbestdoneontargetcode– GeneraPngsequencethataremoreefficientonaparPcularmachine
• “OpPmize”overlyopPmisPc:“usuallyimprove”isgenerallymoreaccurate– And“clever”programmerscanoutwityou!
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 84
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
Anexamplex = a[i] + b[2]; c[i] = x - 5;
t1 = *(fp + ioffset); // i t2 = t1 * 4; t3 = fp + t2; t4 = *(t3 + aoffset); // a[i] t5 = 2; t6 = t5 * 4; t7 = fp + t6; t8 = *(t7 + boffset); // b[2] t9 = t4 + t8; *(fp + xoffset) = t9; // x = … t10 = *(fp + xoffset); // x t11 = 5; t12 = t10 - t11; t13 = *(fp + ioffset); // i t14 = t13 * 4; t15 = fp + t14; *(t15 + coffset) = t12; // c[i] := …
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 85
4/8/17
44
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
Anexamplet1 = *(fp + ioffset); // i t2 = t1 << 2; t3 = fp + t2; t4 = *(t3 + aoffset); // a[i] t5 = 2; t6 = t5 << 2; t7 = fp + t6; t8 = *(t7 + boffset); // b[2] t9 = t4 + t8; *(fp + xoffset) = t9; // x = … t10 = *(fp + xoffset); // x t11 = 5; t12 = t10 - t11; t13 = *(fp + ioffset); // i t14 = t13 << 2; t15 = fp + t14; *(t15 + coffset) = t12; // c[i] := …
StrengthReducPon:shi]o]encheaperthanmulPply
x = a[i] + b[2]; c[i] = x - 5;
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 86
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
Anexamplet1 = *(fp + ioffset); // i t2 = t1 << 2; t3 = fp + t2; t4 = *(t3 + aoffset); // a[i] t5 = 2; t6 = 2 << 2; // was t5 << 2 t7 = fp + t6; t8 = *(t7 + boffset); // b[2] t9 = t4 + t8; *(fp + xoffset) = t9; // x = … t10 = *(fp + xoffset); // x t11 = 5; t12 = t10 – 5; // was t10 – t11 t13 = *(fp + ioffset); // i t14 = t13 << 2; t15 = fp + t14; *(t15 + coffset) = t12; // c[i] := …
ConstantpropagaPon:Replacevariableswithknownconstantvalue.
x = a[i] + b[2]; c[i] = x - 5;
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 87
4/8/17
45
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
Anexamplet1 = *(fp + ioffset); // i t2 = t1 << 2; t3 = fp + t2; t4 = *(t3 + aoffset); // a[i] t5 = 2; t6 = 2 << 2; t7 = fp + t6; t8 = *(t7 + boffset); // b[2] t9 = t4 + t8; *(fp + xoffset) = t9; // x = … t10 = *(fp + xoffset); // x t11 = 5; t12 = t10 – 5; t13 = *(fp + ioffset); // i t14 = t13 << 2; t15 = fp + t14; *(t15 + coffset) = t12; // c[i] := …
DeadStore(orDeadAssignment)EliminaPon:Removeassignementstoprovablyunusedvariables.
x = a[i] + b[2]; c[i] = x - 5;
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 88
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
Anexamplet1 = *(fp + ioffset); // i t2 = t1 << 2; t3 = fp + t2; t4 = *(t3 + aoffset); // a[i] t6 = 2 << 2; t7 = fp + t6; t8 = *(t7 + boffset); // b[2] t9 = t4 + t8; *(fp + xoffset) = t9; // x = … t10 = *(fp + xoffset); // x t12 = t10 – 5; t13 = *(fp + ioffset); // i t14 = t13 << 2; t15 = fp + t14; *(t15 + coffset) = t12; // c[i] := …
DeadStore(orDeadAssignment)EliminaPon:Removestorestoprovablyunusedvariables.
x = a[i] + b[2]; c[i] = x - 5;
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 89
4/8/17
46
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
Anexamplet1 = *(fp + ioffset); // i t2 = t1 << 2; t3 = fp + t2; t4 = *(t3 + aoffset); // a[i] t6 = 8; // was 2 << 2 t7 = fp + t6; t8 = *(t7 + boffset); // b[2] t9 = t4 + t8; *(fp + xoffset) = t9; // x = … t10 = *(fp + xoffset); // x t12 = t10 – 5; t13 = *(fp + ioffset); // i t14 = t13 << 2; t15 = fp + t14; *(t15 + coffset) = t12; // c[i] := …
ConstantFolding:StaPcallycomputeoperaPonswithonlyconstantoperands.
x = a[i] + b[2]; c[i] = x - 5;
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 90
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
Anexamplet1 = *(fp + ioffset); // i t2 = t1 << 2; t3 = fp + t2; t4 = *(t3 + aoffset); // a[i] t6 = 8; t7 = fp + 8; // was fp + t6 t8 = *(t7 + boffset); // b[2] t9 = t4 + t8; *(fp + xoffset) = t9; // x = … t10 = *(fp + xoffset); // x t12 = t10 – 5; t13 = *(fp + ioffset); // i t14 = t13 << 2; t15 = fp + t14; *(t15 + coffset) = t12; // c[i] := …
ConstantPropagaPon,thenDeadStoreEliminaPon
x = a[i] + b[2]; c[i] = x - 5;
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 91
4/8/17
47
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
Anexamplet1 = *(fp + ioffset); // i t2 = t1 << 2; t3 = fp + t2; t4 = *(t3 + aoffset); // a[i] t7 = fp + 8; t8 = *(t7 + boffset); // b[2] t9 = t4 + t8; *(fp + xoffset) = t9; // x = … t10 = *(fp + xoffset); // x t12 = t10 – 5; t13 = *(fp + ioffset); // i t14 = t13 << 2; t15 = fp + t14; *(t15 + coffset) = t12; // c[i] := …
ConstantPropagaPon,thenDeadStoreEliminaPon
x = a[i] + b[2]; c[i] = x - 5;
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 92
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
Anexamplet1 = *(fp + ioffset); // i t2 = t1 << 2; t3 = fp + t2; t4 = *(t3 + aoffset); // a[i] t7 = boffset + 8; t8 = *(t7 + fp); // b[2] t9 = t4 + t8; *(fp + xoffset) = t9; // x = … t10 = *(fp + xoffset); // x t12 = t10 – 5; t13 = *(fp + ioffset); // i t14 = t13 << 2; t15 = fp + t14; *(t15 + coffset) = t12; // c[i] := …
ApplyingarithmePcidenPPes:Weknow+iscommutaPve&associaPve.boffsetistypicallyaknowncompile-Pmeconstant(say,-30),sothisenables…
x = a[i] + b[2]; c[i] = x - 5;
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 93
4/8/17
48
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
Anexamplet1 = *(fp + ioffset); // i t2 = t1 << 2; t3 = fp + t2; t4 = *(t3 + aoffset); // a[i] t7 = -22; // was boffset(-30) + 8 t8 = *(t7 + fp); // b[2] t9 = t4 + t8; *(fp + xoffset) = t9; // x = … t10 = *(fp + xoffset); // x t12 = t10 – 5; t13 = *(fp + ioffset); // i t14 = t13 << 2; t15 = fp + t14; *(t15 + coffset) = t12; // c[i] := …
…moreconstantfolding.Whichinturnenables…
x = a[i] + b[2]; c[i] = x - 5;
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 94
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
Anexamplet1 = *(fp + ioffset); // i t2 = t1 << 2; t3 = fp + t2; t4 = *(t3 + aoffset); // a[i] t7 = -22; t8 = *(fp - 22); // b[2] (was t7+fp) t9 = t4 + t8; *(fp + xoffset) = t9; // x = … t10 = *(fp + xoffset); // x t12 = t10 – 5; t13 = *(fp + ioffset); // i t14 = t13 << 2; t15 = fp + t14; *(t15 + coffset) = t12; // c[i] := …
MoreconstantpropagaPonanddeadstoreeliminaPon.
x = a[i] + b[2]; c[i] = x - 5;
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 95
4/8/17
49
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
Anexamplet1 = *(fp + ioffset); // i t2 = t1 << 2; t3 = fp + t2; t4 = *(t3 + aoffset); // a[i] t8 = *(fp - 22); // b[2] t9 = t4 + t8; *(fp + xoffset) = t9; // x = … t10 = *(fp + xoffset); // x t12 = t10 – 5; t13 = *(fp + ioffset); // i t14 = t13 << 2; t15 = fp + t14; *(t15 + coffset) = t12; // c[i] := …
MoreconstantpropagaPonanddeadstoreeliminaPon.
x = a[i] + b[2]; c[i] = x - 5;
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 96
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
Anexamplet1 = *(fp + ioffset); // i t2 = t1 << 2; t3 = fp + t2; t4 = *(t3 + aoffset); // a[i] t8 = *(fp - 22); // b[2] t9 = t4 + t8; *(fp + xoffset) = t9; // x = … t10 = *(fp + xoffset); // x t12 = t10 – 5; t13 = t1; // i (was *(fp+ioffset)) t14 = t13 << 2; t15 = fp + t14; *(t15 + coffset) = t12; // c[i] := …
CommonsubexpressioneliminaPon:Noneedtocompute*(fp+ioffset)twiceifweknowitwon’tchange.
x = a[i] + b[2]; c[i] = x - 5;
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 97
4/8/17
50
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
Anexamplet1 = *(fp + ioffset); // i t2 = t1 << 2; t3 = fp + t2; t4 = *(t3 + aoffset); // a[i] t8 = *(fp - 22); // b[2] t9 = t4 + t8; *(fp + xoffset) = t9; // x = … t10 = t9; // x (was *(fp+xoffset)) t12 = t10 – 5; t13 = t1; // i t14 = t1 << 2; // was t13 << 2 t15 = fp + t14; *(t15 + coffset) = t12; // c[i] := …
CopypropagaPon:Replaceassignmenttargetswiththeirvalues.E.g.,replacet13witht1.
x = a[i] + b[2]; c[i] = x - 5;
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 98
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
Anexamplet1 = *(fp + ioffset); // i t2 = t1 << 2; t3 = fp + t2; t4 = *(t3 + aoffset); // a[i] t8 = *(fp - 22); // b[2] t9 = t4 + t8; *(fp + xoffset) = t9; // x = … t10 = t9; // x t12 = t9 – 5; // Was t10 - 5 t13 = t1; // i t14 = t1 << 2; t15 = fp + t14; *(t15 + coffset) = t12; // c[i] := …
MorecopypropagaPon
x = a[i] + b[2]; c[i] = x - 5;
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 99
4/8/17
51
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
Anexamplet1 = *(fp + ioffset); // i t2 = t1 << 2; t3 = fp + t2; t4 = *(t3 + aoffset); // a[i] t8 = *(fp - 22); // b[2] t9 = t4 + t8; *(fp + xoffset) = t9; // x = … t10 = t9; // x t12 = t9 – 5; t13 = t1; // i t14 = t2; // was t1 << 2 t15 = fp + t14; *(t15 + coffset) = t12; // c[i] := …
CommonsubexpressioneliminaPon.
x = a[i] + b[2]; c[i] = x - 5;
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 100
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
Anexamplet1 = *(fp + ioffset); // i t2 = t1 << 2; t3 = fp + t2; t4 = *(t3 + aoffset); // a[i] t8 = *(fp - 22); // b[2] t9 = t4 + t8; *(fp + xoffset) = t9; // x = … t10 = t9; // x t12 = t9 – 5; t13 = t1; // i t14 = t2; t15 = fp + t2; // was fp + t14 *(t15 + coffset) = t12; // c[i] := …
CopyPropagaPon
x = a[i] + b[2]; c[i] = x - 5;
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 101
4/8/17
52
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
Anexamplet1 = *(fp + ioffset); // i t2 = t1 << 2; t3 = fp + t2; t4 = *(t3 + aoffset); // a[i] t8 = *(fp - 22); // b[2] t9 = t4 + t8; *(fp + xoffset) = t9; // x = … t10 = t9; // x t12 = t9 – 5; t13 = t1; // i t14 = t2; t15 = fp + t2; *(t15 + coffset) = t12; // c[i] := …
DeadAssignmentEliminaPon
x = a[i] + b[2]; c[i] = x - 5;
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 102
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
Anexamplet1 = *(fp + ioffset); // i t2 = t1 << 2; t3 = fp + t2; t4 = *(t3 + aoffset); // a[i] t8 = *(fp - 22); // b[2] t9 = t4 + t8; *(fp + xoffset) = t9; // x = … t12 = t9 – 5; t15 = fp + t2; *(t15 + coffset) = t12; // c[i] := …
DeadAssignmentEliminaPon
x = a[i] + b[2]; c[i] = x - 5;
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 103
4/8/17
53
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
Anexamplet1 = *(fp + ioffset); // i t2 = t1 << 2; t3 = fp + t2; t4 = *(t3 + aoffset); // a[i] t8 = *(fp - 22); // b[2] t9 = t4 + t8; *(fp + xoffset) = t9; // x = … t12 = t9 – 5; t15 = fp + t2; *(t15 + coffset) = t12; // c[i] := …
• Final:3loads(i,a[i],b[2]),2stores(x,c[i]),5register-onlymoves,9+/-,1shi]• Original:5loads,2stores,10register-onlymoves,12+/-,3*
• (OpPmizertypicallydealsin“pseudo-registers”–canhaveasmanyasyouwant–andletsregisterallocatorfigureoutopPmalassignmentsofpseudo-registerstorealregisters.)
x = a[i] + b[2]; c[i] = x - 5;
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 104
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
KindsofOpPmizaPons• peephole:lookatadjacentinstrucPons• local:lookatindividualbasicblocks
– Straight-linesequenceofstatements• intraprocedural:lookatwholeprocedure
– Commonlycalled“global”• interprocedural:lookacrossprocedures
– “wholeprogram”analysis– gcc’s“linkPmeopPmizaPon”isaversionofthis
• Largerscope=>usuallybeyeropPmizaPonbutmorecostandcomplexity– Analysisiso]enlessprecisebecauseofmorepossibiliPes
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 105
4/8/17
54
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
PeepholeOpPmizaPon
• A]ertargetcodegeneraPon,lookatadjacentinstrucPons(a“peephole”onthecodestream)– trytoreplaceadjacentinstrucPonswithsomethingfaster,e.g.,storeandloadwithstoreandregistermove:
– JumpchainingcanalsobeconsideredaformofpeepholeopPmizaPon(removingjump-to-jump)
movq %r9,12(%rsp) movq 12(%rsp),%r12
movq %r9,12(%rsp) movq %r9,%r12
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 106
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
AlgebraicSimplificaPon• “constantfolding”:pre-calculateoperaPononconstant• “strengthreducPon”:replaceoperaPonwithacheaperoperaPon• “simplificaPon”:applyingalgebraicidenPPes
– z = 3 + 4; à z = 7; – z = x + 0; à z = x; – z = x * 1; à z = x; – z = x * 2; à z = x << 1; or z = x + x; – z = x * 8; à z = x << 3; – z = x / 8; à z = x >> 3; – z = (x + y) - y; à z = x;
• Canbedoneatmanylevels,frompeepholeonup.• Whydotheseexampleshappen?
– O]encreated:Conversiontolower-levelIR,OtheropPmizaPons,CodegeneraPon
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 107
4/8/17
55
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
Higher-levelExample:Loop-basedStrengthReducPon
• SomePmesmulPplicaPonbytheloopvariableinaloopcanbereplacedbyaddiPonsintoatemporaryaccumulator
• Similarly,exponenPaPoncanbereplacedbymulPplicaPon.
for(inti=0;i<size;i++){foo[i]=i;}
for(inti=0;i<size;i++){*(foo+i*elementSize)=i;}
t1=0;for(inti=0;i<size;i++){*(foo+t1)=i;t1=t1+8;}
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 108
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
LocalOpPmizaPons
• AnalysisandopPmizaPonswithinabasicblock• Basicblock:straight-linesequenceofstatements– nocontrolflowintooroutofmiddleofsequence
• NottoohardtoimplementwithareasonableIR
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 109
4/8/17
56
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
LocalConstantPropagaPon
• Ifvariableassignedaconstant,replacedownstreamusesofthevariablewithconstant(unPlvariableisnextassigned)
• Canenablemoreconstantfolding– Code;unopPmizedintermediatecode:
count = 10; ... // No count assigns x = count * 5; y = x ^ 3;
count = 10 t1 = count; t2 = 5; t3 = t1 * t2; x = t3; t4 = x; t5 = 3; t6 = exp(t4, t5); y = t6;
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 110
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
LocalConstantPropagaPon
count = 10; ... // No count assigns x = count * 5; y = x ^ 3;
count = 10 t1 = 10; // CP count t2 = 5; t3 = 10 * 5; // CP t1 x = t3; t4 = x; t5 = 3; t6 = exp(t4, 3); // CP t5 y = t6;
• Ifvariableassignedaconstant,replacedownstreamusesofthevariablewithconstant(unPlvariableisnextassigned)
• Canenablemoreconstantfolding– Code;propagatedintermediatecode:
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 111
4/8/17
57
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
LocalConstantPropagaPon
count = 10; ... // No count assigns x = count * 5; y = x ^ 3;
count = 10 t1 = 10; t2 = 5; t3 = 50; // CF 5 * 10 x = t3; t4 = x; t5 = 3; t6 = exp(t4, 3); y = t6;
• Ifvariableassignedaconstant,replacedownstreamusesofthevariablewithconstant(unPlvariableisnextassigned)
• Canenablemoreconstantfolding– Code;foldedintermediatecode:
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 112
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
LocalConstantPropagaPon
count = 10; ... // No count assigns x = count * 5; y = x ^ 3;
count = 10 t1 = 10; t2 = 5; t3 = 50; x = 50; // CP t3 t4 = 50; // CP x t5 = 3; t6 = exp(50, 3); // CP t4 y = t6;
• Ifvariableassignedaconstant,replacedownstreamusesofthevariablewithconstant(unPlvariableisnextassigned)
• Canenablemoreconstantfolding– Code;repropagatedintermediatecode:
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 113
4/8/17
58
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
LocalConstantPropagaPon
count = 10; ... // No count assigns x = count * 5; y = x ^ 3;
count = 10 t1 = 10; t2 = 5; t3 = 50; x = 50; t4 = 50; t5 = 3; t6 = 125000; // CF 50^3 y = t6;
• Ifvariableassignedaconstant,replacedownstreamusesofthevariablewithconstant(unPlvariableisnextassigned)
• Canenablemoreconstantfolding– Code;refoldedintermediatecode:
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 114
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
LocalConstantPropagaPon
count = 10; ... // No count assigns x = count * 5; y = x ^ 3;
count = 10 t1 = 10; t2 = 5; t3 = 50; x = 50; t4 = 50; t5 = 3; t6 = 125000; y = 125000; // CP t6
• Ifvariableassignedaconstant,replacedownstreamusesofthevariablewithconstant(unPlvariableisnextassigned)
• Canenablemoreconstantfolding– Code;repropagatedintermediatecode:
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 115
4/8/17
59
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
LocalDeadAssignmentEliminaPon
count = 10; ... // No count assigns x = count * 5; y = x ^ 3;
count = 10 t1 = 10; t2 = 5; t3 = 50; x = 50; t4 = 50; t5 = 3; t6 = 125000; y = 125000; // CP t6
• Ifle]sideofassignmentneverreferencedagainbeforebeingoverwriyen,thencandeleteassignment– Whywouldthishappen?– Clean-upa]erpreviousopPmizaPons,o]en
• Intermediatecodea]erconstantpropagaPon:
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 116
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
LocalDeadAssignmentEliminaPon
count = 10; ... // No count assigns x = count * 5; y = x ^ 3;
count = 10 t1 = 10; t2 = 5; t3 = 50; x = 50; t4 = 50; t5 = 3; t6 = 125000; y = 125000; // CP t6
• Ifle]sideofassignmentneverreferencedagainbeforebeingoverwriyen,thencandeleteassignment– Whywouldthishappen?– Clean-upa]erpreviousopPmizaPons,o]en
• Intermediatecodea]erconstantpropagaPon:
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 117
4/8/17
60
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
LocalCommonSubexpressionEliminaPon
• LooksforrepePPonsofthesamecomputaPon,andeliminatethemiftheresultwon’thavechanged(andnosideeffects)– AvoidsrepeaPngthesamecalculaPon– Eliminatesredundantloads
• Idea:walkbasicblock,keepingtrackofavailableexpressions ... a[i] + b[i] ...
t1 = *(fp + ioffset); t2 = t1 * 4; t3 = fp + t2; t4 = *(t3 + aoffset); t5 = *(fp + ioffset); t6 = t5 * 4; t7 = fp + t6; t8 = *(t7 + boffset); t9 = t4 + t8;
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 118
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
LocalCommonSubexpressionEliminaPon
... a[i] + b[i] ...
t1 = *(fp + ioffset); t2 = t1 * 4; t3 = fp + t2; t4 = *(t3 + aoffset); t5 = t1; // CSE t6 = t5 * 4; t7 = fp + t6; t8 = *(t7 + boffset); t9 = t4 + t8;
• LooksforrepiPPonsofthesamecomputaPon,andeliminatethemiftheresultwon’thavechanged(andnosideeffects)– AvoidsrepeaPngthesamecalculaPon– Eliminatesredundantloads
• Idea:walkbasicblock,keepingtrackofavailableexpressions
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 119
4/8/17
61
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
LocalCommonSubexpressionEliminaPon
... a[i] + b[i] ...
t1 = *(fp + ioffset); t2 = t1 * 4; t3 = fp + t2; t4 = *(t3 + aoffset); t5 = t1; t6 = t1 * 4; // CP t7 = fp + t6; t8 = *(t7 + boffset); t9 = t4 + t8;
• LooksforrepiPPonsofthesamecomputaPon,andeliminatethemiftheresultwon’thavechanged(andnosideeffects)– AvoidsrepeaPngthesamecalculaPon– Eliminatesredundantloads
• Idea:walkbasicblock,keepingtrackofavailableexpressions
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 120
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
LocalCommonSubexpressionEliminaPon
... a[i] + b[i] ...
t1 = *(fp + ioffset); t2 = t1 * 4; t3 = fp + t2; t4 = *(t3 + aoffset); t5 = t1; t6 = t2; // CSE t7 = fp + t2; // CP t8 = *(t7 + boffset); t9 = t4 + t8;
• LooksforrepiPPonsofthesamecomputaPon,andeliminatethemiftheresultwon’thavechanged(andnosideeffects)– AvoidsrepeaPngthesamecalculaPon– Eliminatesredundantloads
• Idea:walkbasicblock,keepingtrackofavailableexpressions
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 121
4/8/17
62
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
LocalCommonSubexpressionEliminaPon
... a[i] + b[i] ...
t1 = *(fp + ioffset); t2 = t1 * 4; t3 = fp + t2; t4 = *(t3 + aoffset); t5 = t1; t6 = t2; t7 = t3; // CSE t8 = *(t3 + boffset);//CP t9 = t4 + t8;
• LooksforrepiPPonsofthesamecomputaPon,andeliminatethemiftheresultwon’thavechanged(andnosideeffects)– AvoidsrepeaPngthesamecalculaPon– Eliminatesredundantloads
• Idea:walkbasicblock,keepingtrackofavailableexpressions
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 122
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
LocalCommonSubexpressionEliminaPon
... a[i] + b[i] ...
t1 = *(fp + ioffset); t2 = t1 * 4; t3 = fp + t2; t4 = *(t3 + aoffset); t5 = t1; // DAE t6 = t2; // DAE t7 = t3; // DAE t8 = *(t3 + boffset); t9 = t4 + t8;
• LooksforrepiPPonsofthesamecomputaPon,andeliminatethemiftheresultwon’thavechanged(andnosideeffects)– AvoidsrepeaPngthesamecalculaPon– Eliminatesredundantloads
• Idea:walkbasicblock,keepingtrackofavailableexpressions
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 123
4/8/17
63
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
IntraproceduralopPmizaPons
• Enlargescopeofanalysistowholeprocedure– moreopportuniPesforopPmizaPon– havetodealwithbranches,merges,andloops
• CandoconstantpropagaPon,commonsubexpressioneliminaPon,etc.atfuncPon-widelevel
• Candonewthings,e.g.loopopPmizaPons• OpPmizingcompilersusuallyworkatthislevel(-O2)
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 124
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CodeMoPon• Goal:moveloop-invariantcalculaPonsoutofloops• Candoatsourceleveloratintermediatecodelevel
for (i = 0; i < 10; i = i+1) { a[i] = a[i] + b[j]; z = z + (foo*bar)^2; }
t1 = b[j]; t2 = (foo*bar)^2; for (i = 0; i < 10; i = i+1) { a[i] = a[i] + t1; z = z + t2; }
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 125
4/8/17
64
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
InterproceduralOpPmizaPon
• Expandscopeofanalysistoprocedurescallingeachother
• Candolocal&intraproceduralopPmizaPonsatlargerscope
• CandonewopPmizaPons,e.g.inlining
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 126
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
Inlining:replacecallwithbody
• Replaceprocedurecallwithbodyofcalledprocedure,andsubsPtuPngactualargumentsforformalparameters
• Source:final double pi = 3.1415927; double circle_area(double radius) { return pi * (radius * radius); } ... double r = 5.0; ... double a = circle_area(r);
• A]erinlining: double r = 5.0; ... double a = pi * r * r;
• (Thenwhat?ConstantpropagaPon/folding.)
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 127
4/8/17
65
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
DataStructuresforOpPmizaPons
• Needtorepresentcontrolanddataflow• Controlflowgraph(CFG)capturesflowofcontrol
– nodesarebasicblocks– edgesrepresent(allpossible)controlflow– nodewithmulPplesuccessors=branch/switch– nodewithmulPplepredecessors=mergeorjoinpoint– loopingraph=loop
• Dataflowgraph(DFG)captureflowofdata,e.g.def/usechains:– nodesaredef(iniPon)sandusesofdata/variables– edgesfromdefstousesof(potenPally)thesamedata– adefcanreachmulPpleuses– ausecanhavemulPplereachingdefs(differentcontrolflow,possiblealiasing,etc.)
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 128
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
AnalysisandTransformaPon
• EachopPmizaPonismadeupof– somenumberofanalyses– followedbyatransformaPon
• AnalyzeCFGand/orDFGbypropagaPnginfoforwardorbackwardalongCFGand/orDFGedges– mergesingraphrequirecombininginfo– loopsingraphrequire(conservaPve)itera7veapproxima7on
• Perform(improving)transformaPonsbasedoninfocomputed• AnalysismustbeconservaPve/safe/soundsothat
transformaPonspreserveprogrambehavior
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 129
4/8/17
66
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
Example:ConstantPropagaPon,Folding
• CanuseeithertheCFGortheDFG• CFGanalysisinfo:tablemappingeachvariableinscopetooneof:
– aparPcularconstant– NonConstant– Undefined
• TransformaPonateachinstrucPon:– Ifencounteranassignmentofaconstanttoavariable,setvariableas
constant– ifreferenceavariablethatthetablemapstoaconstant,thenreplace
withthatconstant(constantpropagaPon)– ifr.h.s.expressioninvolvesonlyconstants,andhasnoside-effects,then
performoperaPonatcompile-Pmeandreplacer.h.s.withconstantresult(constantfolding)
• Forbestanalysis,doconstantfoldingaspartofanalysis,tolearnallconstantsinonepass
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 130
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
Mergingdataflowanalysisinfo
• Constraint:mergeresultsmustbesound– ifsomethingisbelievedtruea]erthemerge,thenitmustbetruenomayerwhichpathwetookintothemerge
– onlythingstruealongallpredecessorsaretruea]erthemerge
• TomergetwomapsofconstantinformaPon,buildmapbymergingcorrespondingvariableinformaPon
• TomergeinformaPonabouttwovariable– ifoneisUndefined,keeptheother(uniniPalizedvariablesinmanylanguagesallowedtohaveanyvalue)
– ifbotharethesameconstant,keepthatconstant– otherwise,degeneratetoNonConstant
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 131
4/8/17
67
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
ExampleMerges
A {x:5}
D {x:6}
// Block Aint x;x = 5;if (foo) { // Block B x++;} else { // Block C x=6;}// Block D…
C {x:6} B {x:6}
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 132
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
ExampleMerges
A {x:Undefined}
D {x:5}
// Block Aint x;if (foo) { // Block B z++; x = 5;} else { // Block C z--; x = 5;}// Block D…
C {x:5} B {x:5}
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 133
4/8/17
68
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
ExampleMerges
A {x:Undefined}
D {x:NonConstant}
// Block Aint x;if (foo) { // Block B z++; x = 5;} else { // Block C z--; x = 4;}// Block D…
C {x:4} B {x:5}
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 134
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
ExampleMerges
A {x:Undefined}
D {x:4}
// Block Aint x;if (foo) { // Block B z++;} else { // Block C z--; x = 4;}// Block D…
C {x:4} B {x:Undefined}
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 135
4/8/17
69
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
Howtoanalyzeloopsi = 0; x = 10; y = 20; while (...) { // what’s true here? ... i = i + 1; y = 30; } // what’s true here? ... x ... i ... y ...
• Safebutimprecise:forgeteverythingwhenweenterorexitaloop
• Precisebutunsafe:keepeverythingwhenweenterorexitaloop
• Canwedobeyer?
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 136
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
LoopTerminology
preheader
entry edge
head
back edge
tail
loop
exit edge
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 137
4/8/17
70
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
OpPmisPcIteraPveAnalysis
• AssuminginformaPonatloopheadissameasinformaPonatloopentry
• Thenanalyzeloopbody,compuPnginformaPonatbackedge
• MergeinformaPonatloopbackedgeandloopentry• TestifmergedinformaPonissameasoriginalassumpPon– Ifso,thenwe’redone– Ifnot,thenreplacepreviousassumpPonwithmergedinformaPon,
– andgobacktoanalysisofloopbody
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 138
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
Examplei = 0; x = 10; y = 20; while (...) { // what’s true here? ... i = i + 1; y = 30; } // what’s true here? ... x ... i ... y ...
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 139
4/8/17
71
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
Examplei = 0; x = 10; y = 20; while (...) { // what’s true here? ... i = i + 1; y = 30; } // what’s true here? ... x ... i ... y ...
i=0,x=10,y=20
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 140
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
Examplei = 0; x = 10; y = 20; while (...) { // what’s true here? ... i = i + 1; y = 30; } // what’s true here? ... x ... i ... y ...
i=0,x=10,y=20
i=1,x=10,y=30
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 141
4/8/17
72
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
Examplei = 0; x = 10; y = 20; while (...) { // what’s true here? ... i = i + 1; y = 30; } // what’s true here? ... x ... i ... y ...
i=NC,x=10,y=NC
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 142
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
Examplei = 0; x = 10; y = 20; while (...) { // what’s true here? ... i = i + 1; y = 30; } // what’s true here? ... x ... i ... y ...
i=NC,x=10,y=NC
i=NC,x=10,y=NC
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 143
4/8/17
73
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
Examplei = 0; x = 10; y = 20; while (...) { // what’s true here? ... i = i + 1; y = 30; } // what’s true here? ... x ... i ... y ...
i=NC,x=10,y=NC
i=NC,x=10,y=NC
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 144
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
Whydoesthiswork?
• WhyaretheresultsalwaysconservaPve?• Becauseifthealgorithmstops,then
– theloopheadinfoisatleastasconservaPveasboththeloopentryinfoandtheloopbackedgeinfo
– theanalysiswithintheloopbodyisconservaPve,giventheassumpPonthattheloopheadinfoisconservaPve
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 145
4/8/17
74
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
OpPmizaPonSummary
• OpPmizaPonsorganizedascollecPonsofpasses,eachrewriPngILinplaceinto(hopefully)beyerversion
• Eachpassdoesanalysistodeterminewhatispossible,followedby(orconcurrentwith)transformaPonsthat(hopefully)improvetheprogram– SomePmeshave“analysis-only”passes–produceinfousedbylaterpasses
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 146
DataflowAnalysis(ifwehaveextra.meandenergy!)
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 147
4/8/17
75
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
Nexttopic:DataflowAnalysis
• Aframeworkandalgorithmformanycommoncompileranalyses
• IniPalexample:dataflowanalysisforcommonsubexpressioneliminaPon
• Otheranalysisproblemsthatworkinthesameframework
• We’llbediscussingsomeofthesameopPmizaPonswesawintheopPmizaPonoverview,butwithmoreformalismanddetails.
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 148
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
MoPvaPngExample:CommonSubexpressionEliminaPon(CSE)
m = a + b n = a + b
A
p = c + d r = c + d
B q = a + b r = c + d
C
e = b + 18 s = a + b u = e + f
D e = a + 17 t = c + d u = e + f
E
v = a + b w = c + d x = e + f
F
y = a + b z = c + d
G
• Goal:Findcommonsubexpressions,replacewithtemporaries
• Idea:calculateavailableexpressionsatbeginningofeachbasicblock
• Avoidre-evaluaPonofanavailableexpression–copyatempinstead– Simpleinsideasingleblock;
morecomplexdataflowanalysisusedacrossbocks
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 149
4/8/17
76
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
“Available”andOtherTerms
• AnexpressioneisdefinedatpointpintheCFG(controlflowgraph)ifitsvalueiscomputedatp– SomePmescalleddefini7onsite
• Anexpressioneiskilledatpointpifoneofitsoperands(components)isredefinedatp– SomePmescalledkillsite
• AnexpressioneisavailableatpointpifeverypathleadingtopcontainsapriordefiniPonofeandeisnotkilledbetweenthatdefiniPonandp
t1=a+b…
t10=a+b…
b=7…
a+bdefined
a+bavailable
a+bkilled
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 150
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
AvailableExpressionSets
• Tocomputeavailableexpressions,foreachblockb,define– AVAIL(b)–thesetofexpressionsavailableonentrytob
– NKILL(b)–thesetofexpressionsnotkilledinb– DEF(b)–thesetofexpressionsdefinedinbandnotsubsequentlykilledinb
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 151
4/8/17
77
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CompuPngAvailableExpressions
• AVAIL(b)(expressionsavailableonentrytob)istheset
AVAIL(b)=∩x∈preds(b)(DEF(x)∪(AVAIL(x)∩NKILL(x)))
– preds(b)isthesetofb’sdirectpredecessorsintheCFG– In“english”,theexpressionsavailableonentrytobaretheexpressionsthatwereavailableattheendofeverydirectlyprecedingbasicblockx.(Thisisthe∩x∈preds(b))
– Theexpressionsavailableattheendofblockxareexactlythosethatweredefinedinx(andnotkilled),andthosethatwereavailableatthebeginningofxandnotkilledinx.
• ApplyingtoeveryblockgivesasystemofsimultaneousequaPons–adataflowproblem
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 152
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CompuPngAvailableExpressions
• BigPicture– Buildcontrol-flowgraph– CalculateiniPallocaldata–DEF(b)andNKILL(b)foreveryblockb
• Thisonlyneedstobedoneonce– IteraPvelycalculateAVAIL(b)byrepeatedlyevaluaPngequaPonsunPlnothingchanges
• Afixed-pointalgorithm
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 153
4/8/17
78
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CompuPngDEFandNKILL(1)
• ForeachblockbwithoperaPonso1,o2,…,ok
KILLED=∅//Killedvariables(notexpressions)DEF(b)=∅fori=kto1//Noteweareworkingbackwards-importantassumeoiis“x=y+z” if(y∉KILLEDandz∉KILLED) //ExpressioninDEFonlyif add“y+z”toDEF(b) //theyaren’tlaterkilledaddxtoKILLED
…
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 154
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
Example:CompuPngDEFandKILL
x=a+b;b=c+d;m=5*n;
DEF={}KILL={}
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 155
4/8/17
79
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
Example:CompuPngDEFandKILL
x=a+b;b=c+d;m=5*n;
DEF={5*n}KILL={m}
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 156
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
Example:CompuPngDEFandKILL
x=a+b;b=c+d;m=5*n;
DEF={5*n,c+d}KILL={m,b}
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 157
4/8/17
80
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
Example:CompuPngDEFandKILL
x=a+b;b=c+d;m=5*n;
DEF={5*n,c+d}KILL={m,b,x}(biskilled,sodon’tadda+btoDEF)
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 158
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CompuPngDEFandNKILL(2)
• A]ercompuPngDEFandKILLforablockb,conceptuallywedothefollowing:
//NKILLisexpressionsnotkilled.NKILL(b)={allexpressionsinprogram}foreachexpressione//Removeanykilledforeachvariablev∈eifv∈KILLthen NKILL(b)=NKILL(b)-e
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 159
4/8/17
81
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
Example:CompuPngDEFandNKILL
x=a+b;b=c+d;m=5*n;
DEF={5*n,c+d}KILL={m,b,x}NKILL=allexpressionsthatdon’tusem,b,orx
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 160
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CompuPngAvailableExpressions
• OnceDEF(b)andNKILL(b)arecomputedforallblocksb,computeAVAILforallblocksbyrepeatedlyapplyingthepreviousformulainafixed-pointalgorithm:
Worklist={allblocksbi}while(Worklist≠∅)removeablockbfromWorklist//IfbinWorklist,atleast1predecessorchangedletAVAIL(b)=∩x∈preds(b)(DEF(x)∪(AVAIL(x)∩NKILL(x)))ifAVAIL(b)changedWorklist=Worklist∪successors(b)
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 161
4/8/17
82
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
Example:CompuPngDEFandNKILL
x=a+b;b=c+d;m=5*n;
DEF={5*n,c+d}NKILL=exprsw/om,b,orx
c=5*n DEF={5*n}NKILL=exprsw/oc
j=2*ak=2*b
DEF={2*a,2*b}NKILL=exprsw/ojork
h=2*a DEF={2*a}NKILL=exprsw/oh=inWorklist
=Processing
AVAIL(b)=∩x∈preds(b)(DEF(x)∪(AVAIL(x)∩NKILL(x)))
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 162
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
Example:CompuPngDEFandNKILL
x=a+b;b=c+d;m=5*n;
DEF={5*n,c+d}NKILL=exprsw/om,b,orx
c=5*n DEF={5*n}NKILL=exprsw/oc
j=2*ak=2*b
AVAIL={}DEF={2*a,2*b}NKILL=exprsw/ojork
h=2*a DEF={2*a}NKILL=exprsw/oh=inWorklist
=Processing
AVAIL(b)=∩x∈preds(b)(DEF(x)∪(AVAIL(x)∩NKILL(x)))
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 163
4/8/17
83
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
Example:CompuPngDEFandNKILL
x=a+b;b=c+d;m=5*n;
DEF={5*n,c+d}NKILL=exprsw/om,b,orx
c=5*n DEF={5*n}NKILL=exprsw/oc
j=2*ak=2*b
AVAIL={}DEF={2*a,2*b}NKILL=exprsw/ojork
h=2*a AVAIL={5*n}DEF={2*a}NKILL=exprsw/oh
=inWorklist
=Processing
AVAIL(b)=∩x∈preds(b)(DEF(x)∪(AVAIL(x)∩NKILL(x)))
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 164
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
Example:CompuPngDEFandNKILL
x=a+b;b=c+d;m=5*n;
AVAIL={2*a,2*b}DEF={5*n,c+d}NKILL=exprsw/om,b,orx
c=5*n DEF={5*n}NKILL=exprsw/oc
j=2*ak=2*b
AVAIL={}DEF={2*a,2*b}NKILL=exprsw/ojork
h=2*a AVAIL={5*n}DEF={2*a}NKILL=exprsw/oh
=inWorklist
=Processing
AVAIL(b)=∩x∈preds(b)(DEF(x)∪(AVAIL(x)∩NKILL(x)))
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 165
4/8/17
84
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
Example:CompuPngDEFandNKILL
x=a+b;b=c+d;m=5*n;
AVAIL={2*a,2*b}DEF={5*n,c+d}NKILL=exprsw/om,b,orx
c=5*n AVAIL={2*a,2*b}DEF={5*n}NKILL=exprsw/oc
j=2*ak=2*b
AVAIL={}DEF={2*a,2*b}NKILL=exprsw/ojork
h=2*a AVAIL={5*n}DEF={2*a}NKILL=exprsw/oh
=inWorklist
=Processing
AVAIL(b)=∩x∈preds(b)(DEF(x)∪(AVAIL(x)∩NKILL(x)))
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 166
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
Example:CompuPngDEFandNKILL
x=a+b;b=c+d;m=5*n;
AVAIL={2*a,2*b}DEF={5*n,c+d}NKILL=exprsw/om,b,orx
c=5*n AVAIL={2*a,2*b}DEF={5*n}NKILL=exprsw/oc
j=2*ak=2*b
AVAIL={}DEF={2*a,2*b}NKILL=exprsw/ojork
h=2*a AVAIL={5*n,2*a}DEF={2*a}NKILL=exprsw/oh
=inWorklist
=Processing
AVAIL(b)=∩x∈preds(b)(DEF(x)∪(AVAIL(x)∩NKILL(x)))
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 167
4/8/17
85
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
Example:CompuPngDEFandNKILL
x=a+b;b=c+d;m=5*n;
AVAIL={2*a,2*b}DEF={5*n,c+d}NKILL=exprsw/om,b,orx
c=5*n AVAIL={2*a,2*b}DEF={5*n}NKILL=exprsw/oc
j=2*ak=2*b
AVAIL={}DEF={2*a,2*b}NKILL=exprsw/ojork
h=2*a AVAIL={5*n,2*a}DEF={2*a}NKILL=exprsw/oh
=inWorklist
=Processing
AVAIL(b)=∩x∈preds(b)(DEF(x)∪(AVAIL(x)∩NKILL(x)))
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 168
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
Dataflowanalysis
• Availableexpressionsareanexampleofadataflowanalysisproblem
• Manyothercompileranalysescanbeexpressedinasimilarframework
• Onlythefirstpartofthestory–oncewe’vediscoveredfacts,wethenneedtousethemtoimprovecode
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 169
4/8/17
86
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CharacterizingDataflowAnalysis
• Allofthesealgorithmsinvolvesetsoffactsabouteachbasicblockb– IN(b)–factstrueonentrytob– OUT(b)–factstrueonexitfromb– GEN(b)–factscreatedandnotkilledinb– KILL(b)–factskilledinb
• ThesearerelatedbytheequaPon OUT(b)=GEN(b)∪(IN(b)–KILL(b))
– (SubtracPngKILL(b)isequivalenttointersecPngNKILL(b))– SolvethisiteraPvelyforallblocks– SomePmesinformaPonpropagatesforward;somePmesbackward(reverseinandout)
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 170
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
Example:LiveVariableAnalysis
• Avariablevisliveatpointpifandonlyifthereisanypathfromptoauseofvalongwhichvisnotredefined(i.e.,vmightbeusedbeforeitisredefined)
• Someuses:– RegisterallocaPon–registersallocatedtoliveranges– EliminaPnguselessstores–ifvariableisnotliveatstore,thestoredvaluewillneverbeused
– DetecPngusesofuniniPalizedvariables–ifliveatdeclaraPon(beforeiniPalizaPon),maybeuseduniniPalized.
– ImproveSSAconstrucPon–onlycreatephifuncPons(variablemerges)forlivevariables-cominglater…
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 171
4/8/17
87
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
LivenessAnalysisSets
• Foreachblockb,define– use[b]=variableusedinbbeforeanydef– def[b]=variabledefinedinbbeforeanyuse– in[b]=variablesliveonentrytob– out[b]=variablesliveonexitfromb
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 172
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
CSE341: Programming Languages
Lecture 1 Course Mechanics
ML Variable Bindings
Dan Grossman Fall 2011
EquaPonsforLiveVariables
• GiventheprecedingdefiniPons,wehavein[b]=use[b]∪(out[b]–def[b])out[b]=∪s∈succ[b]in[s]
• I.e.,liveatentryiffthisblocksgeneratesliveness(use[b])oritwasliveattheexitandthisblockdoesnotkillliveness(out[b]–def[b]).
• Andliveatexitiffliveatentrytoanysuccessor.• Algorithm
– Setin[b]=out[b]=∅– Computeuse[b]anddef[b]foreveryblock(onePme)– Updatein,outunPlnochange
Spring2017 UWCSEP590(PMPProgrammingSystems):Ringenburg 173