Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides...

194
Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav 1

Transcript of Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides...

Page 1: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

1

Compilation 0368-3133 (Semester A, 2013/14)

Lecture 12: Abstract Interpretation

Noam Rinetzky

Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav

Page 2: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

2

What is a compiler?

“A compiler is a computer program that transforms source code written in a programming language (source language) into another language (target language).

The most common reason for wanting to transform source code is to create an executable program.”

--Wikipedia

Page 3: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

3

AST

+ Sy

m. T

ab.

Stages of compilationSource code

(program)

LexicalAnalysis

Syntax Analysis

Parsing

Context Analysis

Portable/Retargetable

code generation

Target code

(executable)

Asse

mbl

y

IRText

Toke

n st

ream

AST

CodeGeneration

Page 4: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

4

Inst

ructi

on s

elec

tion

AST

+ Sy

m. T

ab.

Stages of CompilationSource code

(program)

LexicalAnalysis

Syntax Analysis

Parsing

Context Analysis

Portable/Retargetable

code generation

Target code

(executable)

Asse

mbl

y

IRText

Toke

n st

ream

AST

“Nai

ve”

IRIR

Opti

miza

tion

IR (T

AC) g

ener

ation

“Ass

embl

y”

(sym

bolic

regi

ster

s)

Peep

hole

opti

miza

tion

Asse

mbl

y

CodeGeneration

regi

ster

allo

catio

n

Page 5: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

5

Optimization points

sourcecode

Frontend IR

Codegenerator

targetcode

Program AnalysisAbstract interpretation

today

Page 6: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

6

Program Analysis

• In order to optimize a program, the compiler has to be able to reason about the properties of that program

• An analysis is called sound if it never asserts an incorrect fact about a program

• All the analyses we will discuss in this class are sound– (Why?)

Page 7: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

7

Optimization path

IR Control-FlowGraph

CFGbuilder

ProgramAnalysis

AnnotatedCFG

OptimizingTransformation

TargetCode

CodeGeneration

(+optimizations)

donewith IR

optimizations

IRoptimizations

Page 8: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

8

Soundness

int x;int y;

if (y < 5) x = 137;else x = 42;

Print(x);

“At this point in theprogram, x holds some

integer value”

Page 9: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

9

Soundness

int x;int y;

if (y < 5) x = 137;else x = 42;

Print(x);

“At this point in theprogram, x is either 137 or 42”

Page 10: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

10

(Un) Soundness

int x;int y;

if (y < 5) x = 137;else x = 42;

Print(x);

“At this point in theprogram, x is 137”

Page 11: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

11

Soundness & Precision

int x;int y;

if (y < 5) x = 137;else x = 42;

Print(x);

“At this point in theprogram, x is either 137,

42, or 271”

Page 12: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

12

Semantics-preserving optimizations

• An optimization is semantics-preserving if it does not alter the semantics (meaning) of the original programEliminating unnecessary temporary variablesComputing values that are known statically at compile-

time instead of computing them at runtimeEvaluating iteration-independent expressions outside

of a loop instead of inside✗Replacing bubble sort with quicksort (why?)

• The optimizations we will consider in this class are all semantics-preserving

Page 13: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

13

Types of optimizations

• An optimization is local if it works on just a single basic block

• An optimization is global if it works on an entire control-flow graph

Page 14: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

14

Local optimizations

_t0 = 137;y = _t0;IfZ x Goto _L0;

start

_t1 = y;z = _t1;

_t2 = y;x = _t2;

start

int main() {int x;int y;int z;

y = 137;if (x == 0)

z = y;else

x = y;}

Page 15: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

15

Local optimizations

y = 137;IfZ x Goto _L0;

start

z = y; x = y;

End

int main() {int x;int y;int z;

y = 137;if (x == 0)

z = y;else

x = y;}

Page 16: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

16

Global optimizations

y = 137;IfZ x Goto _L0;

start

z = y; x = y;

End

int main() {int x;int y;int z;

y = 137;if (x == 0)

z = y;else

x = y;}

Page 17: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

17

Global optimizations

y = 137;IfZ x Goto _L0;

start

z = 137; x = 137;

End

int main() {int x;int y;int z;

y = 137;if (x == 0)

z = y;else

x = y;}

Page 18: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

18

Global Analyses

• Common subexpression elimination• Copy propagation• Dead code elimination• Live variables

– Used for register allocation

Page 19: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

19

Global liveness analysis

a=b+c

s2 s3

IN[s2] IN[s3]

OUT[s]=IN[s2] IN[s3]

IN[s]=(OUT[s] – {a}) {b, c}

Page 20: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

20

Live variable analysis- initialization

Exit

a = a + b;d = b + c;

c = a + b;a = b + c;d = a + c;

b = c + d;c = c + d;Entry

{a}

{}{}

{}

{}

Page 21: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

21

Live variable analysis

Exit

a = a + b;d = b + c;

c = a + b;a = b + c;d = a + c;

b = c + d;c = c + d;Entry

{a}

{}{}

{}

{}

{a}

Page 22: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

22Exit

a = a + b;d = b + c;

c = a + b;a = b + c;d = a + c;

b = c + d;c = c + d;Entry

{a}

{}{}

{}

{a, b, c}

{a}

Live variable analysis

IN[s2]=(OUT[s2] – {d}) {b, c}

IN[s1]=(OUT[s1] – {a}) {a, b}

?

Page 23: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

23Exit

a = a + b;d = b + c;

c = a + b;a = b + c;d = a + c;

b = c + d;c = c + d;Entry

{a}

{}{}

{}

{a, b, c}

{a}

{a, b, c}

Live variable analysis

Page 24: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

24Exit

a = a + b;d = b + c;

c = a + b;a = b + c;d = a + c;

b = c + d;c = c + d;Entry

{a}

{}{b, c}

{}

{a, b, c}

{a}

{a, b, c}

CFGs with loops - iteration

Page 25: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

25Exit

a = a + b;d = b + c;

c = a + b;a = b + c;d = a + c;

b = c + d;c = c + d;Entry

{a}

{}{b, c}

{}

{a, b, c}

{a}

{a, b, c}

{b, c}

CFGs with loops - iteration

Page 26: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

26Exit

a = a + b;d = b + c;

c = a + b;a = b + c;d = a + c;

b = c + d;c = c + d;Entry

{a}

{}{b, c}

{c, d}

{a, b, c}

{a}

{a, b, c}

{b, c}

{a, b, c}

CFGs with loops - iteration

Page 27: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

27Exit

a = a + b;d = b + c;

c = a + b;a = b + c;d = a + c;

b = c + d;c = c + d;Entry

{a}

{a, b}{b, c}

{c, d}

{a, b, c}

{a}

{a, b, c}

{b, c}

{a, b, c}

Live variable analysis

Page 28: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

28Exit

a = a + b;d = b + c;

c = a + b;a = b + c;d = a + c;

b = c + d;c = c + d;Entry

{a}

{a, b}{b, c}

{c, d}

{a, b, c}

{a}

{a, b, c}

{b, c}

{a, b, c}

Live variable analysis

Page 29: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

29Exit

a = a + b;d = b + c;

c = a + b;a = b + c;d = a + c;

b = c + d;c = c + d;Entry

{a}

{a, b}{b, c}

{c, d}

{a, b, c}

{a, c, d}

{a, b, c}

{b, c}

{a, b, c}

Live variable analysis

Page 30: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

30Exit

a = a + b;d = b + c;

c = a + b;a = b + c;d = a + c;

b = c + d;c = c + d;Entry

{a}

{a, b}{b, c}

{c, d}

{a, b, c}

{a, c, d}

{a, b, c}

{b, c}

{a, b, c}

Live variable analysis

Page 31: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

31Exit

a = a + b;d = b + c;

c = a + b;a = b + c;d = a + c;

b = c + d;c = c + d;Entry

{a}

{a, b}{b, c}

{c, d}

{a, b, c}

{a, c, d}

{a, b, c}

{b, c}

{a, b, c}

Live variable analysis

Page 32: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

32Exit

a = a + b;d = b + c;

c = a + b;a = b + c;d = a + c;

b = c + d;c = c + d;Entry

{a}

{a, b}{b, c}

{c, d}

{a, b, c}

{a, c, d}

{a, b, c}

{b, c}

{a, b, c}

Live variable analysis

Page 33: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

33Exit

a = a + b;d = b + c;

c = a + b;a = b + c;d = a + c;

b = c + d;c = c + d;Entry

{a}

{a, b}{b, c}

{c, d}

{a, b, c}

{a, c, d}

{a, b, c}

{a, b, c}

{a, b, c}

Live variable analysis

Page 34: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

34Exit

a = a + b;d = b + c;

c = a + b;a = b + c;d = a + c;

b = c + d;c = c + d;Entry

{a}

{a, b}{b, c}

{a, c, d}

{a, b, c}

{a, c, d}

{a, b, c}

{a, b, c}

{a, b, c}

Live variable analysis

Page 35: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

35

Live variable analysis

Exit

a = a + b;d = b + c;

c = a + b;a = b + c;d = a + c;

b = c + d;c = c + d;Entry

{a}

{a, b}{b, c}

{a, c, d}

{a, b, c}

{a, c, d}

{a, b, c}

{a, b, c}

{a, b, c}

Page 36: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

36

Kill Gen

Global liveness analysis: Kill/Gen

a=b+c

s2 s3

IN[s2] IN[s3]

OUT[s]=IN[s2] IN[s3]

IN[s]=(OUT[s] – {a}) {b, c}

Page 37: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

37

Formalizing data-flow 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– merging (joining) information – 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

Page 38: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

38

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• Merge: =

Page 39: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

39

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• Merge: = ?

Page 40: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

40

Why does this work? (Live Var.)• 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 41: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

41

Abstract Interpretation

• Theoretical foundations of program analysis

• Cousot and Cousot 1977

• Abstract meaning of programs– “Executed” at compile time

• Execution = Analysis

Page 42: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

42

Another view of program analysis

• 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 43: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

43

Another view of program analysis

• We want to reason about some property of the runtime behavior of the program

• Could we run the program and just watch what happens?

Page 44: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

44

Another view of program analysis

• The only way to find out exactly 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

Page 45: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

45

Another view of program analysis

• The only way to find out exactly 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• Inside a basic block, it is simpler

– Basic blocks contain no loops– There is only one path through the basic block

Page 46: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

46

Another view of program analysis

• The only way to find out exactly 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• Inside a basic block, it is simpler

– Basic blocks contain no loops– There is only one path through the basic block– But still …

Page 47: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

47

Assigning new semantics (Local)

• 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

Page 48: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

48

Assigning new semantics (Global)

• 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

• Merge information from different paths

Page 49: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

49

Abstract Interpretation

• 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

• Merge information from different paths• Treat the optimizer as an interpreter for

these new semantics

Page 50: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

50

Theory of Program Analysis

• 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 51: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

51

Join semilattices• A join semilattice is a ordering defined on a set of

elements– 0 ≤ 1 ≤ 2 ≤ …– {} ≤ {0} ≤ {0,1} , {1,2} ≤ {0,1,2} ≤ {1,2,3,4}

• 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– The join of two elements represents combining

(merging) information from two elements by an overapproximation

• The bottom element represents “no information yet” or “the least conservative possible answer”

/

Page 52: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

52

Join semilattice for liveness

{}

{a} {b} {c}

{a, b} {a, c} {b, c}

{a, b, c}

Bottom element

Page 53: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

53

What is the join of {b} and {c}?

{}

{a} {b} {c}

{a, b} {a, c} {b, c}

{a, b, c}

Page 54: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

54

What is the join of {b} and {c}?

{}

{a} {b} {c}

{a, b} {a, c} {b, c}

{a, b, c}

Page 55: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

55

What is the join of {b} and {a,c}?

{}

{a} {b} {c}

{a, b} {a, c} {b, c}

{a, b, c}

Page 56: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

56

What is the join of {b} and {a,c}?

{}

{a} {b} {c}

{a, b} {a, c} {b, c}

{a, b, c}

Page 57: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

57

What is the join of {a} and {a,b}?

{}

{a} {b} {c}

{a, b} {a, c} {b, c}

{a, b, c}

Page 58: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

58

What is the join of {a} and {a,b}?

{}

{a} {b} {c}

{a, b} {a, c} {b, c}

{a, b, c}

Page 59: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

59

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 joinor (least upper bound) of x and y

• Every join semilattice has a bottom element denoted such that x = x for all x

Page 60: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

60

Join semilattices and ordering

{}

{a} {b} {c}

{a, b} {a, c} {b, c}

{a, b, c}Greater

Lower

Page 61: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

61

Join semilattices and ordering

{}

{a} {b} {c}

{a, b} {a, c} {b, c}

{a, b, c}Least precise

Most precise

Page 62: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

62

Join semilattices and orderings

• Every join semilattice (V, ) induces an ordering relationship over its elements

• Define x y iff x y = y• Need to prove

– Reflexivity: x x– Antisymmetry: If x y and y x, then x = y– Transitivity: If x y and y z, then x z

Page 63: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

63

An example join 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}• Bottom element is 0:

– max{0, a} = a• What is the ordering over these elements?

Page 64: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

64

A join 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)• Bottom element:

– The empty set: Ø x = x• What is the ordering over these elements?

Page 65: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

65

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?

• What value do we give to basic blocks we haven't seen yet?

• How do we know that the algorithm always terminates?

Page 66: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

66

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?– Take the join of all information from those blocks

• What value do we give to basic blocks we haven't seen yet?– Use the bottom element

• How do we know that the algorithm always terminates?– Actually, we still don't! More on that later

Page 67: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

67

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

Page 68: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

68

Running global analyses

• Assume that (D, V, , F, I) is a forward analysis• Set OUT[s] = for all statements s• Set OUT[entry] = 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– This is sometimes called chaotic iteration

Page 69: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

69

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 70: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

70

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 71: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

71

Global constant propagation

exit x = 4;

z = x;

w = x;

y = x; z = y;

x = 6;entry

Page 72: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

72

Global constant propagation

exit x = 4;

z = x;

w = x;

y = x; z = y;

x = 6;entry

Page 73: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

73

Global constant propagation

exit x = 4;

z = x;

w = 6;

y = 6; z = y;

x = 6;entry

Page 74: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

74

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 75: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

75

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 76: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

76

Defining a join operator

• The join 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 join 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 join 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 77: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

77

A semilattice for constant propagation• One possible semilattice for this analysis is

shown here (for each variable):

Undefined

0-1-2 1 2 ......

Not-a-constant

The lattice is infinitely wide

Page 78: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

78

A semilattice for constant propagation• One possible semilattice for this analysis is

shown here (for each variable):

Undefined

0-1-2 1 2 ......

Not-a-constant

• Note:• The join of any two different constants is Not-a-Constant• The join of Not a Constant and any other value is Not-a-Constant• The join of Undefined and any other value is that other value

Page 79: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

79

Global constant propagation

exit x = 4;Undefined

z = x;Undefined

w = x;Undefined

y = x;Undefined

z = y;Undefined

x = 6;Undefined

entryUndefined

x=Undefinedy=Undefinedz=Undefinedw=Undefined

Page 80: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

80

Global constant propagation

exit x = 4;Undefined

z = x;Undefined

w = x;Undefined

y = x;Undefined

z = y;Undefined

x = 6;Undefined

entryUndefined

Page 81: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

81

Global constant propagation

exit x = 4;Undefined

z = x;Undefined

w = x;Undefined

y = x;Undefined

z = y;Undefined

Undefinedx = 6;Undefined

entryUndefined

Page 82: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

82

Global constant propagation

exit x = 4;Undefined

z = x;Undefined

w = x;Undefined

y = x;Undefined

z = y;Undefined

Undefinedx = 6;x = 6, y=z=w=

entryUndefined

Page 83: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

83

Global constant propagation

exit x = 4;Undefined

z = x;Undefined

w = x;Undefined

y = x;Undefined

z = y;Undefined

Undefinedx = 6;x = 6, y=z=w=

entryUndefined

Page 84: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

84

Global constant propagation

exit x = 4;Undefined

z = x;Undefined

w = x;Undefined

x=6y = x;Undefined

z = y;Undefined

Undefinedx = 6;x = 6

entryUndefined

Page 85: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

85

Global constant propagation

exit x = 4;Undefined

z = x;Undefined

w = x;Undefined

x=6y = x;x=6,y=6

z = y;Undefined

Undefinedx = 6;x = 6

entryUndefined

Page 86: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

86

Global constant propagation

exit x = 4;Undefined

z = x;Undefined

w = x;Undefined

x=6y = x;x=6,y=6

z = y;Undefined

Undefinedx = 6;x = 6

entryUndefined

y=6 y=Undefined gives what?

Page 87: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

87

Global constant propagation

exit x = 4;Undefined

z = x;Undefined

x=6,y=6w = x;Undefined

x=6y = x;x=6,y=6

z = y;Undefined

Undefinedx = 6;x = 6

entryUndefined

Page 88: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

88

Global constant propagation

exit x = 4;Undefined

z = x;Undefined

x=6,y=6w = x;Undefined

x=6y = x;x=6,y=6

z = y;Undefined

Undefinedx = 6;x = 6

entryUndefined

Page 89: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

89

Global constant propagation

exit x = 4;Undefined

z = x;Undefined

x=6,y=6w = x;x=y=w=6

x=6y = x;x=6,y=6

z = y;Undefined

Undefinedx = 6;x = 6

entryUndefined

Page 90: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

90

Global constant propagation

exit x = 4;Undefined

z = x;Undefined

x=6,y=6w = x;x=y=w=6

x=6y = x;x=6,y=6

z = y;Undefined

Undefinedx = 6;x = 6

entryUndefined

Page 91: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

91

Global constant propagation

exit x = 4;Undefined

x=y=w=6z = x;Undefined

x=6,y=6w = x;x=y=w=6

x=6y = x;x=6,y=6

z = y;Undefined

Undefinedx = 6;x = 6

entryUndefined

Page 92: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

92

Global constant propagation

exit x = 4;Undefined

x=y=w=6z = x;x=y=w=z=6

x=6,y=6w = x;x=y=w=6

x=6y = x;x=6,y=6

z = y;Undefined

Undefinedx = 6;x = 6

entryUndefined

Page 93: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

93

Global constant propagation

exit x = 4;Undefined

x=y=w=6z = x;x=y=w=z=6

x=6,y=6w = x;x=y=w=6

x=6y = x;x=6,y=6

z = y;Undefined

Undefinedx = 6;x = 6

entryUndefined

Page 94: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

94

Global constant propagation

exitx=y=w=z=6x = 4;Undefined

x=y=w=6z = x;x=y=w=z=6

x=6,y=6w = x;x=y=w=6

x=6y = x;x=6,y=6

z = y;Undefined

Undefinedx = 6;x = 6

entryUndefined

Page 95: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

95

Global constant propagation

exitx=y=w=z=6x = 4;x=4, y=w=z=6

x=y=w=6z = x;x=y=w=z=6

x=6,y=6w = x;x=y=w=6

x=6y = x;x=6,y=6

z = y;Undefined

Undefinedx = 6;x = 6

entryUndefined

Page 96: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

96

Global constant propagation

exitx=y=w=z=6x = 4;x=4, y=w=z=6

x=y=w=6z = x;x=y=w=z=6

x=6,y=6w = x;x=y=w=6

x=6y = x;x=6,y=6

z = y;Undefined

Undefinedx = 6;x = 6

entryUndefined

Page 97: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

97

Global constant propagation

exitx=y=w=z=6x = 4;x=4, y=w=z=6

x=y=w=6z = x;x=y=w=z=6

x=6,y=6w = x;x=y=w=6

x=6y = x;x=6,y=6

x = 6z = y;Undefined

Undefinedx = 6;x = 6

entryUndefined

Page 98: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

98

Global constant propagation

exitx=y=w=z=6x = 4;x=4, y=w=z=6

x=y=w=6z = x;x=y=w=z=6

x=6,y=6w = x;x=y=w=6

x=6y = x;x=6,y=6

x = 6z = y;Undefined

Undefinedx = 6;x = 6

entryUndefined

Page 99: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

99

Global constant propagation

exitx=y=w=z=6x = 4;x=4, y=w=z=6

x=y=w=6z = x;x=y=w=z=6

x=6,y=6w = x;x=y=w=6

x=6y = x;x=6,y=6

x = 6z = y;x = 6

Undefinedx = 6;x = 6

entryUndefined

Page 100: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

100

Global constant propagation

exitx=y=w=z=6x = 4;x=4, y=w=z=6

x=y=w=6z = x;x=y=w=z=6

x=6,y=6w = x;x=y=w=6

x=6y = x;x=6,y=6

x = 6z = y;x = 6

Undefinedx = 6;x = 6

entryUndefined

x=6 x=4 gives what?

Page 101: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

101

Global constant propagation

exitx=y=w=z=6x = 4;x=4, y=w=z=6

y=w=6, x=z = x;x=y=w=z=6

x=6,y=6w = x;x=y=w=6

x=6y = x;x=6,y=6

x = 6z = y;x = 6

Undefinedx = 6;x = 6

entryUndefined

Page 102: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

102

Global constant propagation

exitx=y=w=z=6x = 4;x=4, y=w=z=6

y=w=6,x=z = x;y=w=6,z=x=

x=6,y=6w = x;x=y=w=6

x=6y = x;x=6,y=6

x = 6z = y;x = 6

Undefinedx = 6;x = 6

entryUndefined

Page 103: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

103

Global constant propagation

exitx=y=w=z=6x = 4;x=4,y=w=6,z=

y=w=6,x=z = x;y=w=6,z=x=

x=6,y=6w = x;x=y=w=6

x=6y = x;x=6,y=6

x = 6z = y;x = 6

Undefinedx = 6;x = 6

entryUndefined

Page 104: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

104

Global constant propagation

exity=w=6,z=x= x = 4;x=4,y=w=6,z=

y=w=6,x=z = x;y=w=6

x=6,y=6w = x;x=y=w=6

x=6y = x;x=6,y=6

x = 6z = y;x = 6

Undefinedx = 6;x = 6

entryUndefined

Page 105: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

105

Global constant propagation

exity=w=6,z=x= x = 4;x=4,y=w=6,z=

y=w=6,x=z = x;y=w=6

x=6,y=6w = x;x=y=w=6

x=6y = x;x=6,y=6

x = 6z = y;x = 6

Undefinedx = 6;x = 6

entryUndefined

Page 106: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

106

Global constant propagation

exity=w=6,z=x= x = 4;x=4,y=w=6,z=

y=w=6, z=x=z = x;y=w=6, z=x=

x=6,y=6w = x;x=y=w=6

x=6y = x;x=6,y=6

x = 6z = y;x = 6

Undefinedx = 6;x = 6

entryUndefined

Page 107: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

107

Global constant propagation

exity=w=6,z=x= x = 4;x=4,y=w=6,z=

y=w=6, z=x=z = x;y=w=6, z=x=

x=6,y=6w = x;x=y=w=6

x=6y = x;x=6,y=6

x = 6z = y;x = 6

Undefinedx = 6;x = 6

entryUndefined

Global analysisreached fixpoint

Page 108: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

108

Dataflow for constant propagation

• Direction: Forward• Semilattice: Vars {Undefined, 0, 1, -1, 2, -2, …, Not-a-

Constant}– Join mapping for variables point-wise

{x1,y1,z1} {x1,y2,zNot-a-Constant} = {x1,yNot-a-Constant,zNot-a-Constant}

• Transfer functions:– fx=k(V) = V|xk (update V by mapping x to k)– fx=a+b(V) = V|x?

• Initial value: x is Undefined– (When might we use some other value?)

Page 109: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

109

Dataflow for constant propagation

• Direction: Forward• Semilattice: Vars {Undefined, 0, 1, -1, 2, -2, …, Not-a-

Constant}– Join mapping for variables point-wise

{x1,y1,z1} {x1,y2,zNot-a-Constant} = {x1,yNot-a-Constant,zNot-a-Constant}

• Transfer functions:– fx=k(V) = V|xk (update V by mapping x to k)– fx=a+b(V) = V|x?

• Initial value: x is Undefined– (When might we use some other value?)

Page 110: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

110

Proving termination

• Our algorithm for running these analyses continuously loops until no changes are detected

• Given this, how do we know the analyses will eventually terminate?– In general, we don‘t

Page 111: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

111

Terminates?

Page 112: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

112

Liveness Analysis

• A variable is live at a point in a program if later in the program its value will be read before it is written to again

Page 113: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

113

Join semilattice definition

• 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 joinor (Least Upper Bound) of x and y

• Every join semilattice has a bottom element denoted such that x = x for all x

Page 114: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

114

Partial ordering induced by join

• Every join semilattice (V, ) induces an ordering relationship over its elements

• Define x y iff x y = y• Need to prove

– Reflexivity: x x– Antisymmetry: If x y and y x, then x = y– Transitivity: If x y and y z, then x z

Page 115: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

115

A join 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)• Bottom element:

– The empty set: Ø x = x• Ordering over elements = subset relation

Page 116: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

116

Join semilattice example for liveness

{}

{a} {b} {c}

{a, b} {a, c} {b, c}

{a, b, c}

Bottom element

Page 117: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

117

Dataflow 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 (sometimes called domain)– is a join operator over those values– F is a set of transfer functions fs : V V

(for every statement s)– I is an initial value

Page 118: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

118

Running global analyses• Assume that (D, V, , F, I) is a forward analysis• For every statement s maintain values before - IN[s] - and after -

OUT[s]• Set OUT[s] = for all statements s• Set OUT[entry] = I• Repeat until no values change:

– For each statement s with predecessorsPRED[s]={p1, 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– Chaotic iteration

Page 119: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

119

Proving termination

• Our algorithm for running these analyses continuously loops until no changes are detected

• Problem: how do we know the analyses will eventually terminate?

Page 120: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

120

A non-terminating analysis

• The following analysis will loop infinitely on any CFG containing a loop:

• Direction: Forward• Domain: ℕ• Join operator: max• Transfer function: f(n) = n + 1• Initial value: 0

Page 121: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

121

A non-terminating analysis

start

end

x++

Page 122: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

122

Initialization

start

end

x++0

0

Page 123: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

123

Fixed-point iteration

start

end

x++0

0

Page 124: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

124

Choose a block

start

end

x ++0

0

Page 125: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

125

Iteration 1

start

end

x ++0

0

0

Page 126: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

126

Iteration 1

start

end

x++1

0

0

Page 127: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

127

Choose a block

start

end

x++1

0

0

Page 128: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

128

Iteration 2

start

end

x ++1

0

0

Page 129: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

129

Iteration 2

start

end

x++1

0

1

Page 130: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

130

Iteration 2

start

end

x++2

0

1

Page 131: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

131

Choose a block

start

end

x++2

0

1

Page 132: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

132

Iteration 3

start

end

x++2

0

1

Page 133: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

133

Iteration 3

start

end

x++2

0

2

Page 134: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

134

Iteration 3

start

end

x++3

0

2

Page 135: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

135

Why doesn’t this terminate?• Values can increase without bound• Note that “increase” refers to the lattice ordering,

not the ordering on the natural numbers• The height of a semilattice is the length of the

longest increasing sequence in that semilattice• The dataflow framework is not guaranteed to

terminate for semilattices of infinite height• Note that a semilattice can be infinitely large but

have finite height– e.g. constant propagation 0

1

2

3

4

...

Page 136: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

136

Height of a lattice

• An increasing chain is a sequence of elements a1 a2 … ak

– The length of such a chain is k• The height of a lattice is the length of the maximal increasing

chain• For liveness with n program variables:

– {} {v1} {v1,v2} … {v1,…,vn}

• For available expressions it is the number of expressions of the form a=b op c– For n program variables and m operator types: mn3

Page 137: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

137

Another non-terminating analysis

• This analysis works on a finite-height semilattice, but will not terminate on certain CFGs:

• Direction: Forward• Domain: Boolean values true and false• Join operator: Logical OR• Transfer function: Logical NOT• Initial value: false

Page 138: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

138

A non-terminating analysis

start

end

x=!x

Page 139: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

139

Initialization

start

end

x=!xfalse

false

Page 140: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

140

Fixed-point iteration

start

end

x=!xfalse

false

Page 141: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

141

Choose a block

start

end

x=!xfalse

false

Page 142: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

142

Iteration 1

start

end

x=!xfalse

false

false

Page 143: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

143

Iteration 1

start

end

x=!xtrue

false

false

Page 144: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

144

Iteration 2

start

end

x=!xtrue

false

true

Page 145: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

145

Iteration 2

start

end

x=!xfalse

false

true

Page 146: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

146

Iteration 3

start

end

x=!xfalse

false

false

Page 147: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

147

Iteration 3

start

end

x=!xtrue

false

false

Page 148: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

148

Why doesn’t it terminate?• Values can loop indefinitely• Intuitively, the join operator keeps pulling

values up• If the transfer function can keep pushing

values back down again, then the values might cycle forever

false

true

false

true

false

...

Page 149: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

149

Why doesn’t it terminate?• Values can loop indefinitely• Intuitively, the join operator keeps pulling

values up• If the transfer function can keep pushing

values back down again, then the values might cycle forever

• How can we fix this?

false

true

false

true

false

...

Page 150: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

150

Monotone transfer functions

• A transfer function f is monotone iff if x y, then f(x) f(y)

• Intuitively, if you know less information about a program point, you can't “gain back” more information about that program point

• Many transfer functions are monotone, including those for liveness and constant propagation

• Note: Monotonicity does not mean that x f(x)– (This is a different property called extensivity)

Page 151: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

151

Liveness and monotonicity

• A transfer function f is monotone iff if x y, then f(x) f(y)

• Recall our transfer function for a = b + c is– fa = b + c(V) = (V – {a}) {b, c}

• Recall that our join operator is set union and induces an ordering relationship X Y iff X Y

• Is this monotone?

Page 152: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

152

Is constant propagation monotone?• A transfer function f is monotone iff

if x y, then f(x) f(y)• Recall our transfer functions

– fx=k(V) = V|xk (update V by mapping x to k)– fx=a+b(V) = V|xNot-a-Constant (assign Not-a-Constant)

• Is this monotone?

Undefined

0-1-2 1 2 ......

Not-a-constant

Page 153: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

153

The grand result

• Theorem: A dataflow analysis with a finite-height semilattice and family of monotone transfer functions always terminates

• Proof sketch:– The join operator can only bring values up– Transfer functions can never lower values back

down below where they were in the past (monotonicity)

– Values cannot increase indefinitely (finite height)

Page 154: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

154

An “optimality” result

• A transfer function f is distributive if f(a b) = f(a) f(b)for every domain elements a and b

• If all transfer functions are distributive then the fixed-point solution is the solution that would be computed by joining results from all (potentially infinite) control-flow paths– Join over all paths

• Optimal if we ignore program conditions

Page 155: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

155

An “optimality” result

If(*) Aelse B;

If(*) Celse D;

A B

*

*

C D

exit

A A

*

exit

B B

C D C D

fC(fA()fB()) fD(fA()fB())

fC(fA()) fD(fA()) fC(fB())fD(fB())

?=

Page 156: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

156

An “optimality” result

• A transfer function f is distributive if f(a b) = f(a) f(b)for every domain elements a and b

• If all transfer functions are distributive then the fixed-point solution is equal to the solution computed by joining results from all (potentially infinite) control-flow paths– Join over all paths

• Optimal if we pretend all control-flow paths can be executed by the program

• Which analyses use distributive functions?

Page 157: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

157

Loop optimizations

• Most of a program’s computations are done inside loops– Focus optimizations effort on loops

• The optimizations we’ve seen so far are independent of the control structure

• Some optimizations are specialized to loops– Loop-invariant code motion– (Strength reduction via induction variables)

• Require another type of analysis to find out where expressions get their values from– Reaching definitions

• (Also useful for improving register allocation)

Page 158: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

158

Loop invariant computation

y = t * 4x < y + z

endx = x + 1

start

y = …t = …z = …

Page 159: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

159

Loop invariant computation

y = t * 4x < y + z

endx = x + 1

start

y = …t = …z = …

t*4 and y+zhave same value on each iteration

Page 160: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

160

Code hoisting

x < w

endx = x + 1

start

y = …t = …z = …y = t * 4w = y + z

Page 161: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

161

What reasoning did we use?

y = t * 4x < y + z

endx = x + 1

start

y = …t = …z = …

y is defined inside loop but it is loop invariant since t*4 is loop-invariant

Both t and z are defined only outside of loop

constants are trivially loop-invariant

Page 162: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

162

What about now?

y = t * 4x < y + z

endx = x + 1t = t + 1

start

y = …t = …z = …

Now t is not loop-invariant and so are t*4 and y

Page 163: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

163

Loop-invariant code motion

• d: t = a1 op a2

– d is a program location• a1 op a2 loop-invariant (for a loop L) if computes the same value

in each iteration– Hard to know in general

• Conservative approximation– Each ai is a constant, or– All definitions of ai that reach d are outside L, or– Only one definition of of ai reaches d, and is loop-invariant itself

• Transformation: hoist the loop-invariant code outside of the loop

Page 164: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

164

Reaching definitions analysis• A definition d: t = … reaches a program location if there is a path from

the definition to the program location, along which the defined variable is never redefined

Page 165: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

165

Reaching definitions analysis• A definition d: t = … reaches a program location if there is a path

from the definition to the program location, along which the defined variable is never redefined

• Direction: Forward• Domain: sets of program locations that are definitions `• Join operator: union• Transfer function:

fd: a=b op c(RD) = (RD - defs(a)) {d} fd: not-a-def(RD) = RD– Where defs(a) is the set of locations defining a (statements of the form

a=...)• Initial value: {}

Page 166: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

166

Reaching definitions analysis

d4: y = t * 4

d4:x < y + z

d6: x = x + 1

d1: y = …

d2: t = …

d3: z = …

start

end{}

Page 167: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

167

Reaching definitions analysis

d4: y = t * 4

d4:x < y + z

d5: x = x + 1

start

d1: y = …

d2: t = …

d3: z = …

end{}

Page 168: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

168

Initialization

d4: y = t * 4

d4:x < y + z

d5: x = x + 1

start

d1: y = …

d2: t = …

d3: z = …

{}

{}

{}

{}

end{}

Page 169: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

169

Iteration 1

d4: y = t * 4

d4:x < y + z

d5: x = x + 1

start

d1: y = …

d2: t = …

d3: z = …

{}

{}

{}

{}

end{}

{}

Page 170: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

170

Iteration 1

d4: y = t * 4

d4:x < y + z

d5: x = x + 1

start

d1: y = …

d2: t = …

d3: z = …

{}

{}

{d1}

{d1, d2}

{d1, d2, d3}

end{}

{}

{}

Page 171: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

171

Iteration 2

d4: y = t * 4

x < y + z end

d5: x = x + 1

start

d1: y = …

d2: t = …

d3: z = …

{}

{}

{}

{d1}

{d1, d2}

{d1, d2, d3}

{}

{}

Page 172: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

172

Iteration 2

d4: y = t * 4

x < y + z end

d5: x = x + 1

start

d1: y = …

d2: t = …

d3: z = …

{}

{}

{d1, d2, d3}

{}

{d1}

{d1, d2}

{d1, d2, d3}

{}

{}

Page 173: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

173

Iteration 2

d4: y = t * 4

x < y + z end

d5: x = x + 1

start

d1: y = …

d2: t = …

d3: z = …

{}

{}

{d1, d2, d3}

{}

{d1}

{d1, d2}

{d1, d2, d3}

{d2, d3, d4}

{}

{}

Page 174: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

174

Iteration 2

d4: y = t * 4

x < y + z end

d5: x = x + 1

start

d1: y = …

d2: t = …

d3: z = …

{}

{}

{d1, d2, d3}

{}

{d1}

{d1, d2}

{d1, d2, d3}

{d2, d3, d4}

{d2, d3, d4}

{}

Page 175: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

175

Iteration 3

d4: y = t * 4

x < y + z end

d5: x = x + 1

start

d1: y = …

d2: t = …

d3: z = …

{}

{}

{d1, d2, d3}

{d2, d3, d4}

{}

{d1}

{d1, d2}

{d1, d2, d3}

{d2, d3, d4}

{d2, d3, d4}

{}

Page 176: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

176

Iteration 3

d4: y = t * 4

x < y + z end

d5: x = x + 1

start

d1: y = …

d2: t = …

d3: z = …

{}

{}

{d1, d2, d3}

{d2, d3, d4}

{}

{d1}

{d1, d2}

{d1, d2, d3}

{d2, d3, d4}

{d2, d3, d4}

{d2, d3, d4, d5}

Page 177: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

177

Iteration 4

d4: y = t * 4

x < y + z end

d5: x = x + 1

start

d1: y = …

d2: t = …

d3: z = …

{}

{}

{d1, d2, d3}

{d2, d3, d4}

{}

{d1}

{d1, d2}

{d1, d2, d3}

{d2, d3, d4}

{d2, d3, d4}

{d2, d3, d4, d5}

Page 178: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

178

Iteration 4

d4: y = t * 4

x < y + z end

d5: x = x + 1

start

d1: y = …

d2: t = …

d3: z = …

{}

{}

{d1, d2, d3, d4, d5}

{d2, d3, d4}

{}

{d1}

{d1, d2}

{d1, d2, d3}

{d2, d3, d4}

{d2, d3, d4}

{d2, d3, d4, d5}

Page 179: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

179

Iteration 4

d4: y = t * 4

x < y + z end

d5: x = x + 1

start

d1: y = …

d2: t = …

d3: z = …

{}

{}

{d1, d2, d3, d4, d5}

{d2, d3, d4}

{}

{d1}

{d1, d2}

{d1, d2, d3}

{d2, d3, d4, d5}

{d2, d3, d4, d5}

{d2, d3, d4, d5}

Page 180: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

180

Iteration 5

end

start

d1: y = …

d2: t = …

d3: z = …

{}

{}

{d2, d3, d4, d5}

{d1}

{d1, d2}

{d1, d2, d3}

d5: x = x + 1{d2, d3, d4}

{d2, d3, d4, d5}

d4: y = t * 4

x < y + z

{d1, d2, d3, d4, d5}

{d2, d3, d4, d5}

{d2, d3, d4, d5}

Page 181: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

181

Iteration 6

end

start

d1: y = …

d2: t = …

d3: z = …

{}

{}

{d2, d3, d4, d5}

{d1}

{d1, d2}

{d1, d2, d3}

d5: x = x + 1{d2, d3, d4, d5}

{d2, d3, d4, d5}

d4: y = t * 4

x < y + z

{d1, d2, d3, d4, d5}

{d2, d3, d4, d5}

{d2, d3, d4, d5}

Page 182: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

182

Which expressions are loop invariant?

t is defined only in d2 – outside of loop

z is defined only in d3 – outside of loop

y is defined only in d4 – inside of loop but depends on t and 4, both loop-invariant

start

d1: y = …

d2: t = …

d3: z = …

{}

{}

{d1}

{d1, d2}

{d1, d2, d3}

end{d2, d3, d4, d5}

d5: x = x + 1{d2, d3, d4, d5}

{d2, d3, d4, d5}

d4: y = t * 4

x < y + z

{d1, d2, d3, d4, d5}

{d2, d3, d4, d5}

{d2, d3, d4, d5}x is defined only in d5 – inside of loop so is not a loop-invariant

Page 183: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

183

Inferring loop-invariant expressions

• For a statement s of the form t = a1 op a2

• A variable ai is immediately loop-invariant if all reaching definitions IN[s]={d1,…,dk} for ai are outside of the loop

• LOOP-INV = immediately loop-invariant variables and constantsLOOP-INV = LOOP-INV {x | d: x = a1 op a2, d is in the loop, and both a1 and a2 are in LOOP-INV}– Iterate until fixed-point

• An expression is loop-invariant if all operands are loop-invariants

Page 184: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

184

Computing LOOP-INV

end

start

d1: y = …

d2: t = …

d3: z = …

{}

{}

{d2, d3, d4}

{d1}

{d1, d2}

{d1, d2, d3}

d4: y = t * 4

x < y + z

d5: x = x + 1

{d1, d2, d3, d4, d5}

{d2, d3, d4, d5}

{d2, d3, d4, d5}

{d2, d3, d4, d5}

{d2, d3, d4, d5}

Page 185: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

185

Computing LOOP-INV

end

start

d1: y = …

d2: t = …

d3: z = …

{}

{}

{d2, d3, d4}

{d1}

{d1, d2}

{d1, d2, d3}

d4: y = t * 4

x < y + z

d5: x = x + 1

{d1, d2, d3, d4, d5}

{d2, d3, d4, d5}

{d2, d3, d4, d5}

{d2, d3, d4, d5}

{d2, d3, d4, d5}

(immediately)LOOP-INV = {t}

Page 186: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

186

Computing LOOP-INV

end

start

d1: y = …

d2: t = …

d3: z = …

{}

{}

{d2, d3, d4}

{d1}

{d1, d2}

{d1, d2, d3}

d4: y = t * 4

x < y + z

d5: x = x + 1

{d1, d2, d3, d4, d5}

{d2, d3, d4, d5}

{d2, d3, d4, d5}

{d2, d3, d4, d5}

{d2, d3, d4, d5}

(immediately)LOOP-INV = {t, z}

Page 187: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

187

Computing LOOP-INV

end

start

d1: y = …

d2: t = …

d3: z = …

{}

{}

{d2, d3, d4}

{d1}

{d1, d2}

{d1, d2, d3}

d4: y = t * 4

x < y + z

d5: x = x + 1

{d1, d2, d3, d4, d5}

{d2, d3, d4, d5}

{d2, d3, d4, d5}

{d2, d3, d4, d5}

{d2, d3, d4, d5}

(immediately)LOOP-INV = {t, z}

Page 188: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

188

Computing LOOP-INV

end

start

d1: y = …

d2: t = …

d3: z = …

{}

{}

{d2, d3, d4}

{d1}

{d1, d2}

{d1, d2, d3}

d4: y = t * 4

x < y + z

d5: x = x + 1

{d1, d2, d3, d4, d5}

{d2, d3, d4, d5}

{d2, d3, d4, d5}

{d2, d3, d4, d5}

{d2, d3, d4, d5}

(immediately)LOOP-INV = {t, z}

Page 189: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

189

end

start

d1: y = …

d2: t = …

d3: z = …

{}

{}

{d2, d3, d4}

{d1}

{d1, d2}

{d1, d2, d3}LOOP-INV = {t, z, 4}

d4: y = t * 4

x < y + z

d5: x = x + 1

{d1, d2, d3, d4, d5}

{d2, d3, d4, d5}

{d2, d3, d4, d5}

{d2, d3, d4, d5}

{d2, d3, d4, d5}

Computing LOOP-INV

Page 190: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

190

Computing LOOP-INV

d4: y = t * 4

x < y + z end

d5: x = x + 1

start

d1: y = …

d2: t = …

d3: z = …

{}

{}

{d1, d2, d3, d4, d5}

{d2, d3, d4, d5}

{d2, d3, d4}

{d1}

{d1, d2}

{d1, d2, d3}

{d2, d3, d4, d5}

{d2, d3, d4, d5}

{d2, d3, d4, d5}

LOOP-INV = {t, z, 4, y}

Page 191: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

191

Induction variables

while (i < x) { j = a + 4 * i a[j] = j i = i + 1}

i is incremented by a loop-invariant expression on each iteration – this is called an induction variable

j is a linear function of the induction variable with multiplier 4

Page 192: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

192

Strength-reduction

j = a + 4 * i while (i < x) { j = j + 4 a[j] = j i = i + 1}

Prepare initial value

Increment by multiplier

Page 193: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

193

Summary of optimizations

Enabled Optimizations AnalysisCommon-subexpression eliminationCopy Propagation

Available Expressions

Constant folding Constant PropagationDead code eliminationRegister allocation

Live Variables

Loop-invariant code motion Reaching Definitions

Page 194: Compilation 0368-3133 (Semester A, 2013/14) Lecture 12: Abstract Interpretation Noam Rinetzky Slides credit: Roman Manevich, Mooly Sagiv and Eran Yahav.

194

Ad

• Advanced course on program analysis and verification

• Workshop on compile time techniques for detecting malicious JavaScripts– With Trusteer

• Now IBM