Global Optimization - Stanford University · Global Dead Code Elimination Local dead code...
Transcript of Global Optimization - Stanford University · Global Dead Code Elimination Local dead code...
![Page 1: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/1.jpg)
Global Optimization
![Page 2: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/2.jpg)
Announcements
● Programming Project 3 due tonight at 11:59PM.● Feel free to stop by office hours with questions!● Feel free to email the staff list or ask questions on
Piazza!● This is the last assignment on which you can use
late days.
● Programming Project 4 out, due Saturday, August 18th at 11:30AM.● No late submissions; this is the latest possible
time we can make the assignment due.
![Page 3: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/3.jpg)
Where We Are
Lexical Analysis
Semantic Analysis
Syntax Analysis
IR Optimization
IR Generation
Code Generation
Optimization
SourceCode
MachineCode
![Page 4: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/4.jpg)
Review of Local Optimization
![Page 5: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/5.jpg)
Review from Last Time
● A basic block is a series of IR instructions where● there is one entry point into the basic block, and● there is one exit point out of the basic block.
● Intuitively, a block of IR instructions that all must execute as a unit.
● A control-flow graph (CFG) is a graph of the basic blocks of a function.
● Each edge in a CFG corresponds to a possible flow of control through the program.
![Page 6: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/6.jpg)
Review from Last Time
● A local optimization is an optimization of IR instructions within a single basic block.
● We saw five examples of this:● Common subexpression elimination.● Copy propagation.● Dead code elimination.● Arithmetic simplification.● Constant folding.
![Page 7: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/7.jpg)
Review from Last Time
● Last time, we defined two analyses used in our optimizations.
● Available expressions: Track what variables are assigned which expressions.● Compute by walking forward across the values
in a basic block.
● Live variables: Track what variables will eventually be used.● Compute by walking backward across the
values in a basic block.
![Page 8: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/8.jpg)
Available Expressions
a = b;
c = b;
d = a + b;
e = a + b;
d = b;
f = a + b;
![Page 9: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/9.jpg)
Available Expressions
{ }a = b;
c = b;
d = a + b;
e = a + b;
d = b;
f = a + b;
![Page 10: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/10.jpg)
Available Expressions
{ }a = b;
{ a = b }c = b;
d = a + b;
e = a + b;
d = b;
f = a + b;
![Page 11: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/11.jpg)
Available Expressions
{ }a = b;
{ a = b }c = b;
{ a = b, c = b }d = a + b;
e = a + b;
d = b;
f = a + b;
![Page 12: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/12.jpg)
Available Expressions
{ }a = b;
{ a = b }c = b;
{ a = b, c = b }d = a + b;
{ a = b, c = b, d = a + b }e = a + b;
d = b;
f = a + b;
![Page 13: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/13.jpg)
Available Expressions
{ }a = b;
{ a = b }c = b;
{ a = b, c = b }d = a + b;
{ a = b, c = b, d = a + b }e = a + b;
{ a = b, c = b, d = a + b, e = a + b }d = b;
f = a + b;
![Page 14: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/14.jpg)
Available Expressions
{ }a = b;
{ a = b }c = b;
{ a = b, c = b }d = a + b;
{ a = b, c = b, d = a + b }e = a + b;
{ a = b, c = b, d = a + b, e = a + b }d = b;
{ a = b, c = b, d = b, e = a + b }f = a + b;
![Page 15: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/15.jpg)
Available Expressions
{ }a = b;
{ a = b }c = b;
{ a = b, c = b }d = a + b;
{ a = b, c = b, d = a + b }e = a + b;
{ a = b, c = b, d = a + b, e = a + b }d = b;
{ a = b, c = b, d = b, e = a + b }f = a + b;
{ a = b, c = b, d = b, e = a + b, f = a + b }
![Page 16: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/16.jpg)
Another View of Local Analyses
![Page 17: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/17.jpg)
Another View of Local Analyses
Vin
![Page 18: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/18.jpg)
Another View of Local Analyses
a = b + c
Vin
![Page 19: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/19.jpg)
Another View of Local Analyses
a = b + c
Vin
Vout
![Page 20: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/20.jpg)
Another View of Local Analyses
a = b + c
Vin
Vout
Vout = fa = b+c(Vin)
![Page 21: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/21.jpg)
Another View of Local Optimization
● In local optimization, we want to reason about some property of the runtime behavior of the program.
● Could we run the program and just watch what happens?
● Idea: Redefine the semantics of our programming language to give us information about our analysis.
![Page 22: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/22.jpg)
Properties of Local Analysis
● The only way to find out what a program will actually do is to run it.
● Problems:● The program might not terminate.● The program might have some behavior we didn't
see when we ran it on a particular input.
● However, this is not a problem inside a basic block.● Basic blocks contain no loops.● There is only one path through the basic block.
![Page 23: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/23.jpg)
Assigning New Semantics
● Example: Available Expressions● Redefine the statement a = b + c to
mean “a now holds the value of b + c, and any variable holding the value a is now invalid.”
● Run the program assuming these new semantics.
● Treat the optimizer as an interpreter for these new semantics.
![Page 24: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/24.jpg)
Information for a Local Analysis
● What direction are we going?● Sometimes forward (available expressions)● Sometimes backward (liveness analysis)
● How do we update information after processing a statement?● What are the new semantics?
● What information do we know initially?
![Page 25: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/25.jpg)
Formalizing Local Analyses
● Define an analysis of a basic block as a quadruple (D, V, F, I) where● D is a direction (forwards or backwards)● V is a set of values the program can have at
any point.● F is a family of transfer functions defining
the meaning of any expression as a functionf : V → V.
● I is the initial information at the top (or bottom) of a basic block.
![Page 26: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/26.jpg)
Available Expressions
a = b;
c = b;
d = a + b;
e = a + b;
d = b;
f = a + b;
![Page 27: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/27.jpg)
Available Expressions
{ }a = b;
c = b;
d = a + b;
e = a + b;
d = b;
f = a + b;
![Page 28: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/28.jpg)
Available Expressions
{ }a = b;
{ a = b }c = b;
d = a + b;
e = a + b;
d = b;
f = a + b;
![Page 29: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/29.jpg)
Available Expressions
{ }a = b;
{ a = b }c = b;
{ a = b, c = b }d = a + b;
e = a + b;
d = b;
f = a + b;
![Page 30: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/30.jpg)
Available Expressions
{ }a = b;
{ a = b }c = b;
{ a = b, c = b }d = a + b;
{ a = b, c = b, d = a + b }e = a + b;
d = b;
f = a + b;
![Page 31: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/31.jpg)
Available Expressions
{ }a = b;
{ a = b }c = b;
{ a = b, c = b }d = a + b;
{ a = b, c = b, d = a + b }e = a + b;
{ a = b, c = b, d = a + b, e = a + b }d = b;
f = a + b;
![Page 32: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/32.jpg)
Available Expressions
{ }a = b;
{ a = b }c = b;
{ a = b, c = b }d = a + b;
{ a = b, c = b, d = a + b }e = a + b;
{ a = b, c = b, d = a + b, e = a + b }d = b;
{ a = b, c = b, d = b, e = a + b }f = a + b;
![Page 33: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/33.jpg)
Available Expressions
{ }a = b;
{ a = b }c = b;
{ a = b, c = b }d = a + b;
{ a = b, c = b, d = a + b }e = a + b;
{ a = b, c = b, d = a + b, e = a + b }d = b;
{ a = b, c = b, d = b, e = a + b }f = a + b;
{ a = b, c = b, d = b, e = a + b, f = a + b }
![Page 34: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/34.jpg)
Available Expressions
● Direction: Forward● Domain: Sets of expressions assigned to
variables.● Transfer functions: Given a set of
variable assignments V and statement a = b + c:● Remove from V any expression containing a
as a subexpression.● Add to V the expression a = b + c.
● Initial value: Empty set of expressions.
![Page 35: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/35.jpg)
Liveness Analysis
a = b;
c = a;
d = a + b;
e = d;
d = a;
f = e;
![Page 36: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/36.jpg)
Liveness Analysis
a = b;
c = a;
d = a + b;
e = d;
d = a;
f = e;{ b, d }
![Page 37: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/37.jpg)
Liveness Analysis
a = b;
c = a;
d = a + b;
e = d;
d = a;{ b, d, e }
f = e;{ b, d }
![Page 38: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/38.jpg)
Liveness Analysis
a = b;
c = a;
d = a + b;
e = d;{ a, b, e }
d = a;{ b, d, e }
f = e;{ b, d }
![Page 39: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/39.jpg)
Liveness Analysis
a = b;
c = a;
d = a + b;{ a, b, d }
e = d;{ a, b, e }
d = a;{ b, d, e }
f = e;{ b, d }
![Page 40: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/40.jpg)
Liveness Analysis
a = b;
c = a;{ a, b }d = a + b;{ a, b, d }
e = d;{ a, b, e }
d = a;{ b, d, e }
f = e;{ b, d }
![Page 41: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/41.jpg)
Liveness Analysis
a = b;{ a, b }c = a;{ a, b }d = a + b;{ a, b, d }
e = d;{ a, b, e }
d = a;{ b, d, e }
f = e;{ b, d }
![Page 42: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/42.jpg)
Liveness Analysis
{ b }a = b;{ a, b }c = a;{ a, b }d = a + b;{ a, b, d }
e = d;{ a, b, e }
d = a;{ b, d, e }
f = e;{ b, d }
![Page 43: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/43.jpg)
Liveness Analysis
● Direction: Backwards● Domain: Sets of variables.● Transfer function: Given a set of variables V
and statement a = b + c:● Remove a from V (any previous value of a is now
dead.)● Add b and c to V (any previous value of b or c is
now live.)
● Formally: fa = b + c (V) = (V – {a}) ∪ {b, c}
● Initial value: Depends on semantics of language.
![Page 44: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/44.jpg)
Running Local Analyses
● Given an analysis (D, V, F, I) for a basic block.● Assume that D is “forward;” analogous for the
reverse case.
● Initially, set OUT[entry] to I.● For each statement s, in order:
● Set IN[s] to OUT[prev], where prev is the previous statement.
● Set OUT[s] to fs(IN[s]), where fs is the transfer function for statement s.
![Page 45: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/45.jpg)
Global Optimizations
![Page 46: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/46.jpg)
Global Analysis
● A global analysis is an analysis that works on a control-flow graph as a whole.
● Substantially more powerful than a local analysis.● (Why?)
● Substantially more complicated than a local analysis.● (Why?)
![Page 47: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/47.jpg)
Local vs. Global Analysis
● Many of the optimizations from local analysis can still be applied globally.● We'll see how to do this later today.
● Certain optimizations are possible in global analysis that aren't possible locally:● e.g. code motion: Moving code from one basic block
into another to avoid computing values unnecessarily.
● We'll explore three analyses in detail:● Global dead code elimination.● Global constant propagation.● Partial redundancy elimination.
![Page 48: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/48.jpg)
Global Dead Code Elimination
● Local dead code elimination needed to know what variables were live on exit from a basic block.
● This information can only be computed as part of a global analysis.
● How do we modify our liveness analysis to handle a CFG?
![Page 49: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/49.jpg)
CFGs Without Loops
Entry
{x, y}Exit
{b, c, d}b = c + de = c + d
{a, b, c, d}
{a, b, c, d}x = a + by = c + d{x, y}
{b, c, d}x = c + da = b + c
{a, b, c, d}
{a, b, c, d}y = a + b
{a, b, c, d}
![Page 50: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/50.jpg)
CFGs Without Loops
Entry
{x, y}Exit
{b, c, d}b = c + de = c + d
{a, b, c, d}
{a, b, c, d}x = a + by = c + d{x, y}
{b, c, d}x = c + da = b + c
{a, b, c, d}
{a, b, c, d}y = a + b
{a, b, c, d}
![Page 51: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/51.jpg)
CFGs Without Loops
Entry
{x, y}Exit
{b, c, d}b = c + de = c + d
{a, b, c, d}
{a, b, c, d}x = a + by = c + d{x, y}
{b, c, d}x = c + da = b + c
{a, b, c, d}
{a, b, c, d}y = a + b
{a, b, c, d}
![Page 52: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/52.jpg)
CFGs Without Loops
Entry
{x, y}Exit
{b, c, d}b = c + de = c + d
{a, b, c, d}
{a, b, c, d}x = a + by = c + d{x, y}
{b, c, d}x = c + da = b + c
{a, b, c, d}
{a, b, c, d}y = a + b
{a, b, c, d}
![Page 53: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/53.jpg)
CFGs Without Loops
Entry
{x, y}Exit
{b, c, d}b = c + de = c + d
{a, b, c, d}
{a, b, c, d}x = a + by = c + d{x, y}
{b, c, d}x = c + da = b + c
{a, b, c, d}
{a, b, c, d}y = a + b
{a, b, c, d}
![Page 54: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/54.jpg)
CFGs Without Loops
Entry
{x, y}Exit
{b, c, d}b = c + de = c + d
{a, b, c, d}
{a, b, c, d}x = a + by = c + d{x, y}
{b, c, d}x = c + da = b + c
{a, b, c, d}
{a, b, c, d}y = a + b
{a, b, c, d}
![Page 55: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/55.jpg)
CFGs Without Loops
Entry
{x, y}Exit
{b, c, d}b = c + de = c + d
{a, b, c, d}
{a, b, c, d}x = a + by = c + d{x, y}
{b, c, d}x = c + da = b + c
{a, b, c, d}
{a, b, c, d}y = a + b
{a, b, c, d}
![Page 56: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/56.jpg)
CFGs Without Loops
Entry
{x, y}Exit
{b, c, d}b = c + de = c + d
{a, b, c, d}
{a, b, c, d}x = a + by = c + d{x, y}
{b, c, d}x = c + da = b + c
{a, b, c, d}
{a, b, c, d}y = a + b
{a, b, c, d}
![Page 57: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/57.jpg)
CFGs Without Loops
Entry
{x, y}Exit
{b, c, d}b = c + de = c + d
{a, b, c, d}
{a, b, c, d}x = a + by = c + d{x, y}
{b, c, d}x = c + da = b + c
{a, b, c, d}
{a, b, c, d}y = a + b
{a, b, c, d}
![Page 58: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/58.jpg)
CFGs Without Loops
Entry
{x, y}Exit
{a, c, d}b = c + de = c + d
{a, b, c, d}
{a, b, c, d}x = a + by = c + d{x, y}
{b, c, d}x = c + da = b + c
{a, b, c, d}
{a, b, c, d}y = a + b
{a, b, c, d}
![Page 59: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/59.jpg)
CFGs Without Loops
Entry
{x, y}Exit
{a, c, d}b = c + de = c + d
{a, b, c, d}
{a, b, c, d}x = a + by = c + d{x, y}
{b, c, d}x = c + da = b + c
{a, b, c, d}
{a, b, c, d}y = a + b
{a, b, c, d}
![Page 60: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/60.jpg)
CFGs Without Loops
Entry
{x, y}Exit
{a, c, d}b = c + de = c + d
{a, b, c, d}
{a, b, c, d}x = a + by = c + d{x, y}
{b, c, d}
a = b + c{a, b, c, d}
{a, b, c, d}y = a + b
{a, b, c, d}
![Page 61: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/61.jpg)
CFGs Without Loops
Entry
{x, y}Exit
{a, c, d}b = c + de = c + d
{a, b, c, d}
{a, b, c, d}x = a + by = c + d{x, y}
{b, c, d}
a = b + c{a, b, c, d}
{a, b, c, d}y = a + b
{a, b, c, d}
![Page 62: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/62.jpg)
CFGs Without Loops
Entry
{x, y}Exit
{a, c, d}b = c + de = c + d
{a, b, c, d}
{a, b, c, d}x = a + by = c + d{x, y}
{b, c, d}
a = b + c{a, b, c, d}
{a, b, c, d}
{a, b, c, d}
![Page 63: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/63.jpg)
CFGs Without Loops
Entry
{x, y}Exit
{a, c, d}b = c + de = c + d
{a, b, c, d}
{a, b, c, d}x = a + by = c + d{x, y}
{b, c, d}
a = b + c{a, b, c, d}
{a, b, c, d}
{a, b, c, d}
![Page 64: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/64.jpg)
CFGs Without Loops
Entry
{x, y}Exit
{a, c, d}b = c + d
{a, b, c, d}
{a, b, c, d}x = a + by = c + d{x, y}
{b, c, d}
a = b + c{a, b, c, d}
{a, b, c, d}
{a, b, c, d}
![Page 65: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/65.jpg)
CFGs Without Loops
Entry
Exit
b = c + d
x = a + by = c + d
a = b + c
![Page 66: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/66.jpg)
CFGs Without Loops
Entry
Exit
b = c + d
x = a + by = c + d
a = b + c
![Page 67: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/67.jpg)
Major Changes, Part One
● In a local analysis, each statement has exactly one predecessor.
● In a global analysis, each statement may have multiple predecessors.
● A global analysis must have some means of combining information from all predecessors of a basic block.
![Page 68: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/68.jpg)
CFGs Without Loops
Entry
{x, y}Exit
{b, c, d}b = c + de = c + d
{a, b, c, d}
{a, b, c, d}x = a + by = c + d{x, y}
{b, c, d}x = c + da = b + c
{a, b, c, d}
{a, b, c, d}y = a + b
{a, b, c, d}
![Page 69: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/69.jpg)
CFGs Without Loops
Entry
{x, y}Exit
{b, c, d}b = c + de = c + d
{a, b, c, d}
{a, b, c, d}x = a + by = c + d{x, y}
{b, c, d}x = c + da = b + c
{a, b, c, d}
{a, b, c, d}y = a + b
{a, b, c, d}
![Page 70: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/70.jpg)
CFGs Without Loops
Entry
{x, y}Exit
{b, c, d}b = c + de = c + d
{a, b, c, d}
{a, b, c, d}x = a + by = c + d{x, y}
{b, c, d}x = c + da = b + c
{a, b, c, d}
{a, b, c, d}y = a + b
{a, b, c, d}
![Page 71: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/71.jpg)
CFGs Without Loops
Entry
{x, y}Exit
{b, c, d}b = c + de = c + d
{a, b, c, d}
{a, b, c, d}x = a + by = c + d{x, y}
{b, c, d}x = c + da = b + c
{a, b, c, d}
{a, b, c, d}y = a + b
{a, b, c, d}
![Page 72: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/72.jpg)
CFGs Without Loops
Entry
{x, y}Exit
{b, c, d}b = c + de = c + d
{a, b, c, d}
{a, b, c, d}x = a + by = c + d{x, y}
{b, c, d}x = c + da = b + c
{a, b, c, d}
{a, b, c, d}y = a + b
{a, b, c, d}
![Page 73: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/73.jpg)
CFGs Without Loops
Entry
{x, y}Exit
{b, c, d}b = c + de = c + d
{a, b, c, d}
{a, b, c, d}x = a + by = c + d{x, y}
{b, c, d}x = c + da = b + c
{a, b, c, d}
{a, b, c, d}y = a + b
{a, b, c, d}
![Page 74: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/74.jpg)
CFGs Without Loops
Entry
{x, y}Exit
{b, c, d}b = c + de = c + d{b, c, d}
{a, b, c, d}x = a + by = c + d{x, y}
{b, c, d}x = c + da = b + c
{a, b, c, d}
{a, b, c, d}y = a + b
{a, b, c, d}
![Page 75: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/75.jpg)
CFGs Without Loops
Entry
{x, y}Exit
{c, d}b = c + de = c + d{b, c, d}
{a, b, c, d}x = a + by = c + d{x, y}
{b, c, d}x = c + da = b + c
{a, b, c, d}
{a, b, c, d}y = a + b
{a, b, c, d}
![Page 76: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/76.jpg)
CFGs Without Loops
Entry
{x, y}Exit
{c, d}b = c + de = c + d{b, c, d}
{a, b, c, d}x = a + by = c + d{x, y}
{b, c, d}x = c + da = b + c
{a, b, c, d}
{a, b, c, d}y = a + b
{a, b, c, d}
![Page 77: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/77.jpg)
CFGs Without Loops
Entry
{x, y}Exit
{c, d}b = c + de = c + d{b, c, d}
{a, b, c, d}x = a + by = c + d{x, y}
{b, c, d}x = c + da = b + c
{a, b, c, d}
{a, b, c, d}y = a + b
{a, b, c, d}
![Page 78: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/78.jpg)
CFGs Without Loops
Entry
{x, y}Exit
{c, d}b = c + de = c + d
{a, b, c, d}
{a, b, c, d}x = a + by = c + d{x, y}
{b, c, d}x = c + da = b + c
{a, b, c, d}
{a, b, c, d}y = a + b
{a, b, c, d}
![Page 79: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/79.jpg)
CFGs Without Loops
Entry
{x, y}Exit
{a, c, d}b = c + de = c + d
{a, b, c, d}
{a, b, c, d}x = a + by = c + d{x, y}
{b, c, d}x = c + da = b + c
{a, b, c, d}
{a, b, c, d}y = a + b
{a, b, c, d}
![Page 80: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/80.jpg)
Major Changes, Part II
● In a local analysis, there is only one possible path through a basic block.
● In a global analysis, there may be many paths through a CFG.
● May need to recompute values multiple times as more information becomes available.
● Need to be careful when doing this not to loop infinitely!● (More on that later)
![Page 81: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/81.jpg)
CFGs with Loops
● Up to this point, we've considered loop-free CFGs, which have only finitely many possible paths.
● When we add loops into the picture, this is no longer true.
● Not all possible loops in a CFG can be realized in the actual program.
Sound approximation: Assume that every possible path through the CFG corresponds to a valid execution.
Includes all realizable paths, but some additional paths as well.
May make our analysis less precise (but still sound).
Makes the analysis feasible; we'll see how later.
![Page 82: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/82.jpg)
CFGs with Loops
● Up to this point, we've considered loop-free CFGs, which have only finitely many possible paths.
● When we add loops into the picture, this is no longer true.
● Not all possible loops in a CFG can be realized in the actual program.
Sound approximation: Assume that every possible path through the CFG corresponds to a valid execution.
Includes all realizable paths, but some additional paths as well.
May make our analysis less precise (but still sound).
Makes the analysis feasible; we'll see how later.
Top
x = 1
IfZ x Goto Top;
x = 0
![Page 83: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/83.jpg)
CFGs with Loops
● Up to this point, we've considered loop-free CFGs, which have only finitely many possible paths.
● When we add loops into the picture, this is no longer true.
● Not all possible loops in a CFG can be realized in the actual program.
● Sound approximation: Assume that every possible path through the CFG corresponds to a valid execution.● Includes all realizable paths, but some additional paths as
well.● May make our analysis less precise (but still sound).● Makes the analysis feasible; we'll see how later.
![Page 84: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/84.jpg)
CFGs With Loops
![Page 85: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/85.jpg)
CFGs With Loops
Entry
{a}Exit
{a, d}b = c + dc = c + d{a, b, c}
{a, b, c}a = a + bd = b + c
{a}
{b, c}a = b + cd = a + c{a, b, c}
{a, b}c = a + b
{a, b}
![Page 86: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/86.jpg)
CFGs With Loops
Entry
{a}Exit
{a, d}b = c + dc = c + d{a, b, c}
{a, b, c}a = a + bd = b + c
{a}
{b, c}a = b + cd = a + c{a, b, c}
{a, b}c = a + b
{a, b}
![Page 87: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/87.jpg)
Major Changes, Part III
● In a local analysis, there is always a well-defined “first” statement to begin processing.
● In a global analysis with loops, every basic block might depend on every other basic block.
● To fix this, we need to assign initial values to all of the blocks in the CFG.
![Page 88: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/88.jpg)
CFGs With Loops
Entry
{a}Exit
{a, d}b = c + dc = c + d{a, b, c}
{a, b, c}a = a + bd = b + c
{a}
{b, c}a = b + cd = a + c{a, b, c}
{a, b}c = a + b
{a, b}
![Page 89: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/89.jpg)
CFGs With Loops
Entry
{a}Exit
{}b = c + dc = c + d{a, b, c}
{}a = a + bd = b + c
{a}
{}a = b + cd = a + c{a, b, c}
{}c = a + b
{a, b}
![Page 90: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/90.jpg)
CFGs With Loops
Entry
{a}Exit
{}b = c + dc = c + d{a, b, c}
{}a = a + bd = b + c
{}a = b + cd = a + c{a, b, c}
{}c = a + b
{a, b}
![Page 91: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/91.jpg)
CFGs With Loops
Entry
{a}Exit
{}b = c + dc = c + d{a, b, c}
{}a = a + bd = b + c
{a}
{}a = b + cd = a + c{a, b, c}
{}c = a + b
{a, b}
![Page 92: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/92.jpg)
CFGs With Loops
Entry
{a}Exit
{}b = c + dc = c + d{a, b, c}
{a, b, c}a = a + bd = b + c
{a}
{}a = b + cd = a + c{a, b, c}
{}c = a + b
{a, b}
![Page 93: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/93.jpg)
CFGs With Loops
Entry
{a}Exit
{}b = c + dc = c + d{a, b, c}
{a, b, c}a = a + bd = b + c
{a}
{}a = b + cd = a + c
{}c = a + b
{a, b}
![Page 94: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/94.jpg)
CFGs With Loops
Entry
{a}Exit
{}b = c + dc = c + d{a, b, c}
{a, b, c}a = a + bd = b + c
{a}
{}a = b + cd = a + c{a, b, c}
{}c = a + b
{a, b}
![Page 95: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/95.jpg)
CFGs With Loops
Entry
{a}Exit
{}b = c + dc = c + d{a, b, c}
{a, b, c}a = a + bd = b + c
{a}
{b, c}a = b + cd = a + c{a, b, c}
{}c = a + b
{a, b}
![Page 96: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/96.jpg)
CFGs With Loops
Entry
{a}Exit
{}b = c + dc = c + d
{a, b, c}a = a + bd = b + c
{a}
{b, c}a = b + cd = a + c{a, b, c}
{}c = a + b
{a, b}
![Page 97: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/97.jpg)
CFGs With Loops
Entry
{a}Exit
{}b = c + dc = c + d{b, c}
{a, b, c}a = a + bd = b + c
{a}
{b, c}a = b + cd = a + c{a, b, c}
{}c = a + b
{a, b}
![Page 98: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/98.jpg)
CFGs With Loops
Entry
{a}Exit
{c, d}b = c + dc = c + d{b, c}
{a, b, c}a = a + bd = b + c
{a}
{b, c}a = b + cd = a + c{a, b, c}
{}c = a + b
{a, b}
![Page 99: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/99.jpg)
CFGs With Loops
Entry
{a}Exit
{c, d}b = c + dc = c + d{b, c}
{a, b, c}a = a + bd = b + c
{a}
{b, c}a = b + cd = a + c{a, b, c}
{}c = a + b
![Page 100: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/100.jpg)
CFGs With Loops
Entry
{a}Exit
{c, d}b = c + dc = c + d{b, c}
{a, b, c}a = a + bd = b + c
{a}
{b, c}a = b + cd = a + c{a, b, c}
{}c = a + b
{a, b, c}
![Page 101: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/101.jpg)
CFGs With Loops
Entry
{a}Exit
{c, d}b = c + dc = c + d{b, c}
{a, b, c}a = a + bd = b + c
{a}
{b, c}a = b + cd = a + c{a, b, c}
{a, b}c = a + b
{a, b, c}
![Page 102: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/102.jpg)
CFGs With Loops
Entry
{a}Exit
{c, d}b = c + dc = c + d{b, c}
{a, b, c}a = a + bd = b + c
{a}
{b, c}a = b + cd = a + c{a, b, c}
{a, b}c = a + b
{a,{a, b, c} b}
![Page 103: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/103.jpg)
CFGs With Loops
Entry
{a}Exit
{c, d}b = c + dc = c + d{b, c}
{a, b, c}a = a + bd = b + c{a, c, d}
{b, c}a = b + cd = a + c{a, b, c}
{a, b}c = a + b
{a,{a, b, c} b}
![Page 104: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/104.jpg)
CFGs With Loops
Entry
{a}Exit
{c, d}b = c + dc = c + d{b, c}
{a, b, c}a = a + bd = b + c{a, c, d}
{b, c}a = b + cd = a + c{a, b, c}
{a, b}c = a + b
{a,{a, b, c} b}
![Page 105: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/105.jpg)
CFGs With Loops
Entry
{a}Exit
{c, d}b = c + dc = c + d{b, c}
{a, b, c}a = a + bd = b + c{a, c, d}
{b, c}a = b + cd = a + c{a, b, c}
{a, b}c = a + b
{a, b, c}
![Page 106: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/106.jpg)
CFGs With Loops
Entry
{a}Exit
{c, d}b = c + dc = c + d{b, c}
{a, b, c}a = a + bd = b + c{a, c, d}
{b, c}a = b + cd = a + c{a, b, c}
{a, b}c = a + b
{a, b, c}
![Page 107: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/107.jpg)
CFGs With Loops
Entry
{a}Exit
{c, d}b = c + dc = c + d{a, b, c}
{a, b, c}a = a + bd = b + c{a, c, d}
{b, c}a = b + cd = a + c{a, b, c}
{a, b}c = a + b
{a, b, c}
![Page 108: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/108.jpg)
CFGs With Loops
Entry
{a}Exit
{a, c, d}b = c + dc = c + d{a, b, c}
{a, b, c}a = a + bd = b + c{a, c, d}
{b, c}a = b + cd = a + c{a, b, c}
{a, b}c = a + b
{a, b, c}
![Page 109: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/109.jpg)
CFGs With Loops
Entry
{a}Exit
{a, c, d}b = c + dc = c + d{a, b, c}
{a, b, c}a = a + bd = b + c{a, c, d}
{b, c}a = b + cd = a + c{a, b, c}
{a, b}c = a + b
{a, b, c}
![Page 110: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/110.jpg)
Summary of Differences
● Need to be able to handle multiple predecessors/successors for a basic block.
● Need to be able to handle multiple paths through the control-flow graph, and may need to iterate multiple times to compute the final value (but the analysis still needs to terminate!)
● Need to be able to assign each basic block a reasonable default value for before we've analyzed it.
![Page 111: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/111.jpg)
Global Liveness Analysis
● Initially, set IN[s] = { } for each statement s.● Set IN[exit] to the set of variables known to be live
on exit (language-specific knowledge).● Repeat until no changes occur:
● For each statement s of the form a = b + c, in any order you'd like:– Set OUT[s] to set union of IN[p] for each successor p of s.– Set IN[s] to (OUT[s] – a) ∪ {b, c}.
● Yet another fixed-point iteration!
![Page 112: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/112.jpg)
Why Does This Work?
● To show correctness, we need to show that● the algorithm eventually terminates, and● when it terminates, it has a sound answer.
● Termination argument:● Once a variable is discovered to be live during some point of the
analysis, it always stays live.● Only finitely many variables and finitely many places where a
variable can become live.
● Soundness argument (sketch):● Each individual rule, applied to some set, correctly updates
liveness in that set.● When computing the union of the set of live variables, a variable is
only live if it was live on some path leaving the statement.
![Page 113: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/113.jpg)
Theory to the Rescue
● Building up all of the machinery to design this analysis was tricky.
● The key ideas, however, are mostly independent of the analysis:● We need to be able to compute functions describing
the behavior of each statement.● We need to be able to merge several
subcomputations together.● We need an initial value for all of the basic blocks.
● There is a beautiful formalism that captures many of these properties.
![Page 114: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/114.jpg)
Meet Semilattices
● A meet semilattice is a ordering defined on a set of elements.
● Any two elements have some meet that is the largest element smaller than both elements.
● There is a unique top element, which is larger than all other elements.
● Intuitively:● The meet of two elements represents combining
information from two elements.● The top element element represents “no information
yet” or “the least conservative possible answer.”
![Page 115: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/115.jpg)
Meet Semilattices for Liveness
![Page 116: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/116.jpg)
Meet Semilattices for Liveness
{ }
{ a } { b } { c }
{ a, b } { a, c } { b, c }
{ a, b, c }
![Page 117: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/117.jpg)
Meet Semilattices for Liveness
{ }
{ a } { b } { c }
{ a, b } { a, c } { b, c }
{ a, b, c }
Top Element
![Page 118: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/118.jpg)
Meet Semilattices for Liveness
{ }
{ a } { b } { c }
{ a, b } { a, c } { b, c }
{ a, b, c }
![Page 119: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/119.jpg)
Meet Semilattices for Liveness
{ }
{ a } { b } { c }
{ a, b } { a, c } { b, c }
{ a, b, c }
![Page 120: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/120.jpg)
Meet Semilattices for Liveness
{ }
{ a } { b } { c }
{ a, b } { a, c } { b, c }
{ a, b, c }
![Page 121: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/121.jpg)
Meet Semilattices for Liveness
{ }
{ a } { b } { c }
{ a, b } { a, c } { b, c }
{ a, b, c }
![Page 122: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/122.jpg)
Formal Definitions
● A meet semilattice is a pair (D, ∧), where● D is a domain of elements.● ∧ is a meet operator that is
– idempotent: x ∧ x = x– commutative: x ∧ y = y ∧ x– associative: (x ∧ y) ∧ z = x ∧ (y ∧ z)
● If x ∧ y = z, we say that z is the meet or (greatest lower bound) of x and y.
● Every meet semilattice has a top element denoted ⊤ such that ⊤∧ x = x for all x.
![Page 123: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/123.jpg)
An Example Semilattice
● The set of natural numbers and the max function.
● Idempotent● max{a, a} = a
● Commutative● max{a, b} = max{b, a}
● Associative● max{a, max{b, c}} = max{max{a, b}, c}
● Top element is 0:● max{0, a} = a
![Page 124: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/124.jpg)
Is this a Meet Semilattice?
![Page 125: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/125.jpg)
Is this a Meet Semilattice?
true
false
![Page 126: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/126.jpg)
Is this a Meet Semilattice?
true
false
What is the meet operator here?
![Page 127: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/127.jpg)
Is this a Meet Semilattice?
![Page 128: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/128.jpg)
Is this a Meet Semilattice?
Animal
Cat Dog Pig
![Page 129: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/129.jpg)
Is this a Meet Semilattice?
![Page 130: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/130.jpg)
Is this a Meet Semilattice?
BunnyPuppyKitty
Cute
![Page 131: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/131.jpg)
Is this a Meet Semilattice?
BunnyPuppyKitty
Cute
Thing
![Page 132: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/132.jpg)
A Semilattice for Liveness
● Sets of live variables and the set union operation.
● Idempotent:● x ∪ x = x
● Commutative:● x ∪ y = y ∪ x
● Associative:● (x ∪ y) ∪ z = x ∪ (y ∪ z)
● Top element:● The empty set: Ø ∪ x = x
![Page 133: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/133.jpg)
Semilattices and Program Analysis
● Semilattices naturally solve many of the problems we encounter in global analysis.
● How do we combine information from multiple basic blocks?● Use the meet of all of those blocks.
● What value do we give to basic blocks we haven't seen yet?● Use the top element.
● How do we know that the algorithm always terminates?● Actually, we still don't! More on that later.
![Page 134: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/134.jpg)
A General Framework
● A global analysis is a tuple (D, V, ∧, F, I), where● D is a direction (forward or backward)
– The order to visit statements within a basic block, not the order in which to visit the basic blocks.
● V is a set of values.● ∧ is a meet operator over those values.● F is a set of transfer functions f : V → V● I is an initial value.
● The only difference from local analysis is the introduction of the meet operator.
![Page 135: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/135.jpg)
Running Global Analyses
● Assume that (D, V, ∧, F, I) is a forward analysis.● Set OUT[s] = ⊤ for all statements s.● Set OUT[begin] = I.● Repeat until no values change:
● For each statement s with predecessorsp1, p2, … , pn:
– Set IN[s] = OUT[p1] ∧ OUT[p2] ∧ … ∧ OUT[pn]
– Set OUT[s] = fs (IN[s])
● The order of this iteration does not matter.
![Page 136: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/136.jpg)
For Comparison
● Set IN[s] = ⊤ for all statement s.
● Set IN[exit] = I.● Repeat until no
changes occur:● For each statement s:
– Set OUT[s] = IN[x1]∧…∧IN[xn] where x1, …, xn are successors of s.
– Set IN[s] = fs (OUT[s])
● Set IN[s] = { } for each statement s.
● Set IN[exit] to the set of variables known to be live on exit.
● Repeat until no changes occur:● For each statement s of
the form a = b + c:– Set OUT[s] to set union of
IN[x] for each successor x of s.
– Set IN[s] to (OUT[s] – a) ∪ {b, c}.
![Page 137: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/137.jpg)
The Dataflow Framework
● This form of analysis is called the dataflow framework.
● Can be used to easily prove an analysis is sound.
● With certain restrictions, can be used to prove that an analysis eventually terminates.● Again, more on that later.
![Page 138: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/138.jpg)
Global Constant Propagation
● Constant propagation is an optimization that replaces each variable that is known to be a constant value with that constant.
● An elegant example of the dataflow framework.
![Page 139: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/139.jpg)
Global Constant Propagationstart
end
x = 6;
y = x; z = y;
w = x;
z = x;
x = 4;
![Page 140: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/140.jpg)
Global Constant Propagationstart
end
x = 6;
y = x; z = y;
w = x;
z = x;
x = 4;
![Page 141: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/141.jpg)
Global Constant Propagationstart
end
x = 6;
y = 6; z = y;
w = 6;
z = x;
x = 4;
![Page 142: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/142.jpg)
Constant Propagation Analysis
● In order to do a constant propagation, we need to track what values might be assigned to a variable at each program point.
● Every variable will either● Never have a value assigned to it,● Have a single constant value assigned to it,● Have two or more constant values assigned to it, or● Have a known non-constant value.
● Our analysis will propagate this information throughout a CFG to identify locations where a value is constant.
![Page 143: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/143.jpg)
Properties of Constant Propagation
● For now, consider just some single variable x.● At each point in the program, we know one of three
things about the value of x:● x is definitely not a constant, since it's been assigned two
values or assigned a value that we know isn't a constant.● x is definitely a constant and has value k.● We have never seen a value for x.
● Note that the first and last of these are not the same!● The first one means that there may be a way for x to have
multiple values.● The last one means that x never had a value at all.
![Page 144: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/144.jpg)
Defining a Meet Operator
● The meet of any two different constants is Not a Constant.
● (If the variable might have two different values on entry to a statement, it cannot be a constant.)
● The meet of Not a Constant and any other value is Not a Constant.
● (If on some path the value is known not to be a constant, then on entry to a statement its value can't possibly be a constant.)
● The meet of Undefined and any other value is that other value.
● (If x has no value on some path and does have a value on some other path, we can just pretend it always had the assigned value.)
![Page 145: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/145.jpg)
A Semilattice for Constant Propagation
0-1 +1-2 +2... ...
Undefined
● One possible semilattice for this analysis is shown here:
● Note:
● The meet of any two different constants is Not a Constant.
● The meet of Undefined and any value is that value.● The meet of Not a Constant and any value is Not a
Constant.
Not a Constant
![Page 146: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/146.jpg)
A Semilattice for Constant Propagation
0-1 +1-2 +2... ...
Undefined
● One possible semilattice for this analysis is shown here:
● Note:
● The meet of any two different constants is Not a Constant.
● The meet of Undefined and any value is that value.● The meet of Not a Constant and any value is Not a
Constant.
Not a Constant
This lattice is infinitely wide!
![Page 147: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/147.jpg)
A Semilattice for Constant Propagation
0-1 +1-2 +2... ...
Undefined
● One possible semilattice for this analysis is shown here:
● Note:
● The meet of any two different constants is Not a Constant.
● The meet of Undefined and any value is that value.● The meet of Not a Constant and any value is Not a
Constant.
Not a Constant
![Page 148: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/148.jpg)
A Semilattice for Constant Propagation
0-1 +1-2 +2... ...
Undefined
● One possible semilattice for this analysis is shown here:
● Note:
● The meet of any two different constants is Not a Constant.
● The meet of Undefined and any value is that value.● The meet of Not a Constant and any value is Not a
Constant.
Not a Constant
![Page 149: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/149.jpg)
Global Constant Propagationstart
end
x = 6;
y = x; z = y;
w = x;
z = x;
x = 4;
![Page 150: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/150.jpg)
Global Constant Propagationstart
end
x = 6;Undefined
y = x;Undefined
z = y;Undefined
w = x;Undefined
z = x;Undefined
x = 4;Undefined
![Page 151: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/151.jpg)
Global Constant Propagationstart
Undefined
end
x = 6;Undefined
y = x;Undefined
z = y;Undefined
w = x;Undefined
z = x;Undefined
x = 4;Undefined
![Page 152: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/152.jpg)
Global Constant Propagationstart
Undefined
end
x = 6;Undefined
y = x;Undefined
z = y;Undefined
w = x;Undefined
z = x;Undefined
x = 4;Undefined
![Page 153: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/153.jpg)
Global Constant Propagationstart
Undefined
end
Undefinedx = 6;
Undefined
y = x;Undefined
z = y;Undefined
w = x;Undefined
z = x;Undefined
x = 4;Undefined
![Page 154: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/154.jpg)
Global Constant Propagationstart
Undefined
end
Undefinedx = 6;
6
y = x;Undefined
z = y;Undefined
w = x;Undefined
z = x;Undefined
x = 4;Undefined
![Page 155: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/155.jpg)
Global Constant Propagationstart
Undefined
end
Undefinedx = 6;
6
y = x;Undefined
z = y;Undefined
w = x;Undefined
z = x;Undefined
x = 4;Undefined
![Page 156: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/156.jpg)
Global Constant Propagationstart
Undefined
end
Undefinedx = 6;
6
6y = x;
Undefinedz = y;
Undefined
w = x;Undefined
z = x;Undefined
x = 4;Undefined
![Page 157: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/157.jpg)
Global Constant Propagationstart
Undefined
end
Undefinedx = 6;
6
6y = x;
6z = y;
Undefined
w = x;Undefined
z = x;Undefined
x = 4;Undefined
![Page 158: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/158.jpg)
Global Constant Propagationstart
Undefined
end
Undefinedx = 6;
6
6y = x;
6z = y;
Undefined
w = x;Undefined
z = x;Undefined
x = 4;Undefined
![Page 159: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/159.jpg)
Global Constant Propagationstart
Undefined
end
Undefinedx = 6;
6
6y = x;
6z = y;
Undefined
w = x;Undefined
z = x;Undefined
x = 4;Undefined
0-1 +1... ...
Undefined
Not a Constant
![Page 160: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/160.jpg)
Global Constant Propagationstart
Undefined
end
Undefinedx = 6;
6
6y = x;
6z = y;
Undefined
6w = x;
Undefined
z = x;Undefined
x = 4;Undefined
0-1 +1... ...
Undefined
Not a Constant
![Page 161: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/161.jpg)
Global Constant Propagationstart
Undefined
end
Undefinedx = 6;
6
6y = x;
6z = y;
Undefined
6w = x;
Undefined
z = x;Undefined
x = 4;Undefined
![Page 162: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/162.jpg)
Global Constant Propagationstart
Undefined
end
Undefinedx = 6;
6
6y = x;
6z = y;
Undefined
6w = x;
6
z = x;Undefined
x = 4;Undefined
![Page 163: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/163.jpg)
Global Constant Propagationstart
Undefined
end
Undefinedx = 6;
6
6y = x;
6z = y;
Undefined
6w = x;
6
z = x;Undefined
x = 4;Undefined
![Page 164: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/164.jpg)
Global Constant Propagationstart
Undefined
end
Undefinedx = 6;
6
6y = x;
6z = y;
Undefined
6w = x;
6
6z = x;
Undefined
x = 4;Undefined
![Page 165: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/165.jpg)
Global Constant Propagationstart
Undefined
end
Undefinedx = 6;
6
6y = x;
6z = y;
Undefined
6w = x;
6
6z = x;
6
x = 4;Undefined
![Page 166: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/166.jpg)
Global Constant Propagationstart
Undefined
end
Undefinedx = 6;
6
6y = x;
6z = y;
Undefined
6w = x;
6
6z = x;
6
x = 4;Undefined
![Page 167: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/167.jpg)
Global Constant Propagationstart
Undefined
end
Undefinedx = 6;
6
6y = x;
6z = y;
Undefined
6w = x;
6
6z = x;
6
6x = 4;
Undefined
![Page 168: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/168.jpg)
Global Constant Propagationstart
Undefined
end
Undefinedx = 6;
6
6y = x;
6z = y;
Undefined
6w = x;
6
6z = x;
6
6x = 4;
4
![Page 169: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/169.jpg)
Global Constant Propagationstart
Undefined
end
Undefinedx = 6;
6
6y = x;
6z = y;
Undefined
6w = x;
6
6z = x;
6
6x = 4;
4
![Page 170: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/170.jpg)
Global Constant Propagationstart
Undefined
end
Undefinedx = 6;
6
6y = x;
6
6z = y;
Undefined
6w = x;
6
6z = x;
6
6x = 4;
4
![Page 171: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/171.jpg)
Global Constant Propagationstart
Undefined
end
Undefinedx = 6;
6
6y = x;
6
6z = y;
6
6w = x;
6
6z = x;
6
6x = 4;
4
![Page 172: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/172.jpg)
Global Constant Propagationstart
Undefined
end
Undefinedx = 6;
6
6y = x;
6
6z = y;
6
6w = x;
6
6z = x;
6
6x = 4;
4
![Page 173: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/173.jpg)
Global Constant Propagationstart
Undefined
end
Undefinedx = 6;
6
6y = x;
6
6z = y;
6
6w = x;
6
6z = x;
6
6x = 4;
4
![Page 174: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/174.jpg)
Global Constant Propagationstart
Undefined
end
Undefinedx = 6;
6
6y = x;
6
6z = y;
6
6w = x;
6
6z = x;
6
6x = 4;
4
![Page 175: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/175.jpg)
Global Constant Propagationstart
Undefined
end
Undefinedx = 6;
6
6y = x;
6
6z = y;
6
6w = x;
6
6z = x;
6
6x = 4;
4
![Page 176: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/176.jpg)
Global Constant Propagationstart
Undefined
end
Undefinedx = 6;
6
6y = x;
6
6z = y;
6
6w = x;
6
6z = x;
6
6x = 4;
4
![Page 177: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/177.jpg)
Global Constant Propagationstart
Undefined
end
Undefinedx = 6;
6
6y = x;
6
6z = y;
6
6w = x;
6
6z = x;
6
6x = 4;
4
0-1 +1... ...
Undefined
Not a Constant
![Page 178: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/178.jpg)
Global Constant Propagationstart
Undefined
end
Undefinedx = 6;
6
6y = x;
6
6z = y;
6
6w = x;
6
Not Constz = x;
6
6x = 4;
4
0-1 +1... ...
Undefined
Not a Constant
![Page 179: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/179.jpg)
Global Constant Propagationstart
Undefined
end
Undefinedx = 6;
6
6y = x;
6
6z = y;
6
6w = x;
6
Not Constz = x;
6
6x = 4;
4
![Page 180: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/180.jpg)
Global Constant Propagationstart
Undefined
end
Undefinedx = 6;
6
6y = x;
6
6z = y;
6
6w = x;
6
Not Constz = x;
Not Const
6x = 4;
4
![Page 181: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/181.jpg)
Global Constant Propagationstart
Undefined
end
Undefinedx = 6;
6
6y = x;
6
6z = y;
6
6w = x;
6
Not Constz = x;
Not Const
6x = 4;
4
![Page 182: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/182.jpg)
Global Constant Propagationstart
Undefined
end
Undefinedx = 6;
6
6y = x;
6
6z = y;
6
6w = x;
6
Not Constz = x;
Not Const
Not Constx = 4;
4
![Page 183: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/183.jpg)
Global Constant Propagationstart
Undefined
end
Undefinedx = 6;
6
6y = x;
6
6z = y;
6
6w = x;
6
Not Constz = x;
Not Const
Not Constx = 4;
4
![Page 184: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/184.jpg)
Global Constant Propagationstart
Undefined
end
Undefinedx = 6;
6
6y = x;
6
6z = y;
6
6w = x;
6
Not Constz = x;
Not Const
Not Constx = 4;
4
![Page 185: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/185.jpg)
Global Constant Propagationstart
Undefined
end
Undefinedx = 6;
6
6y = x;
6
6z = y;
6
6w = x;
6
Not Constz = x;
Not Const
Not Constx = 4;
4
![Page 186: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/186.jpg)
Global Constant Propagationstart
Undefined
end
Undefinedx = 6;
6
6y = x;
6
6z = y;
6
6w = x;
6
Not Constz = x;
Not Const
Not Constx = 4;
4
![Page 187: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/187.jpg)
Global Constant Propagationstart
Undefined
end
Undefinedx = 6;
6
6y = x;
6
6z = y;
6
6w = x;
6
Not Constz = x;
Not Const
Not Constx = 4;
4
![Page 188: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/188.jpg)
Global Constant Propagationstart
Undefined
end
Undefinedx = 6;
6
6y = x;
6
6z = y;
6
6w = x;
6
Not Constz = x;
Not Const
Not Constx = 4;
4
![Page 189: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/189.jpg)
Global Constant Propagationstart
Undefined
end
Undefinedx = 6;
6
6y = x;
6
6z = y;
6
6w = x;
6
Not Constz = x;
Not Const
Not Constx = 4;
4
![Page 190: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/190.jpg)
Global Constant Propagationstart
Undefined
end
Undefinedx = 6;
6
6y = x;
6
6z = y;
6
6w = x;
6
Not Constz = x;
Not Const
Not Constx = 4;
4
![Page 191: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/191.jpg)
Global Constant Propagationstart
Undefined
end
Undefinedx = 6;
6
6y = x;
6
6z = y;
6
6w = x;
6
Not Constz = x;
Not Const
Not Constx = 4;
4
![Page 192: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/192.jpg)
Global Constant Propagationstart
Undefined
end
Undefinedx = 6;
6
6y = x;
6
6z = y;
6
6w = x;
6
Not Constz = x;
Not Const
Not Constx = 4;
4
![Page 193: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/193.jpg)
Global Constant Propagationstart
Undefined
end
Undefinedx = 6;
6
6y = 6;
6
6z = y;
6
6w = x;
6
Not Constz = x;
Not Const
Not Constx = 4;
4
![Page 194: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/194.jpg)
Global Constant Propagationstart
Undefined
end
Undefinedx = 6;
6
6y = 6;
6
6z = y;
6
6w = x;
6
Not Constz = x;
Not Const
Not Constx = 4;
4
![Page 195: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/195.jpg)
Global Constant Propagationstart
Undefined
end
Undefinedx = 6;
6
6y = 6;
6
6z = y;
6
6w = 6;
6
Not Constz = x;
Not Const
Not Constx = 4;
4
![Page 196: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/196.jpg)
Global Constant Propagationstart
Undefined
end
Undefinedx = 6;
6
6y = 6;
6
6z = y;
6
6w = 6;
6
Not Constz = x;
Not Const
Not Constx = 4;
4
![Page 197: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/197.jpg)
Global Constant Propagationstart
Undefined
end
Undefinedx = 6;
6
6y = 6;
6
6z = y;
6
6w = 6;
6
Not Constz = x;
Not Const
Not Constx = 4;
4
![Page 198: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/198.jpg)
Global Constant Propagationstart
end
x = 6;
y = 6; z = y;
w = 6;
z = x;
x = 4;
![Page 199: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/199.jpg)
Dataflow for Constant Propagation
● Direction: Forward● Semilattice: Defined earlier● Transfer functions:
● fx = k (V) = k (assign a constant)
● fx=a+b (V) = Not a Constant (assign non-constant)
● fy = a + b (V) = V (unrelated assignment)
● Initial value: x is Undefined● (When might we use some other value?)
![Page 200: Global Optimization - Stanford University · Global Dead Code Elimination Local dead code elimination needed to know what variables were live on exit from a basic block. This information](https://reader035.fdocuments.net/reader035/viewer/2022063009/5fc0cc36942fc87f606416a8/html5/thumbnails/200.jpg)
Next Time
● More on Semilattices● Semilattices and orderings.● Monotonic transfer functions.● Termination and correctness.
● Code motion optimizations● Loop-invariant code motion.● Partial redundancy elimination.