pointer analysis lecture 2

40
Pointer Analysis Lecture 2 G. Ramalingam Microsoft Research, India

Upload: onawa

Post on 24-Feb-2016

63 views

Category:

Documents


0 download

DESCRIPTION

Pointer Analysis Lecture 2. G. Ramalingam Microsoft Research, India. Andersen’s Analysis. A flow-insensitive analysis computes a single points-to solution valid at all program points ignores control-flow – treats program as a set of statements - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Pointer Analysis Lecture 2

Pointer AnalysisLecture 2

G. RamalingamMicrosoft Research, India

Page 2: Pointer Analysis Lecture 2

Andersen’s Analysis

• A flow-insensitive analysis – computes a single points-to solution valid at all

program points– ignores control-flow – treats program as a set of

statements– equivalent to merging all vertices into one (and

applying algorithm A)– equivalent to adding an edge between every pair

of vertices (and applying algo. A)

– a solution R: Vars -> 2Vars’ such thatR IdealMayPT(u) for every vertex u

Page 3: Pointer Analysis Lecture 2

Example(Flow-Sensitive Analysis)

x = &a;

y = x;

x = &b;

z = x;

1

2

3

x = &a

y = x

4

5

x = &b

z = x

Page 4: Pointer Analysis Lecture 2

Example:Andersen’s Analysis

x = &a;

y = x;

x = &b;

z = x;

1

2

3

x = &a

y = x

4

5

x = &b

z = x

Page 5: Pointer Analysis Lecture 2

Andersen’s Analysis• Strong updates?

• Initial state?

Page 6: Pointer Analysis Lecture 2

Why Flow-Insensitive Analysis?• Reduced space requirements– a single points-to solution

• Reduced time complexity– no copying

• individual updates more efficient– no need for joins– number of iterations?– a cubic-time algorithm

• Scales to millions of lines of code– most popular points-to analysis

Page 7: Pointer Analysis Lecture 2

Andersen’s AnalysisA Set-Constraints Formulation

• Compute PTx for every variable xStatement Constraint

x = null

x = &y

x = y

x = *y

*x = y

Page 8: Pointer Analysis Lecture 2

Steensgaard’s Analysis• Unification-based analysis• Inspired by type inference

– an assignment “lhs := rhs” is interpreted as a constraint that lhs and rhs have the same type

– the type of a pointer variable is the set of variables it can point-to

• “Assignment-direction-insensitive”– treats “lhs := rhs” as if it were both “lhs := rhs”

and “rhs := lhs”• An almost-linear time algorithm

– single-pass algorithm; no iteration required

Page 9: Pointer Analysis Lecture 2

Example:Andersen’s Analysis

x = &a;

y = x;

y = &b;

b = &c;

1

2

3

x = &a

y = x

4

5

y = &b

b = &c

Page 10: Pointer Analysis Lecture 2

Example:Steensgaard’s Analysis

x = &a;

y = x;

y = &b;

b = &c;

1

2

3

x = &a

y = x

4

5

y = &b

b = &c

Page 11: Pointer Analysis Lecture 2

Steensgaard’s Analysis• Can be implemented using Union-

Find data-structure• Leads to an almost-linear time

algorithm

Page 12: Pointer Analysis Lecture 2

May-Point-To AnalysesIdeal-May-Point-To

Algorithm A

Andersen’s

Steensgaard’s

more efficient / less precise

???

more efficient / less precise

Page 13: Pointer Analysis Lecture 2

Ideal Points-To Analysis:Definition Recap

• A sequence of states s1s2 … sn is said to be an execution (of the program) iff – s1 is the Initial-State– si | si+1 for 1 <= I < n

• A state s is said to be a reachable state iff there exists some execution s1s2 … sn is such that sn = s.

• RS(u) = { s | (u,s) is reachable }• IdealMayPT (u) = { (p,x) | $ s Î RS(u). s(p) == x }• IdealMustPT (u) = { (p,x) | " s Î RS(u). s(p) ==

x }

Page 14: Pointer Analysis Lecture 2

Does Algorithm A Compute The Most Precise Solution?

Page 15: Pointer Analysis Lecture 2

Ideal <-> Algorithm A• Abstract away correlations

between variables– relational analysis vs.– independent attribute

x: &b y: &x

x: &y y: &z

x: {&y,&b} y: {&x,&z}

a

g

x: &y y: &x

x: &b y: &z

x: &y y: &zx: &b y: &x

Page 16: Pointer Analysis Lecture 2

Does Algorithm A Compute The Most Precise Solution?

Page 17: Pointer Analysis Lecture 2

Is The Precise Solution Computable?

• Claim: The set RS(u) of reachable concrete states (for our language) is computable.

• Note: This is true for any collecting semantics with a finite state space.

Page 18: Pointer Analysis Lecture 2

Computing RS(u)

Page 19: Pointer Analysis Lecture 2

Precise Points-To Analysis:Decidability

• Corollary: Precise may-point-to analysis is computable.

• Corollary: Precise (demand) may-alias analysis is computable.– Given ptr-exp1, ptr-exp2, and a program point u, identify if

there exists some reachable state at u where ptr-exp1 and ptr-exp2 are aliases.

• Ditto for must-point-to and must-alias

• … for our restricted language!

Page 20: Pointer Analysis Lecture 2

Precise Points-To Analysis:Computational Complexity

• What’s the complexity of the least-fixed point computation using the collecting semantics?

• The worst-case complexity of computing reachable states is exponential in the number of variables.– Can we do better?

• Theorem: Computing precise may-point-to is PSPACE-hard even if we have only two-level pointers.

Page 21: Pointer Analysis Lecture 2

May-Point-To AnalysesIdeal-May-Point-To

Algorithm A

Andersen’s

Steensgaard’s

more efficient / less precise

more efficient / less precise

more efficient / less precise

Page 22: Pointer Analysis Lecture 2

Precise Points-To Analysis: Caveats

• Theorem: Precise may-alias analysis is undecidable in the presence of dynamic memory allocation.– Add “x = new/malloc ()” to language– State-space becomes infinite

• Digression: Integer variables + conditional-branching also makes any precise analysis undecidable.

Page 23: Pointer Analysis Lecture 2

May-Point-To Analyses

Ideal (no Int, no Malloc)

Algorithm A

Andersen’s

Steensgaard’s

Ideal (with Int, with Malloc)

Ideal (with Int)

Ideal (with Malloc)

Page 24: Pointer Analysis Lecture 2

Dynamic Memory Allocation• s: x = new () / malloc ()• Assume, for now, that allocated object stores one

pointer– s: x = malloc ( sizeof(void*) )

• Introduce a pseudo-variable Vs to represent objects allocated at statement s, and use previous algorithm– treat s as if it were “x = &Vs”– also track possible values of Vs

– allocation-site based approach• Key aspect: Vs represents a set of objects (locations),

not a single object– referred to as a summary object (node)

Page 25: Pointer Analysis Lecture 2

Dynamic Memory Allocation:Example

x = new;

y = x;

*y = &b;

*y = &a;

1

2

3

x = new

y = x

4

5

*y = &b

*y = &a

Page 26: Pointer Analysis Lecture 2

Dynamic Memory Allocation:Summary Object Update

4

5*y = &a

Page 27: Pointer Analysis Lecture 2
Page 28: Pointer Analysis Lecture 2

Dynamic Memory Allocation:Object Fields

• Field-sensitive analysisclass Foo { A* f; B* g;}s: x = new Foo()

x->f = &b;

x->g = &a;

Page 29: Pointer Analysis Lecture 2

Dynamic Memory Allocation:Object Fields

• Field-insensitive analysisclass Foo { A* f; B* g;}s: x = new Foo()

x->f = &b;

x->g = &a;

Page 30: Pointer Analysis Lecture 2

Interpreting Branch Conditions

Page 31: Pointer Analysis Lecture 2

Conditional Control-Flow(In The Concrete Semantics)

• Encoding conditional-control-flow– using “assume” statements

if (P) then S1;else S2;endif

1

2

3

assume P

S1

assume !P

4

5S2

Page 32: Pointer Analysis Lecture 2

Conditional Control-Flow(In The Concrete Semantics)

• Semantics of “assume” statements– DataState -> {true,false}

if (P) then S1;else S2;endif

1

2

3

assume P

S1

assume !P

4

5S2

Page 33: Pointer Analysis Lecture 2

Abstracting “assume” statements

if (x != null) then y = x;else …endif

1

2

3

assume (x != null)

y = x

assume (x == null)4

5S2

Page 34: Pointer Analysis Lecture 2

Abstracting “assume” statements

2

3

assume x == y

Page 35: Pointer Analysis Lecture 2

Other Aspects• Context-sensitivity• Indirect (virtual) function calls and

call-graph construction• Pointer arithmetic• Object-sensitivity

Page 36: Pointer Analysis Lecture 2

Andersen’s Analysis:Further Optimizations and Extensions

• Fahndrich et al., Partial online cycle elimination in inclusion constraint graphs, PLDI 1998.

• Rountev and Chandra, Offline variable substitution for scaling points-to analysis, 2000.

• Heintze and Tardieu, Ultra-fast aliasing analysis using CLA: a million lines of C code in a second, PLDI 2001.

• M. Hind, Pointer analysis: Haven’t we solved this problem yet?, PASTE 2001.

• Hardekopf and Lin, The ant and the grasshopper: fast and accurate pointer analysis for millions of lines of code, PLDI 2007.

• Hardekopf and Lin, Exploiting pointer and location equivalence to optimize pointer analysis, SAS 2007.

• Hardekopf and Lin, Semi-sparse flow-sensitive pointer analysis, POPL 2009.

Page 37: Pointer Analysis Lecture 2

Andersen’s Analysis:Further Optimizations

• Cycle Elimination– Offline– Online

• Pointer Variable Equivalence

Page 38: Pointer Analysis Lecture 2

Context-Sensitivity Etc.• Liang & Harrold, Efficient computation of parameterized

pointer information for interprocedural analyses. SAS 2001.

• Lattner et al., Making context-sensitive points-to analysis with heap cloning practical for the real world, PLDI 2007.

• Zhu & Calman, Symbolic pointer analysis revisited. PLDI 2004.

• Whaley & Lam, Cloning-based context-sensitive pointer alias analysis using BDD, PLDI 2004.

• Rountev et al. Points-to analysis for Java using annotated constraints. OOPSLA 2001.

• Milanova et al. Parameterized object sensitivity for points-to and side-effect analyses for Java. ISSTA 2002.

Page 39: Pointer Analysis Lecture 2

Applications• Compiler optimizations

• Verification & Bug Finding– use in preliminary phases– use in verification itself

Page 40: Pointer Analysis Lecture 2

Questions?