Object-oriented programming languages provide many software engineering benets, but these often come at a performance cost. Object-oriented programs make extensive use of method invocations and pointer dereferences, both of which are potentially costly on modern machines. We show how to use types to produce eective, yet simple, techniques that reduce the costs of these features in Modula-3, a statically typed, object-oriented language. Our compiler performs type-based alias analysis to disambiguate memory references. It uses the results of the type-based alias analysis to eliminate redundant memory references and to replace monomorphic method invocation sites with direct calls. Using limit, static, and running time evaluation, we demonstrate that these techniques are eective, and often close to perfect for a set of Modula-3 benchmarks.
|
3266
|
Computer Architecture A Quantitative Approach
– Hennessy, Patterson
- 1995
|
|
684
|
ATOM: A system for building customized program analysis tools
– Srivastava, Eustace
- 1994
|
|
440
|
Points-to analysis in almost linear time
– Steensgaard
- 1996
|
|
357
|
Efficient Context-Sensitive Pointer Analysis for C Programs
– Wilson, Lam
- 1995
|
|
342
|
Context-sensitive interprocedural points-to analysis in the presence of function pointers
– Emami, Ghiya, et al.
|
|
335
|
Limits of instruction-level parallelism
– Wall
- 1991
|
|
329
|
Analysis of pointers and structures
– Chase, Wegman, et al.
- 1990
|
|
287
|
Optimization of Object-Oriented Programs Using Static Class Hierarchy Analysis
– Dean, Grove, et al.
- 1995
|
|
242
|
Control-flow Analysis of HigherOrder Languages, or Taming Lambda
– SHIVERS
- 1991
|
|
213
|
Object-oriented type inference
– Palsberg, Schwartzbach
- 1991
|
|
198
|
Customization: Optimizing compiler technology for SELF, a dynamically-typed object-oriented programming language
– Chambers, Ungar
- 1989
|
|
197
|
Fast static analysis of c++ virtual function calls
– Bacon, Sweeney
- 1996
|
|
192
|
Interprocedural May-Alias Analysis for Pointers: Beyond k-Limiting
– Deutsch
- 1994
|
|
188
|
Polymorphic effect systems
– Lucassen, Gifford
- 1988
|
|
187
|
Efficient flow-sensitive interprocedural computation of pointer-induced aliases and side effects
– Choi, Burke, et al.
- 1993
|
|
184
|
Efficiency of a good but not linear set union algorithm
– Tarjan
- 1975
|
|
169
|
Guttag, Abstraction and Specification in Program Development
– Liskov, V
- 1986
|
|
163
|
Precise concrete type inference for object-oriented languages
– Plevyak, Chien
- 1994
|
|
161
|
Systems Programming with Modula-3
– Nelson
- 1991
|
|
159
|
Detecting conflicts between structure accesses
– Larus, Hilfinger
- 1988
|
|
143
|
Fast and Accurate Flow-Insensitive Points-To Analysis
– Shapiro, Horwitz
- 1997
|
|
128
|
Iterative Type Analysis and Extended Message Splitting: Optimizing DynamicallyTyped Object-Oriented Programs
– Chambers, Ungar
- 1990
|
|
126
|
Context-insensitive alias analysis reconsidered
– Ruf
- 1995
|
|
123
|
Reducing indirect function call overhead in C++ programs
– Calder, Grunwald
- 1994
|
|
122
|
An efficient way to find the side effects of procedure calls and the aliases of vsristbles
– Banning
- 1979
|
|
121
|
Vortex: An Optimizing Compiler for ObjectOriented Languages
– Dean, DeFouw, et al.
- 1996
|
|
115
|
Global data flow analysis and iterative algorithms
– Kam, Ullman
- 1976
|
|
112
|
Pointer-Induced Aliasing: A Problem Classification," presented at
– Landi, Ryder
- 1991
|
|
93
|
Relevant context inference
– Chatterjee, Ryder, et al.
- 1999
|
|
86
|
Simple and Effective Link-Time Optimizations of Modula-3 Programs
– Fernández
- 1995
|
|
84
|
Putting pointer analysis to work
– Ghiya, Hendren
- 1998
|
|
83
|
Quantifying Behavioral Differences Between C and C++ Programs
– Calder, Grunwald, et al.
- 1994
|
|
81
|
Profile-Guided Receiver Class Prediction
– Grove, Dean, et al.
- 1995
|
|
77
|
Making type inference practical
– Oxhøj, Palsberg, et al.
- 1992
|
|
73
|
Interprocedural pointer alias analysis
– Hind, Burke, et al.
- 1999
|
|
72
|
Fast interprocedural alias analysis
– Cooper, Kennedy
|
|
72
|
Type-based alias analysis
– Diwan, McKinley, et al.
- 1998
|
|
70
|
Managing Interprocedural Optimization
– Hall
- 1990
|
|
69
|
The effects of the precision of pointer analysis
– Shapiro, Horwitz
- 1302
|
|
65
|
Fast Interprocedural Class Analysis
– DeFouw, Grove, et al.
- 1998
|
|
65
|
Interprocedural data flow analysis in the presence of pointers, procedure variables, and label variables
– Weihl
- 1980
|
|
63
|
A general data dependence test for dynamic, pointer-based data structures
– Hummel, Hendren, et al.
- 1994
|
|
56
|
Eliminating virtual function calls in C++ programs
– Aigner, Hölzle
- 1996
|
|
51
|
The direct cost of virtual function calls in C
– Driesen, Hölzle
|
|
47
|
Commutativity analysis: A new analysis framework for parallelizing compilers
– Rinard, Diniz
- 1996
|
|
46
|
Register promotion in c programs
– Cooper, Lu
- 1997
|
|
46
|
Wholeprogram optimization of object-oriented languages
– Chambers, Dean, et al.
- 1996
|
|
43
|
Concrete type inference: Delivering object-oriented applications
– Agesen
- 1995
|
|
42
|
M.: Alias Analysis of Executable Code
– Debray, Muth, et al.
- 1998
|
|
41
|
Whole-Program optimization of object-oriented languages
– Dean
- 1996
|