• No results found

COS320: Compiling Techniques

N/A
N/A
Protected

Academic year: 2021

Share "COS320: Compiling Techniques"

Copied!
16
0
0

Loading.... (view fulltext now)

Full text

(1)

COS320: Compiling Techniques

Zak Kincaid April 16, 2019

(2)

Generic (forward) dataflow analysis algorithm

• Given:

Abstract domain (L, ⊑, ⊔, ⊥, ⊤) • Transfer function

postL:Basic Block × L → L

Control flow graph G = (N, E, s)

Compute: least function f such that

1 f(s) =⊤

2 For all p → n ∈ E, postL(p, f(p))⊑ f(n)

f(s)← ⊤;

f(n) =⊥ for all other nodes; work ← N \ {s};

while work ̸= ∅ do

Pick some n from work;

work ← work \ {n} ; vp∈pred(n) postL(p, f(p)); if v ̸= f(n) then f(n)← v;

work ← work ∪ succ(n)

Invariants:

work contains all n ∈ N that may violate their constraints (post(p, f(p)) ̸⊑ f(n) for some p → n ∈ E)

Use fito denote f on the ith iteration and f∗to denote least solution to the constraint system. Then for all n,

fi(n)⊑ f∗(n). Termination:

• Why does this algorithm terminate?

(3)

Generic (forward) dataflow analysis algorithm

• Given:

Abstract domain (L, ⊑, ⊔, ⊥, ⊤) • Transfer function

postL:Basic Block × L → L

Control flow graph G = (N, E, s)

Compute: least function f such that

1 f(s) =⊤

2 For all p → n ∈ E, postL(p, f(p))⊑ f(n)

f(s)← ⊤;

f(n) =⊥ for all other nodes; work ← N \ {s};

while work ̸= ∅ do

Pick some n from work;

work ← work \ {n} ; vp∈pred(n) postL(p, f(p)); if v ̸= f(n) then f(n)← v;

work ← work ∪ succ(n)

Invariants:

work contains all n ∈ N that may violate their constraints (post(p, f(p)) ̸⊑ f(n) for some p → n ∈ E)

Use fito denote f on the ith iteration and f∗to denote least solution to the constraint system. Then for all n,

fi(n)⊑ f∗(n). Termination:

• Why does this algorithm terminate?

(4)

Generic (forward) dataflow analysis algorithm

• Given:

Abstract domain (L, ⊑, ⊔, ⊥, ⊤) • Transfer function

postL:Basic Block × L → L

Control flow graph G = (N, E, s)

Compute: least function f such that

1 f(s) =⊤

2 For all p → n ∈ E, postL(p, f(p))⊑ f(n)

f(s)← ⊤;

f(n) =⊥ for all other nodes; work ← N \ {s};

while work ̸= ∅ do

Pick some n from work;

work ← work \ {n} ; vp∈pred(n) postL(p, f(p)); if v ̸= f(n) then f(n)← v;

work ← work ∪ succ(n)

Invariants:

work contains all n ∈ N that may violate their constraints (post(p, f(p)) ̸⊑ f(n) for some p → n ∈ E)Use fito denote f on the ith iteration and f∗to denote least solution to the constraint system. Then for all n,

fi(n)⊑ f∗(n).

Termination:

• Why does this algorithm terminate?

(5)

Generic (forward) dataflow analysis algorithm

• Given:

Abstract domain (L, ⊑, ⊔, ⊥, ⊤) • Transfer function

postL:Basic Block × L → L

Control flow graph G = (N, E, s)

Compute: least function f such that

1 f(s) =⊤

2 For all p → n ∈ E, postL(p, f(p))⊑ f(n)

f(s)← ⊤;

f(n) =⊥ for all other nodes; work ← N \ {s};

while work ̸= ∅ do

Pick some n from work;

work ← work \ {n} ; vp∈pred(n) postL(p, f(p)); if v ̸= f(n) then f(n)← v;

work ← work ∪ succ(n)

Invariants:

work contains all n ∈ N that may violate their constraints (post(p, f(p)) ̸⊑ f(n) for some p → n ∈ E)Use fito denote f on the ith iteration and f∗to denote least solution to the constraint system. Then for all n,

fi(n)⊑ f∗(n). Termination:

• Why does this algorithm terminate?

(6)

Generic (forward) dataflow analysis algorithm

• Given:

Abstract domain (L, ⊑, ⊔, ⊥, ⊤) • Transfer function

postL:Basic Block × L → L

Control flow graph G = (N, E, s)

Compute: least function f such that

1 f(s) =⊤

2 For all p → n ∈ E, postL(p, f(p))⊑ f(n)

f(s)← ⊤;

f(n) =⊥ for all other nodes; work ← N \ {s};

while work ̸= ∅ do

Pick some n from work;

work ← work \ {n} ; vp∈pred(n) postL(p, f(p)); if v ̸= f(n) then f(n)← v;

work ← work ∪ succ(n)

Invariants:

work contains all n ∈ N that may violate their constraints (post(p, f(p)) ̸⊑ f(n) for some p → n ∈ E)Use fito denote f on the ith iteration and f∗to denote least solution to the constraint system. Then for all n,

fi(n)⊑ f∗(n). Termination:

• Why does this algorithm terminate?

(7)

Coincidence

• We had two specifications for available expressions

Global: e ∈ ae(n) iff for every path from s to n in G:

1 the expression e is evaluated along the path

2 after the last evaluation of e along the path, no variables in e are overwritten

Local: ae is the smallest function such that

ae(s) = ∅

For each p → n ∈ E, postAE(p,ae(p)) ⊇ ae(n)Why are these specifications the same?

Coincidence theorem (Kildall, Kam & Ullman): for any abstract domain (L, ⊑, ⊔, ⊥, ⊤) and distributive transfer function postL, the least solution f to the constraint system

1 f(s)⊒ ⊤

2 For each p → n ∈ E, postL(p, f(p))⊑ f(n) coincides with the function g(n) =

π∈Path(s,n)

postL(π,⊤), where postLis extended to paths by taking

(8)

Coincidence

• We had two specifications for available expressions

Global: e ∈ ae(n) iff for every path from s to n in G:

1 the expression e is evaluated along the path

2 after the last evaluation of e along the path, no variables in e are overwritten

Local: ae is the smallest function such that

ae(s) = ∅

For each p → n ∈ E, postAE(p,ae(p)) ⊇ ae(n)Why are these specifications the same?

Coincidence theorem (Kildall, Kam & Ullman): for any abstract domain (L, ⊑, ⊔, ⊥, ⊤) and distributive transfer function postL, the least solution f to the constraint system

1 f(s)⊒ ⊤

2 For each p → n ∈ E, postL(p, f(p))⊑ f(n) coincides with the function g(n) =

π∈Path(s,n)

postL(π,⊤), where postLis extended to paths by taking

(9)

Gen/kill analyses

• Suppose we have a finite set of data flow “facts” • Elements of the abstract domain are sets of facts

For each basic block n, associate a set of generated facts gen(n) and killed facts kill(n)Define postL(n, F) = (F\ kill(n)) ∪ gen(n).

The order on sets of facts may be ⊆ or ⊇

⊆ used forexistentialanalyses: a fact holds at n if it holds along some path to n

E.g., a variable is possibly-uninitialized at n if it is possibly-uninitialized along some path to n.

⊇ used foruniversalanalyses: a fact holds at n if it holds along all paths to n

E.g., an expression is avaiable at n if it is available along all paths to nIn either case postLis monotone and distributive

postL(n, F∪ G) = ((F ∪ G) \ kill(n)) ∪ gen(n)

= ((F\ kill(n)) ∪ (G \ kill(n))) ∪ gen(n)

= ((F\ kill(n)) ∪ gen(n)) ∪ (((G \ kill(n))) ∪ gen(n)) =postL(n, F)∪ postL(n, G)

(10)

Gen/kill analyses

• Suppose we have a finite set of data flow “facts” • Elements of the abstract domain are sets of facts

For each basic block n, associate a set of generated facts gen(n) and killed facts kill(n)Define postL(n, F) = (F\ kill(n)) ∪ gen(n).

The order on sets of facts may be ⊆ or ⊇

⊆ used forexistentialanalyses: a fact holds at n if it holds along some path to n

E.g., a variable is possibly-uninitialized at n if it is possibly-uninitialized along some path to n.

⊇ used foruniversalanalyses: a fact holds at n if it holds along all paths to n

E.g., an expression is avaiable at n if it is available along all paths to n

In either case postLis monotone and distributive

postL(n, F∪ G) = ((F ∪ G) \ kill(n)) ∪ gen(n)

= ((F\ kill(n)) ∪ (G \ kill(n))) ∪ gen(n)

= ((F\ kill(n)) ∪ gen(n)) ∪ (((G \ kill(n))) ∪ gen(n)) =postL(n, F)∪ postL(n, G)

(11)

Gen/kill analyses

• Suppose we have a finite set of data flow “facts” • Elements of the abstract domain are sets of facts

For each basic block n, associate a set of generated facts gen(n) and killed facts kill(n)Define postL(n, F) = (F\ kill(n)) ∪ gen(n).

The order on sets of facts may be ⊆ or ⊇

⊆ used forexistentialanalyses: a fact holds at n if it holds along some path to n

E.g., a variable is possibly-uninitialized at n if it is possibly-uninitialized along some path to n.

⊇ used foruniversalanalyses: a fact holds at n if it holds along all paths to n

E.g., an expression is avaiable at n if it is available along all paths to nIn either case postLis monotone and distributive

postL(n, F∪ G) = ((F ∪ G) \ kill(n)) ∪ gen(n)

= ((F\ kill(n)) ∪ (G \ kill(n))) ∪ gen(n)

= ((F\ kill(n)) ∪ gen(n)) ∪ (((G \ kill(n))) ∪ gen(n)) =postL(n, F)∪ postL(n, G)

(12)

Possibly-uninitialized variables analysis

A variable x ispossibly-uninitializedat a location n if there is some path from start to n along which x is never written to.

If n uses an uninitialized variable, that could indicate undefined behavior

• Can catch these errors at compile time using possibly-uninitialized variable analysis

• E.g. javac does this by default

• Possibly-unintialized variables as a dataflow analysis problem:

• Abstract domain 2Var(each V ∈ 2Varrepresents a set of possibly-uninitialized vars)

Existential ⇒ order is ⊆, join is ∪, ⊤ is Var, ⊥ is ∅

kill(x := e) = {x}gen(x := e) = ∅

(13)

Possibly-uninitialized variables analysis

A variable x ispossibly-uninitializedat a location n if there is some path from start to n along which x is never written to.

If n uses an uninitialized variable, that could indicate undefined behavior

• Can catch these errors at compile time using possibly-uninitialized variable analysis

• E.g. javac does this by default

• Possibly-unintialized variables as a dataflow analysis problem:

• Abstract domain 2Var(each V ∈ 2Varrepresents a set of possibly-uninitialized vars)

Existential ⇒ order is ⊆, join is ∪, ⊤ is Var, ⊥ is ∅

kill(x := e) = {x}gen(x := e) = ∅

(14)

Possibly-uninitialized variables analysis

A variable x ispossibly-uninitializedat a location n if there is some path from start to n along which x is never written to.

If n uses an uninitialized variable, that could indicate undefined behavior

• Can catch these errors at compile time using possibly-uninitialized variable analysis

• E.g. javac does this by default

• Possibly-unintialized variables as a dataflow analysis problem:

• Abstract domain 2Var(each V ∈ 2Varrepresents a set of possibly-uninitialized vars)

Existential ⇒ order is ⊆, join is ∪, ⊤ is Var, ⊥ is ∅kill(x := e) = {x}

(15)

Reaching definitions analysis

A definition is a pair (n, x) consisting of a basic block n, and a variable x such that n contains an assignment to x.

We say that a definitoin (n, x) reaches a node m if there is a path from start to m such that the latest definition of x along the path is at n

• Reaching definitions as a data flow analysis:

• Abstract domain: 2N×Var

Existential ⇒ order is ⊆, join is ∪, ⊤ is N × Var, ⊥ is ∅kill(n) = {(m, x) : m ∈ N, (x := e) in n}

(16)

Reaching definitions analysis

A definition is a pair (n, x) consisting of a basic block n, and a variable x such that n contains an assignment to x.

We say that a definitoin (n, x) reaches a node m if there is a path from start to m such that the latest definition of x along the path is at n

• Reaching definitions as a data flow analysis:

• Abstract domain: 2N×Var

Existential ⇒ order is ⊆, join is ∪, ⊤ is N × Var, ⊥ is ∅kill(n) = {(m, x) : m ∈ N, (x := e) in n}

References

Related documents

IRIS integrates different aspects of process data manage- ment such as data acquisition, data organization, data evaluation and visualization into a single platform. IRIS is a

Expansion of selection criteria for patients with hepatocellular carcinoma in living donor liver transplantation.. Taketomi A, Sanefuji K, Soejima Y,

 Survival analysis is available through Life Tables for examining the distribution of time-to-event variables, possibly by levels of a factor variable; Kaplan-Meier Survival

و ﻦﯿﺴﯾﺎﻣﺎﺘﻨﺟ ،ﻦﯿﺳﺎﮑﯿﻣآ ،ﻦﯿﺴﯾﺎﻣﺎﻧﺎﮐ ﺪﺣاو ﺮﯾز رﺎﻬﻣ ﻖﯾﺮﻃ زا s 30 .ﺪﻨﻨﮐ ﯽﻣ ﻞﻤﻋ ﯽﻣوزﻮﺒﯾر ﺎﺗﺪﻤﻋ ﺎﻫوراد ﻦﯾا ﻪﺑ ﺖﺒﺴﻧ ﯽﯾوراد ﺖﻣوﺎﻘﻣ زوﺮﺑ " :دﺮﯾﺬﭘ ﯽﻣ ترﻮﺻ ﺮﯾز يﺎﻫ شور

The data were submitted to two main analyses, first examining the hypothesis that multitasking performance, as measured by the counter task, is reduced by concurrent spatial task

Debugging – Types of errors - Exceptions-Syntax of exception-Handling code -Multiple catch statements -Exception hierarchy-General catch handler- Using finally statement- Nested try

Write access mode on compile error invalid or unqualified reference access any order by using a compile time estimates for your eyes can still function only apply to specification

There are many of you, sitting right here in our pews, who know exactly what a dried up, dead, bleached white, pile of bones looks like.. You know because you have heard the