Global optimizations.

Slides:



Advertisements
Similar presentations
Data-Flow Analysis II CS 671 March 13, CS 671 – Spring Data-Flow Analysis Gather conservative, approximate information about what a program.
Advertisements

Lecture 11: Code Optimization CS 540 George Mason University.
1 CS 201 Compiler Construction Lecture 3 Data Flow Analysis.
19 Classic Examples of Local and Global Code Optimizations Local Constant folding Constant combining Strength reduction.
Course Outline Traditional Static Program Analysis –Theory Compiler Optimizations; Control Flow Graphs Data-flow Analysis – today’s class –Classic analyses.
Data-Flow Analysis Framework Domain – What kind of solution is the analysis looking for? Ex. Variables have not yet been defined – Algorithm assigns a.
School of EECS, Peking University “Advanced Compiler Techniques” (Fall 2011) Dataflow Analysis Introduction Guo, Yao Part of the slides are adapted from.
1 CS 201 Compiler Construction Data Flow Framework.
Compilation (Semester A, 2013/14) Lecture 11: Data Flow Analysis & Optimizations Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and.
Compilation (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.
1 CS 201 Compiler Construction Lecture 7 Code Optimizations: Partial Redundancy Elimination.
1 Data flow analysis Goal : collect information about how a procedure manipulates its data This information is used in various optimizations For example,
Foundations of Data-Flow Analysis. Basic Questions Under what circumstances is the iterative algorithm used in the data-flow analysis correct? How precise.
1 Copy Propagation What does it mean? Given an assignment x = y, replace later uses of x with uses of y, provided there are no intervening assignments.
1 CS 201 Compiler Construction Lecture 5 Code Optimizations: Copy Propagation & Elimination.
1 Data flow analysis Goal : –collect information about how a procedure manipulates its data This information is used in various optimizations –For example,
Global optimization. Data flow analysis To generate better code, need to examine definitions and uses of variables beyond basic blocks. With use- definition.
Data Flow Analysis Compiler Design Nov. 3, 2005.
From last time: reaching definitions For each use of a variable, determine what assignments could have set the value being read from the variable Information.
4/25/08Prof. Hilfinger CS164 Lecture 371 Global Optimization Lecture 37 (From notes by R. Bodik & G. Necula)
1 CS 201 Compiler Construction Lecture 3 Data Flow Analysis.
Data Flow Analysis Compiler Design October 5, 2004 These slides live on the Web. I obtained them from Jeff Foster and he said that he obtained.
Data Flow Analysis Compiler Design Nov. 8, 2005.
1 Copy Propagation What does it mean? – Given an assignment x = y, replace later uses of x with uses of y, provided there are no intervening assignments.
1 CS 201 Compiler Construction Lecture 4 Data Flow Framework.
Machine-Independent Optimizations Ⅰ CS308 Compiler Theory1.
Global optimization. Data flow analysis To generate better code, need to examine definitions and uses of variables beyond basic blocks. With use- definition.
Prof. Bodik CS 164 Lecture 16, Fall Global Optimization Lecture 16.
Constant Propagation. The constant propagation framework is different from all the data-flow problems discussed so far, in that It has an unbounded set.
1 CS 201 Compiler Construction Data Flow Analysis.
Dataflow Analysis Topic today Data flow analysis: Section 3 of Representation and Analysis Paper (Section 3) NOTE we finished through slide 30 on Friday.
Compiler Principles Winter Compiler Principles Global Optimizations Mayer Goldberg and Roman Manevich Ben-Gurion University.
Compiler Principles Fall Compiler Principles Lecture 0: Local Optimizations Roman Manevich Ben-Gurion University.
1 Data Flow Analysis Data flow analysis is used to collect information about the flow of data values across basic blocks. Dominator analysis collected.
CS412/413 Introduction to Compilers Radu Rugina Lecture 18: Control Flow Graphs 29 Feb 02.
Compilation Lecture 8 Abstract Interpretation Noam Rinetzky 1.
Compiler Principles Fall Compiler Principles Lecture 11: Loop Optimizations Roman Manevich Ben-Gurion University.
Compilation Lecture 7 IR + Optimizations Noam Rinetzky 1.
Data Flow Analysis II AModel Checking and Abstract Interpretation Feb. 2, 2011.
Semilattices presented by Niko Simonson, CSS 548, Autumn 2012 Semilattice City, © 2009 Nora Shader.
Optimization Simone Campanoni
Compiler Principles Fall Compiler Principles Lecture 9: Dataflow & Optimizations 2 Roman Manevich Ben-Gurion University of the Negev.
Code Optimization Data Flow Analysis. Data Flow Analysis (DFA)  General framework  Can be used for various optimization goals  Some terms  Basic block.
Data Flow Analysis Suman Jana
Fall Compiler Principles Lecture 7: Dataflow & Optimizations 2
Lecture 5 Partial Redundancy Elimination
Dataflow analysis.
Fall Compiler Principles Lecture 6: Dataflow & Optimizations 1
Intermediate Code Generation
Basic Block Optimizations
Fall Compiler Principles Lecture 8: Loop Optimizations
IR + Optimizations Noam Rinetzky
Machine-Independent Optimization
Topic 10: Dataflow Analysis
University Of Virginia
Another example: constant prop
1. Reaching Definitions Definition d of variable v: a statement d that assigns a value to v. Use of variable v: reference to value of v in an expression.
Dataflow analysis.
Abstract Interpretation Noam Rinetzky
Code Optimization Overview and Examples Control Flow Graph
Optimizations Noam Rinetzky
Fall Compiler Principles Lecture 10: Global Optimizations
Optimizations using SSA
Fall Compiler Principles Lecture 10: Loop Optimizations
Data Flow Analysis Compiler Design
Lecture 20: Dataflow Analysis Frameworks 11 Mar 02
Static Single Assignment
Live Variables – Basic Block
Basic Block Optimizations
Presentation transcript:

Global optimizations

Local analysis framework 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 function f : V  V I is the initial information at the top (or bottom) of a basic block

Available Expressions Direction: Forward Values: 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 Formally: Vout = (Vin \ {e | e contains a})  {a = b + c} Initial value: Empty set of expressions

Available expressions analysis IN[s] OUT[s] entry: {} Initial value 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}

Optimizing from available expressions Common sub-expression elimination If {… t = y op z … } x = y op z Can transform statement into x = t Copy propagation If {… y = t … } x = y op z Can transform statement into x = t op z Note: same for x=y and x=op y

Common sub-expression elimination entry: {} a = b; {a=b} c = b; {a=b, c=b} d = a + b; {a=b, c=b, d=a+b} e = d; 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 = e; f = a + b; {a=b, c=b, d=b, e=a+b, f=a+b}

Liveness Analysis Direction: Backward Values: Sets of variables Transfer functions: Given a set of variable assignments 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: Vin = (Vout \ {a})  {b,c} Initial value: Depends on semantics of language E.g., function arguments and return values (pushes) Result of local analysis of other blocks as part of a global analysis

Liveness analysis s IN[s] OUT[s] { 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; Initial value { b, d } exit:

Optimizing from liveness analysis Dead code elimination If x = y op z {v1,…,vk} And x  {v1,…,vk} We can eliminate x = y op z Note: same for x=y and x=op y

Dead code elimination { b } a = b; c = a; d = a + b; e = d; { a, b} f = e; { b, d } exit:

Zero value Analysis Direction: Forward Values: Sets of valuations (values assigned to variables) Transfer functions: Given a set of variable assignments V and statement a = b op c: update valuation of a at V according to values of b, c and operator op. Formally: Vout = (Vin \ {a = value’})  {a = value} Initial value: Depends on semantics of language E.g., function arguments and return values (pushes) Result of local analysis of other blocks as part of a global analysis

Zero value Analysis s IN[s] OUT[s] entry: {b= 𝟎 + } a = b; Initial value a = b; {b= 𝟎 + , a= 𝟎 + } c = a + b; {b= 𝟎 + , a= 𝟎 + , c= 𝟎 + } d = a / c; {b= 𝟎 + , a= 𝟎 + , c= 𝟎 + , d= 𝟎 + } c = b - b; {b= 𝟎 + , a= 𝟎 + , c=0, d= 𝟎 + } a = d - b; {b= 𝟎 + , a=?, c=0, d= 𝟎 + } f = d / c; {b= 𝟎 + , a=?, c=0, d= 𝟎 + , f=?}

Optimizing from zero value analysis Safe division If x = y / z {v1,…,vk} And z  {v1,…,z=0,…,vk} or {v1,…,z=?,…,vk} We can update x = y safe div z

Safe division entry: {b= 𝟎 + } a = b; {b= 𝟎 + , a= 𝟎 + } c = a + b; d = a / c; {b= 𝟎 + , a= 𝟎 + , c= 𝟎 + , d= 𝟎 + } c = b - b; {b= 𝟎 + , a= 𝟎 + , c=0, d= 𝟎 + } a = d - b; {b= 𝟎 + , a=?, c=0, d= 𝟎 + } f = d safe div c; f = d / c; {b= 𝟎 + , a=?, c=0, d= 𝟎 + , f=?}

Global Optimizations

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?

CFGs without loops b = c + d; e = c + d; Entry x = c + d; a = b + c; y = a + b; x = a + b; y = c + d; Exit

CFGs without loops ? {a, c, d} b = c + d; e = c + d; Entry Which variables may be live on some execution path? Entry {a, b, c, d} ? x = c + d; a = b + c; {b, c, d} {a, b, c, d} y = a + b; {a, b, c, d} {a, b, c, d} x = a + b; y = c + d; {a, b, c, d} {x, y} {x, y} Exit

CFGs without loops b = c + d; e = c + d; {c, d} Entry {b, c, d} Need to combine currently-computed value with new value Entry {b, c, d} x = c + d; a = b + c; {b, c, d} {a, b, c, d} y = a + b; {a, b, c, d} {a, b, c, d} x = a + b; y = c + d; {a, b, c, d} {x, y} {x, y} Exit

CFGs without loops {a, c, d} b = c + d; e = c + d; Entry {a, b, c, d} x = c + d; a = b + c; {a, b, c, d} y = a + b; {a, b, c, d} {a, b, c, d} x = a + b; y = c + d; {a, b, c, d} {x, y} {x, y} Exit

CFGs without loops b = c + d; Entry a = b + c; x = a + b; y = c + d; Exit

CFGs without loops b = c + d; Entry a = b + c; x = a + b; y = c + d; Exit

CFGs with loops b = c + d; c = c + d; IfZ ... Entry a = b + c; d = a + c; c = a + b; a = a + b; d = b + c; ? Exit {a}

CFGs with loops - initialization {} b = c + d; c = c + d; Entry a = b + c; d = a + c; {} {} c = a + b; a = a + b; d = b + c; {} Exit {a}

CFGs with loops - iteration {} b = c + d; c = c + d; Entry {} a = b + c; d = a + c; {} c = a + b; a = a + b; d = b + c; {} {a} Exit {a}

CFGs with loops - iteration {} b = c + d; c = c + d; Entry {} a = b + c; d = a + c; {} c = a + b; a = a + b; d = b + c; {a, b, c} {a} Exit {a}

CFGs with loops - iteration {} b = c + d; c = c + d; Entry {} a = b + c; d = a + c; {} c = a + b; {a, b, c} a = a + b; d = b + c; {a, b, c} {a} Exit {a}

CFGs with loops - iteration {} b = c + d; c = c + d; Entry {b, c} a = b + c; d = a + c; {} c = a + b; {a, b, c} a = a + b; d = b + c; {a, b, c} {a} Exit {a}

CFGs with loops - iteration {} b = c + d; c = c + d; Entry {b, c} {b, c} a = b + c; d = a + c; {} c = a + b; {a, b, c} a = a + b; d = b + c; {a, b, c} {a} Exit {a}

CFGs with loops - iteration {c, d} b = c + d; c = c + d; Entry {b, c} a = b + c; d = a + c; {b, c} {} c = a + b; {a, b, c} {a, b, c} a = a + b; d = b + c; {a, b, c} {a} Exit {a}

CFGs with loops - iteration {c, d} b = c + d; c = c + d; Entry {b, c} a = b + c; d = a + c; {b, c} {a, b} c = a + b; {a, b, c} {a, b, c} a = a + b; d = b + c; {a, b, c} {a} Exit {a}

CFGs with loops - iteration {c, d} b = c + d; c = c + d; Entry {b, c} a = b + c; d = a + c; {b, c} {a, b} c = a + b; {a, b, c} {a, b, c} a = a + b; d = b + c; {a, b, c} {a} Exit {a}

CFGs with loops - iteration {c, d} b = c + d; c = c + d; Entry {b, c} a = b + c; d = a + c; {b, c} {a, b} c = a + b; {a, b, c} {a, b, c} a = a + b; d = b + c; {a, b, c} {a, c, d} Exit {a}

CFGs with loops - iteration {c, d} b = c + d; c = c + d; Entry {b, c} a = b + c; d = a + c; {b, c} {a, b} c = a + b; {a, b, c} {a, b, c} a = a + b; d = b + c; {a, b, c} {a, c, d} Exit {a}

CFGs with loops - iteration {c, d} b = c + d; c = c + d; Entry {b, c} a = b + c; d = a + c; {b, c} {a, b} c = a + b; {a, b, c} {a, b, c} a = a + b; d = b + c; {a, b, c} {a, c, d} Exit {a}

CFGs with loops - iteration {c, d} b = c + d; c = c + d; Entry {b, c} a = b + c; d = a + c; {b, c} {a, b} c = a + b; {a, b, c} {a, b, c} a = a + b; d = b + c; {a, b, c} {a, c, d} Exit {a}

CFGs with loops - iteration {c, d} b = c + d; c = c + d; Entry {a, b, c} a = b + c; d = a + c; {b, c} {a, b} c = a + b; {a, b, c} {a, b, c} a = a + b; d = b + c; {a, b, c} {a, c, d} Exit {a}

CFGs with loops - iteration {a, c, d} b = c + d; c = c + d; Entry {a, b, c} a = b + c; d = a + c; {b, c} {a, b} c = a + b; {a, b, c} {a, b, c} a = a + b; d = b + c; {a, b, c} {a, c, d} Exit {a}

CFGs with loops - iteration {a, c, d} b = c + d; c = c + d; Entry {a, b, c} a = b + c; d = a + c; {b, c} {a, b} c = a + b; {a, b, c} {a, b, c} a = a + b; d = b + c; {a, b, c} {a, c, d} Exit {a}

Join semilattices A join semilattice is a ordering defined on a set of elements Any two elements have some join that is the smallest element larger than both elements There is a unique bottom element, which is smaller than all other elements Intuitively: The join of two elements represents combining information from two elements by an overapproximation The bottom element represents “no information yet” or “the least conservative possible answer”

Formal definitions A join semilattice is a pair (V, ), where V is a domain of elements  is a join operator that is commutative: x  y = y  x associative: (x  y)  z = x  (y  z) idempotent: x  x = x If x  y = z, we say that z is the join or (least upper bound) of x and y Every join semilattice has a bottom element denoted  such that   x = x for all x

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 join 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 join operator

A semilattice for zero value analysis One possible semilattice for this analysis is shown here (for each variable): ? 𝟎 − 𝟎 + Undefined

Global constant propagation entry Undefined x = 6; Undefined y = x; Undefined z = y; Undefined x=Undefined y=Undefined z=Undefined w=Undefined w = x; Undefined z = y / x; Undefined x = -5; Undefined exit

Global constant propagation x = 6; Undefined entry Undefined y = x; Undefined z = y; Undefined w = x; Undefined z = y / x; Undefined x = -5; Undefined exit

Global constant propagation Undefined x = 6; Undefined entry Undefined y = x; Undefined z = y; Undefined w = x; Undefined z = y / x; Undefined x = -5; Undefined exit

Global constant propagation Undefined x = 6; x = 𝟎 + entry Undefined y = x; Undefined z = y; Undefined w = x; Undefined z = y / x; Undefined x = -5; Undefined exit

Global constant propagation Undefined x = 6; x = 𝟎 + entry Undefined y = x; Undefined z = y; Undefined w = x; Undefined z = y / x; Undefined x = -5; Undefined exit

Global constant propagation Undefined x = 6; x = 𝟎 + entry Undefined x= 𝟎 + y = x; Undefined z = y; Undefined w = x; Undefined z = y / x; Undefined x = -5; Undefined exit

Global constant propagation Undefined x = 6; x = 𝟎 + entry Undefined x= 𝟎 + y = x; x= 𝟎 + ,y= 𝟎 + z = y; Undefined w = x; Undefined z = y / x; Undefined x = -5; Undefined exit

Global constant propagation Undefined x = 6; x = 𝟎 + entry Undefined x= 𝟎 + y = x; x= 𝟎 + ,y= 𝟎 + z = y; Undefined w = x; Undefined y= 𝟎 +  y=Undefined gives what? z = y / x; Undefined x = -5; Undefined exit

Global constant propagation Undefined x = 6; x = 𝟎 + entry Undefined x= 𝟎 + y = x; x= 𝟎 + ,y= 𝟎 + z = y; Undefined x= 𝟎 + ,y= 𝟎 + w = x; Undefined z = y / x; Undefined x = -5; Undefined exit

Global constant propagation Undefined x = 6; x = 𝟎 + entry Undefined x= 𝟎 + y = x; x= 𝟎 + ,y= 𝟎 + z = y; Undefined x= 𝟎 + ,y= 𝟎 + w = x; x=y=w= 𝟎 + z = y / x; Undefined x = -5; Undefined exit

Global constant propagation Undefined x = 6; x = 𝟎 + entry Undefined x= 𝟎 + y = x; x= 𝟎 + ,y= 𝟎 + z = y; Undefined x= 𝟎 + ,y= 𝟎 + w = x; x=y=w= 𝟎 + z = y / x; Undefined x = -5; Undefined exit

Global constant propagation Undefined x = 6; x = 𝟎 + entry Undefined x= 𝟎 + y = x; x= 𝟎 + ,y= 𝟎 + z = y; Undefined x= 𝟎 + ,y= 𝟎 + w = x; x=y=w= 𝟎 + x=y=w= 𝟎 + z = y / x; Undefined x = -5; Undefined exit

Global constant propagation Undefined x = 6; x = 𝟎 + entry Undefined x= 𝟎 + y = x; x= 𝟎 + ,y= 𝟎 + z = y; Undefined x= 𝟎 + ,y= 𝟎 + w = x; x=y=w= 𝟎 + x=y=w= 𝟎 + z = y / x; x=y=w=z= 𝟎 + x = -5; Undefined exit

Global constant propagation Undefined x = 6; x = 𝟎 + entry Undefined x= 𝟎 + y = x; x= 𝟎 + ,y= 𝟎 + z = y; Undefined x= 𝟎 + ,y= 𝟎 + w = x; x=y=w= 𝟎 + x=y=w= 𝟎 + z = y / x; x=y=w=z= 𝟎 + x = -5; Undefined exit

Global constant propagation Undefined x = 6; x = 𝟎 + entry Undefined x= 𝟎 + y = x; x= 𝟎 + ,y= 𝟎 + z = y; Undefined x= 𝟎 + ,y= 𝟎 + w = x; x=y=w= 𝟎 + x=y=w= 𝟎 + z = y / x; x=y=w=z= 𝟎 + x=y=w=z= 𝟎 + x = -5; Undefined exit

Global constant propagation Undefined x = 6; x = 𝟎 + entry Undefined x= 𝟎 + y = x; x= 𝟎 + ,y= 𝟎 + z = y; Undefined x= 𝟎 + ,y= 𝟎 + w = x; x=y=w= 𝟎 + x=y=w= 𝟎 + z = y / x; x=y=w=z= 𝟎 + x=y=w=z= 𝟎 + x = -5; x= 𝟎 − , y=w=z= 𝟎 + exit

Global constant propagation Undefined x = 6; x = 𝟎 + entry Undefined x= 𝟎 + y = x; x= 𝟎 + ,y= 𝟎 + z = y; Undefined x= 𝟎 + ,y= 𝟎 + w = x; x=y=w= 𝟎 + x=y=w= 𝟎 + z = y / x; x=y=w=z= 𝟎 + x=y=w=z= 𝟎 + x = -5; x= 𝟎 − , y=w=z= 𝟎 + exit

Global constant propagation Undefined x = 6; x = 𝟎 + entry Undefined x= 𝟎 + y = x; x= 𝟎 + ,y= 𝟎 + x = 𝟎 + z = y; Undefined x= 𝟎 + ,y= 𝟎 + w = x; x=y=w= 𝟎 + x=y=w= 𝟎 + z = y / x; x=y=w=z= 𝟎 + x=y=w=z= 𝟎 + x = -5; x= 𝟎 − , y=w=z= 𝟎 + exit

Global constant propagation Undefined x = 6; x = 𝟎 + entry Undefined x= 𝟎 + y = x; x= 𝟎 + ,y= 𝟎 + x = 𝟎 + z = y; x = 𝟎 + x= 𝟎 + ,y= 𝟎 + w = x; x=y=w= 𝟎 + x=y=w= 𝟎 + z = y / x; x=y=w=z= 𝟎 + x=y=w=z= 𝟎 + x = -5; x= 𝟎 − , y=w=z= 𝟎 + exit

Global constant propagation Undefined x = 6; x = 𝟎 + entry Undefined x= 𝟎 + y = x; x= 𝟎 + ,y= 𝟎 + x = 𝟎 + z = y; x = 𝟎 + x= 𝟎 + ,y= 𝟎 + w = x; x=y=w= 𝟎 + x= 𝟎 +  x= 𝟎 − gives what? x=y=w= 𝟎 + z = y / x; x=y=w=z= 𝟎 + x=y=w=z= 𝟎 + x = -5; x= 𝟎 − , y=w=z= 𝟎 + exit

Global constant propagation Undefined x = 6; x = 𝟎 + entry Undefined x= 𝟎 + y = x; x= 𝟎 + ,y= 𝟎 + x = 𝟎 + z = y; x = 𝟎 + x= 𝟎 + ,y= 𝟎 + w = x; x=y=w= 𝟎 + y=w= 𝟎 + ,x=? z = y / x; x=y=w=z= 𝟎 + x=y=w=z= 𝟎 + x = -5; x= 𝟎 − , y=w=z= 𝟎 + exit

Global constant propagation Undefined x = 6; x = 𝟎 + entry Undefined x= 𝟎 + y = x; x= 𝟎 + ,y= 𝟎 + x = 𝟎 + z = y; x = 𝟎 + x= 𝟎 + ,y= 𝟎 + w = x; x=y=w= 𝟎 + y=w= 𝟎 + ,x=? z = y / x; y=w= 𝟎 + ,x=z=? x=y=w=z= 𝟎 + x = -5; x= 𝟎 − , y=w=z= 𝟎 + exit

Global constant propagation Undefined x = 6; x = 𝟎 + entry Undefined x= 𝟎 + y = x; x= 𝟎 + ,y= 𝟎 + x = 𝟎 + z = y; x = 𝟎 + x= 𝟎 + ,y= 𝟎 + w = x; x=y=w= 𝟎 + y=w= 𝟎 + ,x=? z = y / x; y=w= 𝟎 + ,x=z=? y=w= 𝟎 + ,x=z=? x = -5; x= 𝟎 − , y=w=z= 𝟎 + exit

Global constant propagation Undefined x = 6; x = 𝟎 + entry Undefined x= 𝟎 + y = x; x= 𝟎 + ,y= 𝟎 + x = 𝟎 + z = y; x = 𝟎 + x= 𝟎 + ,y= 𝟎 + w = x; x=y=w= 𝟎 + Global analysis reached fixpoint y=w= 𝟎 + ,x=? z = y / x; y=w= 𝟎 + ,x=z=? y=w= 𝟎 + ,x=z=? x = -5; y=w= 𝟎 + ,x=z=? exit