demand-driven context-sensitive alias analysis for java

39
Demand-Driven Context-Sensitive Alias Analysis for Java Dacong (Tony) Yan Guoqing (Harry) Xu Atanas Rountev Ohio State University PRESTO: Program Analyses and Software Tools Research Group, Ohio State University

Upload: dacong-yan

Post on 29-Nov-2014

315 views

Category:

Technology


2 download

DESCRIPTION

Demand-Driven Context-Sensitive Alias Analysis for Java, ISSTA'2011

TRANSCRIPT

Page 1: Demand-Driven Context-Sensitive Alias Analysis for Java

Demand-Driven Context-Sensitive Alias Analysis for Java

Dacong (Tony) Yan

Guoqing (Harry) Xu

Atanas Rountev

Ohio State University

PRESTO: Program Analyses and Software Tools Research Group, Ohio State University

Page 2: Demand-Driven Context-Sensitive Alias Analysis for Java

Alias Analysis

• Many static analysis tools need highly precise and efficiently-computed alias information

• Desirable properties– Demand-driven: query “could x and y alias?”– Client-driven: client-defined time budget for a query

• Typical solution: use points-to analysis– Compute the objects that x may point to; same for y;

are there common objects?

• Goal: answer alias queries precisely and efficiently, without computing the complete points-to sets

2

Page 3: Demand-Driven Context-Sensitive Alias Analysis for Java

Redundancy in Points-to Analysis

3

Page 4: Demand-Driven Context-Sensitive Alias Analysis for Java

Redundancy in Points-to Analysis

3

m(a) {

b = a;

x = a.f;

y = b.f;

}

Page 5: Demand-Driven Context-Sensitive Alias Analysis for Java

Redundancy in Points-to Analysis

3

m(a) {

b = a;

x = a.f;

y = b.f;

}x y

alias?

Page 6: Demand-Driven Context-Sensitive Alias Analysis for Java

Redundancy in Points-to Analysis

3

m(a) {

b = a;

x = a.f;

y = b.f;

}x y

O

points-to? points-to?

alias?

Page 7: Demand-Driven Context-Sensitive Alias Analysis for Java

Redundancy in Points-to Analysis

3

m(a) {

b = a;

x = a.f;

y = b.f;

}x ya b

f f

Page 8: Demand-Driven Context-Sensitive Alias Analysis for Java

Redundancy in Points-to Analysis

3

m(a) {

b = a;

x = a.f;

y = b.f;

}x ya b

f falias?

Page 9: Demand-Driven Context-Sensitive Alias Analysis for Java

Redundancy in Points-to Analysis

3

m(a) {

b = a;

x = a.f;

y = b.f;

}x ya b

f falias?

O

points-to?points-to?

Page 10: Demand-Driven Context-Sensitive Alias Analysis for Java

Redundancy in Points-to Analysis

3

m(a) {

b = a;

x = a.f;

y = b.f;

}x ya b

f f

alias

Page 11: Demand-Driven Context-Sensitive Alias Analysis for Java

Redundancy in Points-to Analysis

3

m(a) {

b = a;

x = a.f;

y = b.f;

}x ya b

f f

alias

alias

Page 12: Demand-Driven Context-Sensitive Alias Analysis for Java

Our Approach

• Alias analysis– Demand-driven and client-driven– Field-sensitive and calling-context-sensitive– Does not require complete points-to set computation– Better performance through method summaries

• Symbolic Points-to Graph– A specialized program representation that enables the

demand-driven alias analysis– Facilitates computation and use of method summaries

4

Page 13: Demand-Driven Context-Sensitive Alias Analysis for Java

Program Representation

• Intraprocedural Symbolic Points-To Graph– Introduce a symbolic object node s for each

• formal parameter• field read a.fld• a call site that returns a reference-typed value

– Compute intraprocedural points-to relationships

5

m(a) {

c = new …; // o1

a.f = c;

return c.g;

}

o1sa f

sgret

cg

a

Page 14: Demand-Driven Context-Sensitive Alias Analysis for Java

Interprocedural Symbolic Points-To Graph

• Connect the intraprocedural graphs using entryand exit edges

6

Page 15: Demand-Driven Context-Sensitive Alias Analysis for Java

Interprocedural Symbolic Points-To Graph

• Connect the intraprocedural graphs using entryand exit edges

6

m(a) {

c = new …; // o1

a.f = c;

return c.g;

}

Page 16: Demand-Driven Context-Sensitive Alias Analysis for Java

Interprocedural Symbolic Points-To Graph

• Connect the intraprocedural graphs using entryand exit edges

6

m(a) {

c = new …; // o1

a.f = c;

return c.g;

}

o1sa

f

sgret

cg

a

Page 17: Demand-Driven Context-Sensitive Alias Analysis for Java

Interprocedural Symbolic Points-To Graph

• Connect the intraprocedural graphs using entryand exit edges

6

m(a) {

c = new …; // o1

a.f = c;

return c.g;

}

o1sa

f

sgret

cg

d = new …; // o2

b = m(d); // call m

a

Page 18: Demand-Driven Context-Sensitive Alias Analysis for Java

Interprocedural Symbolic Points-To Graph

• Connect the intraprocedural graphs using entryand exit edges

6

m(a) {

c = new …; // o1

a.f = c;

return c.g;

}

o1sa

f

sgret

cg

d = new …; // o2

b = m(d); // call m

do2

b sm

a

Page 19: Demand-Driven Context-Sensitive Alias Analysis for Java

Interprocedural Symbolic Points-To Graph

• Connect the intraprocedural graphs using entryand exit edges

6

m(a) {

c = new …; // o1

a.f = c;

return c.g;

}

o1sa

f

sgret

cg

d = new …; // o2

b = m(d); // call m

do2

b sm

entrymexitm

a

Page 20: Demand-Driven Context-Sensitive Alias Analysis for Java

Alias Analysis Formulation

• Field-sensitivity and calling-context-sensitivity: matched points-to edges and entry/exit edges

• Traverses the object nodes (including symbolic ones) and the edges between them

7

Page 21: Demand-Driven Context-Sensitive Alias Analysis for Java

Alias Analysis Formulation

• Field-sensitivity and calling-context-sensitivity: matched points-to edges and entry/exit edges

• Traverses the object nodes (including symbolic ones) and the edges between them

7

o2 d

s1

o1

entry1 exit1

f f

ca

b s2

s3

Page 22: Demand-Driven Context-Sensitive Alias Analysis for Java

a alias? c

Alias Analysis Formulation

• Field-sensitivity and calling-context-sensitivity: matched points-to edges and entry/exit edges

• Traverses the object nodes (including symbolic ones) and the edges between them

7

o2 d

s1

o1

entry1 exit1

f f

ca

b s2

s3

Page 23: Demand-Driven Context-Sensitive Alias Analysis for Java

may represent the

same concrete object?

Alias Analysis Formulation

• Field-sensitivity and calling-context-sensitivity: matched points-to edges and entry/exit edges

• Traverses the object nodes (including symbolic ones) and the edges between them

7

o1 s3

o2 d

s1

o1

entry1 exit1

f f

ca

b s2

s3

Page 24: Demand-Driven Context-Sensitive Alias Analysis for Java

o2

Alias Analysis Formulation

• Field-sensitivity and calling-context-sensitivity: matched points-to edges and entry/exit edges

• Traverses the object nodes (including symbolic ones) and the edges between them

7

o1 s3f

o2 d

s1

o1

entry1 exit1

f f

ca

b s2

s3

Page 25: Demand-Driven Context-Sensitive Alias Analysis for Java

entry1o2 s1

Alias Analysis Formulation

• Field-sensitivity and calling-context-sensitivity: matched points-to edges and entry/exit edges

• Traverses the object nodes (including symbolic ones) and the edges between them

7

o1 s3f

o2 d

s1

o1

entry1 exit1

f f

ca

b s2

s3

Page 26: Demand-Driven Context-Sensitive Alias Analysis for Java

s1o2

exit1entry1

Alias Analysis Formulation

• Field-sensitivity and calling-context-sensitivity: matched points-to edges and entry/exit edges

• Traverses the object nodes (including symbolic ones) and the edges between them

7

o1 s3f s2

o2 d

s1

o1

entry1 exit1

f f

ca

b s2

s3

Page 27: Demand-Driven Context-Sensitive Alias Analysis for Java

o2

entry1, exit1

Alias Analysis Formulation

• Field-sensitivity and calling-context-sensitivity: matched points-to edges and entry/exit edges

• Traverses the object nodes (including symbolic ones) and the edges between them

7

o1 s3f s2

o2 d

s1

o1

entry1 exit1

f f

ca

b s2

s3

Page 28: Demand-Driven Context-Sensitive Alias Analysis for Java

o2

entry1, exit1

Alias Analysis Formulation

• Field-sensitivity and calling-context-sensitivity: matched points-to edges and entry/exit edges

• Traverses the object nodes (including symbolic ones) and the edges between them

7

o1 s3f s2

f

o2 d

s1

o1

entry1 exit1

f f

ca

b s2

s3

Page 29: Demand-Driven Context-Sensitive Alias Analysis for Java

f, entry1, exit1, f

Alias Analysis Formulation

• Field-sensitivity and calling-context-sensitivity: matched points-to edges and entry/exit edges

• Traverses the object nodes (including symbolic ones) and the edges between them

7

o1 s3

o2 d

s1

o1

entry1 exit1

f f

ca

b s2

s3

Page 30: Demand-Driven Context-Sensitive Alias Analysis for Java

• Several reachability strings for a selected method– Each string is a sequence of field points-to edges

between boundary objects of the method

Using Method Summaries

8

Page 31: Demand-Driven Context-Sensitive Alias Analysis for Java

• Several reachability strings for a selected method– Each string is a sequence of field points-to edges

between boundary objects of the method

Using Method Summaries

8

m(a) {

c = new …; // o1

a.f = c;

return c.g;

}

o1sa

f

sg

g

ret

ca

Page 32: Demand-Driven Context-Sensitive Alias Analysis for Java

• Several reachability strings for a selected method– Each string is a sequence of field points-to edges

between boundary objects of the method

Using Method Summaries

8

summary(m): sa

f, gsg

m(a) {

c = new …; // o1

a.f = c;

return c.g;

}

o1sa

f

sg

g

ret

ca

Page 33: Demand-Driven Context-Sensitive Alias Analysis for Java

• Several reachability strings for a selected method– Each string is a sequence of field points-to edges

between boundary objects of the method

• Selecting methods for summarization– Compute a summary for a method only if it is invoked

from many different call sites

Using Method Summaries

8

Page 34: Demand-Driven Context-Sensitive Alias Analysis for Java

• Several reachability strings for a selected method– Each string is a sequence of field points-to edges

between boundary objects of the method

• Selecting methods for summarization– Compute a summary for a method only if it is invoked

from many different call sites– Summarization ratio for method m

• the number of incoming call graph edges of m, divided by the average number of incoming call graph edges for all methods

Using Method Summaries

8

Page 35: Demand-Driven Context-Sensitive Alias Analysis for Java

Experimental Evaluation

• 19 Java programs– Number of methods in the whole-program call graph

ranging from 2344 to 8789

• Experiment 1: compare the precision with a field and context-sensitive, demand-driven, client-driven points-to analysis [PLDI’06]– Under the same time budget per alias query– Result 1: for 14 programs, the number of alias pairs is

lower when using our analysis– Result 2: summarization leads to better precision

• Experiment 2: compare running times with and without method summaries

9

Page 36: Demand-Driven Context-Sensitive Alias Analysis for Java

Running Time Reduction When Using Method Summaries

10

Running Time Reduction = (RTno-summ RTsumm) / RTno-summ

Page 37: Demand-Driven Context-Sensitive Alias Analysis for Java

Running Time Reduction When Using Method Summaries

10

24% average reduction with threshold T=2

Running Time Reduction = (RTno-summ RTsumm) / RTno-summ

Page 38: Demand-Driven Context-Sensitive Alias Analysis for Java

Conclusions

• A demand-driven alias analysis– Answers alias queries directly, without computing the

complete points-to sets– Selects methods for online summarization to reduce

analysis running time– Outperforms a highly precise state-of-the-art points-to

analysis

11

Page 39: Demand-Driven Context-Sensitive Alias Analysis for Java

Thank you

12