A framework for call graph construction algorithms
- 1 November 2001
- journal article
- Published by Association for Computing Machinery (ACM) in ACM Transactions on Programming Languages and Systems
- Vol. 23 (6) , 685-746
- https://doi.org/10.1145/506315.506316
Abstract
A large number of call graph construction algorithms for object-oriented and functional languages have been proposed, each embodying different tradeoffs between analysis cost and call graph precision. In this article we present a unifying framework for understanding call graph construction algorithms and an empirical comparison of a representative set of algorithms. We first present a general parameterized algorithm that encompasses many well-known and novel call graph construction algorithms. We have implemented this general algorithm in the Vortex compiler infrastructure, a mature, multilanguage, optimizing compiler. The Vortex implementation provides a "level playing field" for meaningful cross-algorithm performance comparisons. The costs and benefits of a number of call graph construction algorithms are empirically assessed by applying their Vortex implementation to a suite of sizeable (5,000 to 50,000 lines of code) Cecil and Java programs. For many of these applications, interprocedural analysis enabled substantial speed-ups over an already highly optimized baseline. Furthermore, a significant fraction of these speed-ups can be obtained through the use of a scalable, near-linear time call graph construction algorithm.Keywords
This publication has 13 references indexed in Scilit:
- Call graph construction in object-oriented languagesACM SIGPLAN Notices, 1997
- Simple and effective analysis of statically-typed object-oriented programsACM SIGPLAN Notices, 1996
- VortexACM SIGPLAN Notices, 1996
- Profile-guided receiver class predictionACM SIGPLAN Notices, 1995
- Generation of efficient interprocedural analyzers with PAGPublished by Springer Nature ,1995
- Constraint-based type inference and parametric polymorphismPublished by Springer Nature ,1994
- Efficient call graph analysisACM Letters on Programming Languages and Systems, 1992
- Efficient type inference for higher-order binding-time analysisPublished by Springer Nature ,1991
- Constructing the procedure call multigraphIEEE Transactions on Software Engineering, 1990
- Global Data Flow Analysis and Iterative AlgorithmsJournal of the ACM, 1976