o.m(a1,a2,,an) - sable.mcgill.ca · B 8 E 7 2 & 3 ' Reachable Method Necessary call edge Call edge...
Transcript of o.m(a1,a2,,an) - sable.mcgill.ca · B 8 E 7 2 & 3 ' Reachable Method Necessary call edge Call edge...
�� �� �� � �� � � � �� �� � �� � � � � �� �� � �� � �� �
�� ��� ��� �� � �� � � �
! � �� � �" �� �� �� #%$ &� � ' � � � ( �) �* + � & �, � #
( � ��� � �' ' -� �/. ( � � #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
� � �� � �
� � �� � � � �� � � �� � � � � � � � � �� � � � �
� � � � � � � � � � �� �� � ��
� � �� � �� � � �� �� � � �� � � � � � � � �! " �� � � " #
� � � � $ � ��% & �� � � � � � � � � � � � �� � �� � �� � �� � � �� � � �
� � � � � �� % '( )* ( +, -. /0 -1 2 ( , /43 * 3
� � � � � � �� �� � � � � � � �
� � � � � � � �� �� � �� � � � �� �
RSTU VW VX VSY Z[ \Y ]^ _ `65 c
�� � 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
� �� �* 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
� $ 8� �� E �2 � E � $ �' ' 6 � � B &Method
Potentially Polymorphic Call Site
Entry Points
Call edge
RSTU VW VX VSY Z[ \Y ]^ _ `�� c
� + 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
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
� + 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
� � � � �� � � � � � � � � � � � � � � � � � � � �� � �� � ��
� � � � � � � � � � � � � � � � � � �� �� � � � �
� � � � � �� �� �� �� � � � � � � �� � � � � � � � � � � � � � � � � � �
� � � � � � & � � � � � � � �� & � � �� � � � � � � & � � ��
� � � � � � � � � � & � � � � � � � � � � � � � � � � �� � � � & � ��
�� � � � � � � � � � � � � & � � �� � � �� � �� �� �� ! �� � �� �
� " � � � � #��
RSTU VW VX VSY Z[ \Y ]^ _ `�� c
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
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
$ ' � " � �� � � 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
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
� � � 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
� 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
� � � � � � � � � ��
� � � � � � �� �� � � � �� � � � � � � � � � � � � � � � � � � ! " � � � " �
� � " #��
� � � � � � � � � � � � � � � � �� � � � � � �
� � � � � � � � � � � � � � � � �� � �� � � � � � �� �� � �� � � �� � �� �
RSTU VW VX VSY Z[ \Y ]^ _ `ba � c
� �� � �� � � �� � � �� ��� �� �� � � � � � �
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:
��� � �� �� ��� �� �� �� � �! " #
� �� � �� � � �� � � �� ��� �� �� � � � � � � � � � � �� � � � �
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
��� � �� �� ��� �� �� �� � �! � #
�� ��� �� �� � � � � �
�� � �� �� �� � � � �� � �� � � � �� ��� � �� � �� � �
�� �� �� � �� � � � � �� � � � � � � �� � � � ! � ��
"� # � � �� ! � � �� � � � $ � � � � � � �� � ! � � �� � � �� �� �� $ �
%& ' �
(� ) � �! � $� � � � ! � � � � � � �* �� �� $ %& ' �� � � � � �! � � � $ � � �
� � � �! �
��� � �� �� ��� �� �� �� � �! + #
� �� � �� � � �� �� � �� � � � �� � � � � �� �
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
��� � �� �� ��� �� �� �� � ��� � #
� �� � � � �� � � �� �
{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}
��� � �� �� ��� �� �� �� � ��� #
� � � �� � � � � � � �� � � � �� � �� � � � �� � �� � � � � � � � �
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
��� � �� �� ��� �� �� �� � ��� � #
�� � � � � � � �� � � � � � � �� � � � � � � � �� �� �� � �
�� � � �
� � � ! � � � � �* � � � � � � � � �� � �� $ ! � � � � �
� � � � � � �� $ � � �� � � � �� � �� � � �� � �� � ! � � * � �� $
! � �! � $� � � � � � � � � � �� ��� �� �� �� $ � � �� � � � � �� � ��
� ! � � � ! �� � �� �� � � � �� ! � �! � $� � � � � �
� ) � � � � � �� � � � * � � �� �� � � � � � �� � � � � �� � � � � � � �
$� � ! � � � � �� � � � � �� � # � & � �� �� & � � � �� � � �
$� � ! � �� � � � � � * � � � & � � � � � * � �� $ � � � � �� � * �
� � � ! * � � � � � � �� � � � $� � ! �
��� � �� �� ��� �� �� �� � ��� � #
� � � � � � � � � � � � � � ��
� � ��� �� � � �� � �� �
� � � � � �� � �� � �� � � �� � � � � �� � � � � �� � � � � � �� ��
� � � �� � �� � � �� ��
� � � � � � � � �� �� � � �� � � � � � �� � � � � � � �� � � � � ! � � � � � � � �� � �" � �
� # �� � � �$ !� � � � � �� � �� � � � � �� � � � � � � � � � � % � � ! � � �
� ! ! � � � '& ( � �*) ( � � � + ( �
� , �� � � � �� �� � � � � �� �
� , �� � � � �� �� � � � � �� �
� , �� � � � �� ! � � � � �� � � � ! � � � �� ! � � � �� � �� � � ��
� �� � � � �� - � � � � � � �� �
� ) � � � � # � � � � �� � � � �� ! � � � + �� � � � � � � � ��
./0 1 23 24 2/5 67 85 9: ; <��= >
� �� � � � �� � � � � � �� � �� � � �� � �
� � � � � �� � � � � �
� � � � �� � � � � � � # �� � � � � � �� � �� � � � �
� � � � � � � " ( � � ( � ( �
�� � � � � �� � � " � � � " �
�� � � � �� � " � ( � �� � �
�� � � � � �� � " � " � " � � � (
� � � � � ( � � � ( ( ( � � �� (
! � � � � � ( � ( � "� � � " �� � �
./0 1 23 24 2/5 67 85 9: ; <�� � >
�� � � �� � � �� � � � �� � � � � � � � � �� �� � �� � � �� � � � �� � �
� � � � � �� � � � � �
� �� � � � �� � � � # � � � � �� � � �� �� �� �
� � � � � � �� " � " �� " � � ��� � � � �
�� � � � �� ( (� ( � � � �� �� � � �
�� � "� " � � � � � �� � � �� �� � � �
�� � � (� (� � � � � � � � � �� �� � � �
� � � � "� "� " � � � � � � � � �� � � � � �
! � � � � " � � � �� � � � � � � " � � � � � �
./0 1 23 24 2/5 67 85 9: ; <�� � >
Percentage Methods Removed From Conservative Call Graph(Whole Application)
���
����
����
����
��� ���
�
� ���
� �� �
� ���� �� �
��� �
��� ��
%
!" #! " #$% &
' % &
()* + ,- ,. ,)/ 01 2/ 34 5 6879 :
Percentage Edges Removed From Conservative Call Graph(whole application)
���
����
����
�����
� � ����
� ����
� ���� �
� ����� �� �
��� � �
��� �� �
%
!" #! " #$% &
' % &
()* + ,- ,. ,)/ 01 2/ 34 5 687 ( :
Percentage Methods Removed From Conservative Call Graph(Benchmark only)
��
��
��
��
�
��� � ��� �
� ����
� ��� � �
� ����� �� � ��� �
�
� �"!! �
%
#$ %# $ %&' (
) ' (
()* + ,- ,. ,)/ 01 2/ 34 5 687 * :
Percentage Edges Removed From Conservative Call Graph(Benchmark Only)
��
����
����
����� ����
�
���
����
� ����� � ��� �
������ �
%
�� �� � � ! "
# ! "
()* + ,- ,. ,)/ 01 2/ 34 5 6%$& :
Percentage Potentially Polymorphic Calls Resolved from Conservative Call Graph (Benchmark only)
���
����
����
����
���
�� �
�� � �� � � � � �� � �� � � ��� � � �
%
�� �� � ��� �
� � � � ! �"
()* + ,- ,. ,)/ 01 2/ 34 5 6%$# :
Percentage Virtual Method Calls that resolve to Exactly One Method at Run-time (Benchmark only)
�������
��������
����� �
��� � ���
�
� ����
� ������
� ����� �� � ��� �
�� �"!! �
%
#$ %#$ %&' (
) ' (*+ ,-. / 0
()* + ,- ,. ,)/ 01 2/ 34 5 6%$ 7 :
� �� �� �� �� �
� � �� � �� � �� �� � �� ��� � � ��� � ��
�� � � � �� � � � �� �� � � � �� � � � � �� � � �
! " � # � $ � � � � � �% � � � � � &(' ' ) *+ , -. /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
� �� �� �� � �� �
� � � 5� � E � � � , � � � � � � & � E , / 5� �� � � � � � �
� � � � F � � � � F� �� � � � �� � � � �� � � � � � � � � $ � �
�� �� � � � � �
� E , � � � �� � � � &� � � � � �� � � � / � � F� �� � � � � � �� �
� �� �� � � � � � � �� � �� �� � � � � � ��� � �� � � � E , �
� E , � � � �� 5� � � � � � � � � # � �� � �� � � � � * � �� � * � ��
� � � � 5� � � � � �� � �� 5� � � � # � � N � �� 5� � � �
� � � �� �� � � � �� � �� �� � �
XYZ[ \] \^ \Y_ `a b_ cd e f%$� g