o.m(a1,a2,,an) - sable.mcgill.ca · B 8 E 7 2 & 3 ' Reachable Method Necessary call edge Call edge...

34

Transcript of o.m(a1,a2,,an) - sable.mcgill.ca · B 8 E 7 2 & 3 ' Reachable Method Necessary call edge Call edge...

Page 1: o.m(a1,a2,,an) - sable.mcgill.ca · B 8 E 7 2 & 3 ' Reachable Method Necessary call edge Call edge that may be eliminated Entry Points Unreachable Method Potentially polymorphic call

�� �� �� � �� � � � �� �� � �� � � � � �� �� � �� � �� �

�� ��� ��� �� � �� � � �

! � �� � �" �� �� �� #%$ &� � ' � � � ( �) �* + � & �, � #

( � ��� � �' ' -� �/. ( � � #10 �2 � � 34 ! � + #

52 � �� � �6 � 7� 8� � � � $ & �� ' � 6 8 �� �

9;: � � 7 & 8� 7�< �' �= > ? 8 4 @

� �A ' � ( � � �� 3 & 6 � 8 � B #1C 36 �' ' D � � E �� � 2 �

C 8� 2 � � �' #$ � � � � �

F F FG HIJ K LGM N OQP K KG N I

RSTU VW VX VSY Z[ \Y ]^ _ `ba c

Page 2: o.m(a1,a2,,an) - sable.mcgill.ca · B 8 E 7 2 & 3 ' Reachable Method Necessary call edge Call edge that may be eliminated Entry Points Unreachable Method Potentially polymorphic call

� � �� � �

� � �� � � � �� � � �� � � � � � � � � �� � � � �

� � � � � � � � � � �� �� � ��

� � �� � �� � � �� �� � � �� � � � � � � � �! " �� � � " #

� � � � $ � ��% & �� � � � � � � � � � � � �� � �� � �� � �� � � �� � � �

� � � � � �� % '( )* ( +, -. /0 -1 2 ( , /43 * 3

� � � � � � �� �� � � � � � � �

� � � � � � � �� �� � �� � � � �� �

RSTU VW VX VSY Z[ \Y ]^ _ `65 c

Page 3: o.m(a1,a2,,an) - sable.mcgill.ca · B 8 E 7 2 & 3 ' Reachable Method Necessary call edge Call edge that may be eliminated Entry Points Unreachable Method Potentially polymorphic call

�� � 2 � �' C �2 & 8 � ( � 8' �2 � 8�

: &� 3 & + �2 & 8 � + � 7 &2 A � 3 �' ' � � � 2 � �� . 2 � + ��

...o.m(a1,a2,...,an)...

{ int a1, a2, ..., an;

}

public void m (int p1, ..., int pn) { ... }

public class C {

...

}

public void m (int p1, ..., int pn) { ... }

public class B {

...

}

public void m (int p1, ..., int pn)

public class A {

...

}

?

?

? { System.out.println(p1+...+pn); }

RSTU VW VX VSY Z[ \Y ]^ _ `�� c

Page 4: o.m(a1,a2,,an) - sable.mcgill.ca · B 8 E 7 2 & 3 ' Reachable Method Necessary call edge Call edge that may be eliminated Entry Points Unreachable Method Potentially polymorphic call

� �� �* 2 8 , � � 8' E� � 7 E� � 2 � �' + �2 & 8 � 3 �' '

...m(a1,a2,...,an);...

{ int a1, a2, ..., an;

}

public class A {

...

}

{ System.out.println(p1+...+pn); }

...o.m(a1,a2,...,an);...

{ int a1, a2, ..., an;

}

public void m (int p1, ..., int pn)

public class A {

...

}

{ System.out.println(p1+...+pn); }

Devirtualize

Inline

static

...System.out.println(a1+...+an);...

{ int a1, a2, ..., an;

}

public void (int p1,...,pn)

RSTU VW VX VSY Z[ \Y ]^ _ `�� c

Page 5: o.m(a1,a2,,an) - sable.mcgill.ca · B 8 E 7 2 & 3 ' Reachable Method Necessary call edge Call edge that may be eliminated Entry Points Unreachable Method Potentially polymorphic call

� $ 8� �� E �2 � E � $ �' ' 6 � � B &Method

Potentially Polymorphic Call Site

Entry Points

Call edge

RSTU VW VX VSY Z[ \Y ]^ _ `�� c

Page 6: o.m(a1,a2,,an) - sable.mcgill.ca · B 8 E 7 2 & 3 ' Reachable Method Necessary call edge Call edge that may be eliminated Entry Points Unreachable Method Potentially polymorphic call

� + B� 8 E� � 72 & � 3 �' ' 7� � B &Reachable Method

Necessary call edge

Call edge that may be eliminated

Entry Points

Unreachable Method

Potentially polymorphic call site

RSTU VW VX VSY Z[ \Y ]^ _ `�� c

Page 7: o.m(a1,a2,,an) - sable.mcgill.ca · B 8 E 7 2 & 3 ' Reachable Method Necessary call edge Call edge that may be eliminated Entry Points Unreachable Method Potentially polymorphic call

0 � �� � � $ �' ' 6 � � B &Reachable Method

Necessary call edge

Entry Points

Potentially Polymorphic Call Site

Number of reachable methods

Number of call edges

Number of potentially polymorphic call sites

Good Call Graph

Minimize:

RSTU VW VX VSY Z[ \Y ]^ _ `�� c

Page 8: o.m(a1,a2,,an) - sable.mcgill.ca · B 8 E 7 2 & 3 ' Reachable Method Necessary call edge Call edge that may be eliminated Entry Points Unreachable Method Potentially polymorphic call

� + B' � + �� 2 � � � � � 72 & �� 8 82 , � � + � ? 8� 4

��� � � F F FG HIJ K LGM N OQP K KG N I � H� � � �� � � � ��� �� �� � �

sourceJava

sourceSML

sourceScheme

sourceEiffel

Optimized class files

Interpreter JIT Adaptive Engine Ahead-of-Time Compiler

class files

javac MLJ KAWA SmallEiffel

SOOT

Produce Jimple 3-address IR

Analyze and Optimize

Generate Bytecode

RSTU VW VX VSY Z[ \Y ]^ _ `�� c

Page 9: o.m(a1,a2,,an) - sable.mcgill.ca · B 8 E 7 2 & 3 ' Reachable Method Necessary call edge Call edge that may be eliminated Entry Points Unreachable Method Potentially polymorphic call

� � � � �� � � � � � � � � � � � � � � � � � � � �� � �� � ��

� � � � � � � � � � � � � � � � � � �� �� � � � �

� � � � � �� �� �� �� � � � � � � �� � � � � � � � � � � � � � � � � � �

� � � � � � & � � � � � � � �� & � � �� � � � � � � & � � ��

� � � � � � � � � � & � � � � � � � � � � � � � � � � �� � � � & � ��

�� � � � � � � � � � � � � & � � �� � � �� � �� �� �� ! �� � �� �

� " � � � � #��

RSTU VW VX VSY Z[ \Y ]^ _ `�� c

Page 10: o.m(a1,a2,,an) - sable.mcgill.ca · B 8 E 7 2 & 3 ' Reachable Method Necessary call edge Call edge that may be eliminated Entry Points Unreachable Method Potentially polymorphic call

5= � 2 � � 7� � + B' � C �2 & 8 � , 8� �� � 2 � �' C �2 & 8 � $ �' ' ( � 8' �2 � 8�

...o.m(a1,a2,...,an)...

{ int a1, a2, ..., an;

}

public void m (int p1, ..., int pn) { ... }

public class C {

...

}

public void m (int p1, ..., int pn) { ... }

public class B {

...

}

public void m (int p1, ..., int pn)

public class A {

...

}

?

?

? { System.out.println(p1+...+pn); }

What do we knowabout the type ofreceiver o???

RSTU VW VX VSY Z[ \Y ]^ _ `ba � c

Page 11: o.m(a1,a2,,an) - sable.mcgill.ca · B 8 E 7 2 & 3 ' Reachable Method Necessary call edge Call edge that may be eliminated Entry Points Unreachable Method Potentially polymorphic call

D � � 72 & � � � 3' � � � � 2 � B � � $ ' � " � �� � � 3 & � � � �' � �

� �� � ��� � � � � � � � � � � � � ��� � �� � ��� � � � � � � �� ��� � �� �

Object

D

A B

C

...o.m(a1,a2,...,an)...

{ int a1, a2, ..., an;

}

public void m (int p1, ..., int pn) { ... }

public class C {

...

}

public void m (int p1, ..., int pn) { ... }

public class B {

...

}

public void m (int p1, ..., int pn)

public class A {

...

}

{ System.out.println(p1+...+pn); }C o;

RSTU VW VX VSY Z[ \Y ]^ _ `ba a c

Page 12: o.m(a1,a2,,an) - sable.mcgill.ca · B 8 E 7 2 & 3 ' Reachable Method Necessary call edge Call edge that may be eliminated Entry Points Unreachable Method Potentially polymorphic call

$ ' � " � �� � � 3 & � � � �' � � 9$ " � @ 9 5= � + B' �� @

Object

D

A B

C

...o.m(a1,a2,...,an)...

{ int a1, a2, ..., an;

}

public void m (int p1, ..., int pn) { ... }

public class C {

...

}

public void m (int p1, ..., int pn) { ... }

public class B {

...

}

public void m (int p1, ..., int pn)

public class A {

...

}

{ System.out.println(p1+...+pn); }D o;

RSTU VW VX VSY Z[ \Y ]^ _ `ba 5 c

Page 13: o.m(a1,a2,,an) - sable.mcgill.ca · B 8 E 7 2 & 3 ' Reachable Method Necessary call edge Call edge that may be eliminated Entry Points Unreachable Method Potentially polymorphic call

D � � 72 & �2 � B � 8 , �' ' 8 3 �2 � � 8A � � 32 � ( � B� � � � B � � � �' � � 9 ( � � @

� � � � � � � �� � � � � � ��� � �� �

{ Object, A, C }Objects Allocated

...o.m(a1,a2,...,an)...

{ int a1, a2, ..., an;

}

public void m (int p1, ..., int pn) { ... }

public class C {

...

}

public void m (int p1, ..., int pn) { ... }

public class B {

...

}

public void m (int p1, ..., int pn)

public class A {

...

}

{ System.out.println(p1+...+pn); }D o;

Object

D

A B

C

RSTU VW VX VSY Z[ \Y ]^ _ `ba � c

Page 14: o.m(a1,a2,,an) - sable.mcgill.ca · B 8 E 7 2 & 3 ' Reachable Method Necessary call edge Call edge that may be eliminated Entry Points Unreachable Method Potentially polymorphic call

� � � 2 � � + B� 8 E � � B 8� ( � � #� � 2 � � 32 2 & � � � �' � � 2 8 8� � � 2 �� �2 � 8�

� �� � � � �� � � � � � �� �� � �� � � � �� � � � �� � � �� � � � � � � � � � �� � � �

� � �� � � � � � � � � � � � � � � � � �� � �� � � � � � � � � � �� � � � �

� � � � � �� � � � � � � � �� � �� � �� � � � � � � � � �� � � � � � � � � �� � � �� ��

� � �� � �� � � � �

...

b = a;

...

o.f(b);

a = new X();

public class B {

c.m(); // X.m()

public void f (C c) {

}

}

public class A {

}

}

public void f (C c) {

c.m(); // X.m()

RSTU VW VX VSY Z[ \Y ]^ _ `ba � c

Page 15: o.m(a1,a2,,an) - sable.mcgill.ca · B 8 E 7 2 & 3 ' Reachable Method Necessary call edge Call edge that may be eliminated Entry Points Unreachable Method Potentially polymorphic call

� 8' �2 � 8� � � �� � �A ' � � � B � � � �' � � 9 � � � @

...

b = a;

...

o.f(b);

a = new X();

public class B {

c.m(); // X.m()

public void f (C c) {

}

}

public class A {

}

}

public void f (C c) {

c.m(); // X.m()

A.f.c

B.f.c

a

b

{ X }

Final Type Propagation Graph

{ X }

{ X }

{ X }

A.f.c

B.f.c

a

b

{ X }

Initial Type Propagation Graph

RSTU VW VX VSY Z[ \Y ]^ _ `ba � c

Page 16: o.m(a1,a2,,an) - sable.mcgill.ca · B 8 E 7 2 & 3 ' Reachable Method Necessary call edge Call edge that may be eliminated Entry Points Unreachable Method Potentially polymorphic call

� � � � � � � � � ��

� � � � � � �� �� � � � �� � � � � � � � � � � � � � � � � � � ! " � � � " �

� � " #��

� � � � � � � � � � � � � � � � �� � � � � � �

� � � � � � � � � � � � � � � � �� � �� � � � � � �� �� � �� � � �� � �� �

RSTU VW VX VSY Z[ \Y ]^ _ `ba � c

Page 17: o.m(a1,a2,,an) - sable.mcgill.ca · B 8 E 7 2 & 3 ' Reachable Method Necessary call edge Call edge that may be eliminated Entry Points Unreachable Method Potentially polymorphic call

� �� � �� � � �� � � �� ��� �� �� � � � � � �

Assuming, statement is in class C, method m;

a = b;

a[i] = b;

a = b[i];

o.f = b; C.m.bA.f

Assuming field f is declared in class A:

a = b; C.m.a C.m.b

C.m.a C.m.b

If either left or right side is Object or Array type:

��� � �� �� ��� �� �� �� � �! " #

Page 18: o.m(a1,a2,,an) - sable.mcgill.ca · B 8 E 7 2 & 3 ' Reachable Method Necessary call edge Call edge that may be eliminated Entry Points Unreachable Method Potentially polymorphic call

� �� � �� � � �� � � �� ��� �� �� � � � � � � � � � � �� � � � �

Assuming the initial call graph of: class X { D f (A a) { ....; return(r); }}

class Y { D f (A a) { ....; return(r); }}

q = o.f(p);

C.m.o

C.m.p

C.m.q

Y.f.return

Y.f.this

Y.f.a

X.f.return

X.f.this

X.f.a

��� � �� �� ��� �� �� �� � �! � #

Page 19: o.m(a1,a2,,an) - sable.mcgill.ca · B 8 E 7 2 & 3 ' Reachable Method Necessary call edge Call edge that may be eliminated Entry Points Unreachable Method Potentially polymorphic call

�� ��� �� �� � � � � �

�� � �� �� �� � � � �� � �� � � � �� ��� � �� � �� � �

�� �� �� � �� � � � � �� � � � � � � �� � � � ! � ��

"� # � � �� ! � � �� � � � $ � � � � � � �� � ! � � �� � � �� �� �� $ �

%& ' �

(� ) � �! � $� � � � ! � � � � � � �* �� �� $ %& ' �� � � � � �! � � � $ � � �

� � � �! �

��� � �� �� ��� �� �� �� � �! + #

Page 20: o.m(a1,a2,,an) - sable.mcgill.ca · B 8 E 7 2 & 3 ' Reachable Method Necessary call edge Call edge that may be eliminated Entry Points Unreachable Method Potentially polymorphic call

� �� � �� � � �� �� � �� � � � �� � � � � �� �

a1

b1 b2

a2 a3

b3

c

(b) Nodes and Edges

A a1, a2, a3;

B b1, b2, b3;

C c;

b1 = new B();

b2 = new B();

c = new C();

a1 = a2;

a3 = a1;

a1 = new A();

a2 = new A();

b1 = b2;

a3 = b3;

b3 = (B) a3;

b1 = c;

(a) Program

��� � �� �� ��� �� �� �� � ��� � #

Page 21: o.m(a1,a2,,an) - sable.mcgill.ca · B 8 E 7 2 & 3 ' Reachable Method Necessary call edge Call edge that may be eliminated Entry Points Unreachable Method Potentially polymorphic call

� �� � � � �� � � �� �

{B}

{C}

{A} {A}

{B}

a1

b1 b2

a2 a3

b3

c

(c) Initial Types

b1 = new B();

b2 = new B();

c = new C();

a1 = new A();

a2 = new A();

{B}

{C}

{A} {A}

{B}

a1

b1 b2

a2 a3

b3

c

(d) Strongly-connected components (e) final solution

{C}

{A} {A}

{B}

a1

b1 b2

a2 a3

b3

c

{A}

{B,C}

��� � �� �� ��� �� �� �� � ��� #

Page 22: o.m(a1,a2,,an) - sable.mcgill.ca · B 8 E 7 2 & 3 ' Reachable Method Necessary call edge Call edge that may be eliminated Entry Points Unreachable Method Potentially polymorphic call

� � � �� � � � � � � �� � � � �� � �� � � � �� � �� � � � � � � � �

A B C A B C

{A} {B} {C}

{C}

A B C

{A,B}

(b) Nodes and Edges (c) Initial Types

(d) Strongly-connected components (e) final solution

{C}

A B C

{A,B,C}

A a1, a2, a3;

B b1, b2, b3;

C c;

b1 = new B();

b2 = new B();

c = new C();

a1 = a2;

a3 = a1;

a1 = new A();

a2 = new A();

b1 = b2;

a3 = b3;

b3 = (B) a3;

b1 = c;

(a) Program

��� � �� �� ��� �� �� �� � ��� � #

Page 23: o.m(a1,a2,,an) - sable.mcgill.ca · B 8 E 7 2 & 3 ' Reachable Method Necessary call edge Call edge that may be eliminated Entry Points Unreachable Method Potentially polymorphic call

�� � � � � � � �� � � � � � � �� � � � � � � � �� �� �� � �

�� � � �

� � � ! � � � � �* � � � � � � � � �� � �� $ ! � � � � �

� � � � � � �� $ � � �� � � � �� � �� � � �� � �� � ! � � * � �� $

! � �! � $� � � � � � � � � � �� ��� �� �� �� $ � � �� � � � � �� � ��

� ! � � � ! �� � �� �� � � � �� ! � �! � $� � � � � �

� ) � � � � � �� � � � * � � �� �� � � � � � �� � � � � �� � � � � � � �

$� � ! � � � � �� � � � � �� � # � & � �� �� & � � � �� � � �

$� � ! � �� � � � � � * � � � & � � � � � * � �� $ � � � � �� � * �

� � � ! * � � � � � � �� � � � $� � ! �

��� � �� �� ��� �� �� �� � ��� � #

Page 24: o.m(a1,a2,,an) - sable.mcgill.ca · B 8 E 7 2 & 3 ' Reachable Method Necessary call edge Call edge that may be eliminated Entry Points Unreachable Method Potentially polymorphic call

� � � � � � � � � � � � � � ��

� � ��� �� � � �� � �� �

� � � � � �� � �� � �� � � �� � � � � �� � � � � �� � � � � � �� ��

� � � �� � �� � � �� ��

� � � � � � � � �� �� � � �� � � � � � �� � � � � � � �� � � � � ! � � � � � � � �� � �" � �

� # �� � � �$ !� � � � � �� � �� � � � � �� � � � � � � � � � � % � � ! � � �

� ! ! � � � '& ( � �*) ( � � � + ( �

� , �� � � � �� �� � � � � �� �

� , �� � � � �� �� � � � � �� �

� , �� � � � �� ! � � � � �� � � � ! � � � �� ! � � � �� � �� � � ��

� �� � � � �� - � � � � � � �� �

� ) � � � � # � � � � �� � � � �� ! � � � + �� � � � � � � � ��

./0 1 23 24 2/5 67 85 9: ; <��= >

Page 25: o.m(a1,a2,,an) - sable.mcgill.ca · B 8 E 7 2 & 3 ' Reachable Method Necessary call edge Call edge that may be eliminated Entry Points Unreachable Method Potentially polymorphic call

� �� � � � �� � � � � � �� � �� � � �� � �

� � � � � �� � � � � �

� � � � �� � � � � � � # �� � � � � � �� � �� � � � �

� � � � � � � " ( � � ( � ( �

�� � � � � �� � � " � � � " �

�� � � � �� � " � ( � �� � �

�� � � � � �� � " � " � " � � � (

� � � � � ( � � � ( ( ( � � �� (

! � � � � � ( � ( � "� � � " �� � �

./0 1 23 24 2/5 67 85 9: ; <�� � >

Page 26: o.m(a1,a2,,an) - sable.mcgill.ca · B 8 E 7 2 & 3 ' Reachable Method Necessary call edge Call edge that may be eliminated Entry Points Unreachable Method Potentially polymorphic call

�� � � �� � � �� � � � �� � � � � � � � � �� �� � �� � � �� � � � �� � �

� � � � � �� � � � � �

� �� � � � �� � � � # � � � � �� � � �� �� �� �

� � � � � � �� " � " �� " � � ��� � � � �

�� � � � �� ( (� ( � � � �� �� � � �

�� � "� " � � � � � �� � � �� �� � � �

�� � � (� (� � � � � � � � � �� �� � � �

� � � � "� "� " � � � � � � � � �� � � � � �

! � � � � " � � � �� � � � � � � " � � � � � �

./0 1 23 24 2/5 67 85 9: ; <�� � >

Page 27: o.m(a1,a2,,an) - sable.mcgill.ca · B 8 E 7 2 & 3 ' Reachable Method Necessary call edge Call edge that may be eliminated Entry Points Unreachable Method Potentially polymorphic call

Percentage Methods Removed From Conservative Call Graph(Whole Application)

���

����

����

����

��� ���

� ���

� �� �

� ���� �� �

��� �

��� ��

%

!" #! " #$% &

' % &

()* + ,- ,. ,)/ 01 2/ 34 5 6879 :

Page 28: o.m(a1,a2,,an) - sable.mcgill.ca · B 8 E 7 2 & 3 ' Reachable Method Necessary call edge Call edge that may be eliminated Entry Points Unreachable Method Potentially polymorphic call

Percentage Edges Removed From Conservative Call Graph(whole application)

���

����

����

�����

� � ����

� ����

� ���� �

� ����� �� �

��� � �

��� �� �

%

!" #! " #$% &

' % &

()* + ,- ,. ,)/ 01 2/ 34 5 687 ( :

Page 29: o.m(a1,a2,,an) - sable.mcgill.ca · B 8 E 7 2 & 3 ' Reachable Method Necessary call edge Call edge that may be eliminated Entry Points Unreachable Method Potentially polymorphic call

Percentage Methods Removed From Conservative Call Graph(Benchmark only)

��

��

��

��

��� � ��� �

� ����

� ��� � �

� ����� �� � ��� �

� �"!! �

%

#$ %# $ %&' (

) ' (

()* + ,- ,. ,)/ 01 2/ 34 5 687 * :

Page 30: o.m(a1,a2,,an) - sable.mcgill.ca · B 8 E 7 2 & 3 ' Reachable Method Necessary call edge Call edge that may be eliminated Entry Points Unreachable Method Potentially polymorphic call

Percentage Edges Removed From Conservative Call Graph(Benchmark Only)

��

����

����

����� ����

���

����

� ����� � ��� �

������ �

%

�� �� � � ! "

# ! "

()* + ,- ,. ,)/ 01 2/ 34 5 6%$& :

Page 31: o.m(a1,a2,,an) - sable.mcgill.ca · B 8 E 7 2 & 3 ' Reachable Method Necessary call edge Call edge that may be eliminated Entry Points Unreachable Method Potentially polymorphic call

Percentage Potentially Polymorphic Calls Resolved from Conservative Call Graph (Benchmark only)

���

����

����

����

���

�� �

�� � �� � � � � �� � �� � � ��� � � �

%

�� �� � ��� �

� � � � ! �"

()* + ,- ,. ,)/ 01 2/ 34 5 6%$# :

Page 32: o.m(a1,a2,,an) - sable.mcgill.ca · B 8 E 7 2 & 3 ' Reachable Method Necessary call edge Call edge that may be eliminated Entry Points Unreachable Method Potentially polymorphic call

Percentage Virtual Method Calls that resolve to Exactly One Method at Run-time (Benchmark only)

�������

��������

����� �

��� � ���

� ����

� ������

� ����� �� � ��� �

�� �"!! �

%

#$ %#$ %&' (

) ' (*+ ,-. / 0

()* + ,- ,. ,)/ 01 2/ 34 5 6%$ 7 :

Page 33: o.m(a1,a2,,an) - sable.mcgill.ca · B 8 E 7 2 & 3 ' Reachable Method Necessary call edge Call edge that may be eliminated Entry Points Unreachable Method Potentially polymorphic call

� �� �� �� �� �

� � �� � �� � �� �� � �� ��� � � ��� � ��

�� � � � �� � � � �� �� � � � �� � � � � �� � � �

! " � # � $ � � � � � �% � � � � � &(' ' ) *+ , -. /0

! " �1 �� # $32 � � � � � � 4� 5 �� � & ) ' ) + -6 /

&87 9: ; 9< => 9? @A B 9: CD ? D BD < ; < BD 7 9 ? /0

! E � � � � ) � � 5 �� F & ' ' ) *+ , G G /

&: 9? B: D H B< I 7 J 9: = A ? 9 B? B = J 9 @ K K : =L D 7 @ B 9> / 0 � �

! � �� �M N � $% # � �� � $PO �� � $% � � �� � � Q N � � �

&(' ' ) *+ , G G / &> 9 CD : B I @R DS @ BD =< D < TVUW ? /�

XYZ[ \] \^ \Y_ `a b_ cd e f%$ $ g

Page 34: o.m(a1,a2,,an) - sable.mcgill.ca · B 8 E 7 2 & 3 ' Reachable Method Necessary call edge Call edge that may be eliminated Entry Points Unreachable Method Potentially polymorphic call

� �� �� �� � �� �

� � � 5� � E � � � , � � � � � � & � E , / 5� �� � � � � � �

� � � � F � � � � F� �� � � � �� � � � �� � � � � � � � � $ � �

�� �� � � � � �

� E , � � � �� � � � &� � � � � �� � � � / � � F� �� � � � � � �� �

� �� �� � � � � � � �� � �� �� � � � � � ��� � �� � � � E , �

� E , � � � �� 5� � � � � � � � � # � �� � �� � � � � * � �� � * � ��

� � � � 5� � � � � �� � �� 5� � � � # � � N � �� 5� � � �

� � � �� �� � � � �� � �� �� � �

XYZ[ \] \^ \Y_ `a b_ cd e f%$� g