Advertisement

Link-Time Improvement of Scheme Programs

  • Saumya Debray
  • Robert Muth
  • Scott Watterson
Conference paper
  • 443 Downloads
Part of the Lecture Notes in Computer Science book series (LNCS, volume 1575)

Abstract

Optimizing compilers typically limit the scope of their analyses and optimizations to individual modules. This has two drawbacks: first, library code cannot be optimized together with their callers, which implies that reusing code through libraries incurs a penalty; and second, the results of analysis and optimization cannot be propagated from an application module written in one language to a module written in another. A possible solution is to carry out (additional) program optimization at link time. This paper describes our experiences with such optimization using two different optimizing Scheme compilers, and several benchmark programs, via alto, a link-time optimizer we have developed for the DEC Alpha architecture. Experiments indicate that significant performance improvements are possible via link-time optimization even when the input programs have already been subjected to high levels of compile-time optimization.

Keywords

Basic Block Scheme Program Memory Operation Instruction Cache Benchmark Program 
These keywords were added by machine and not by the authors. This process is experimental and the keywords may be updated as the learning algorithm improves.

References

  1. 1.
    Aho, A.V., Sethi, R., Ullman, J.D.: Compilers – Principles. Techniques and Tools. Addison-Wesley, Reading (1986)Google Scholar
  2. 2.
    Ashley, J.M.: The Effectiveness of Flow Analysis for Inlining. In: Proc. 1997 SIGPLAN International Conference on Functional Programming, June 1997, pp. 99–111 (1997)Google Scholar
  3. 3.
    Blickstein, D., et al.: The GEM Optimizing Compiler System. Digital Technical Journal 4(4), 121–136Google Scholar
  4. 4.
    Blume, M., Appel, A.W.: Lambda-splitting: A Higher-Order Approach to Cross-Module Optimizations. In: Proc. 1997 SIGPLAN International Conference on Functional Programming, June 1997, pp. 112–124 (1997)Google Scholar
  5. 5.
    Calder, B., Grunwald, D.: Reducing Indirect Function Call Overhead in C++ Programs. In: Proc. 21st ACM Symposium on Principles of Programming Languages, January 1994, pp. 397–408 (1994)Google Scholar
  6. 6.
    Chow, F.C.: Minimizing Register Usage Penalty at Procedure Calls. In: Proc. SIGPLAN 1988 Conference on Programming Language Design and Implementation, June 1988, pp. 85–94 (1988)Google Scholar
  7. 7.
    Fernández, M.F.: Simple and Effective Link-Time Optimization of Modula-3 Programs. In: Proc. SIGPLAN 1995 Conference on Programming Language Design and Implementation, June 1995, pp. 103–115 (1995)Google Scholar
  8. 8.
    Grove, D., Dean, J., Garrett, C., Chambers, C.: Profile-Guided Receiver Class Prediction. In: Proc. Tenth Annual Conference on Object-Oriented Programming Systems, Languages, and Applications (OOPSLA 1995), October 1995, pp. 108–123 (1995)Google Scholar
  9. 9.
    Henglein, F.: Global Tagging Optimization by Type Inference. In: Proc. 1992 ACM Symposium on Lisp and Functional Programming, pp. 205–215 (1992)Google Scholar
  10. 10.
    Jagannathan, S., Wright, A.: Flow-directed Inlining. In: Proc. SIGPLAN 1996 Conference on Programming Language Design and Implementation, May 1996, pp. 193–205 (1996)Google Scholar
  11. 11.
    Pettis, K., Hansen, R.C.: Profile-Guided Code Positioning. In: Proc. SIGPLAN 1990 Conference on Programming Language Design and Implementation, June 1990, pp. 16–27 (1990)Google Scholar
  12. 12.
    Romer, T., Voelker, G., Lee, D., Wolman, A., Wong, W., Levy, H., Bershad, B.N., Chen, J.B.: Instrumentation and Optimization of Win32/Intel Executables. In: Proc. 1997 USENIX Windows NT WorkshopGoogle Scholar
  13. 13.
    Santhanam, V., Odnert, D.: Register Allocation across Procedure and Module Boundaries. In: Proc. SIGPLAN 1990 Conference on Programming Language Design and Implementation, June 1990, pp. 28–39 (1990)Google Scholar
  14. 14.
    Serrano, M., Weis, P.: Bigloo: a portable and optimizing compiler for strict functional languages. In: Mycroft, A. (ed.) SAS 1995. LNCS, vol. 983, pp. 366–381. Springer, Heidelberg (1995)Google Scholar
  15. 15.
    Srivastava, A., Wall, D.W.: A Practical System for Intermodule Code Optimization at Link-Time. Journal of Programming Languages, 1–18 (March 1993)Google Scholar
  16. 16.
    Srivastava, A., Wall, D.W.: Link-time Optimization of Address Calculation on a 64-bit Architecture. In: Proc. SIGPLAN 1994 Conference Programming Language Design and Implementation. June 1994, pp. 49–60 (1994)Google Scholar
  17. 17.
    Steenkiste, P.A.: The Implementation of Tags and Run-Time Type Checking. In: Lee, P. (ed.) Topics in Advanced Language Implementation. MIT Press, Cambridge (1991)Google Scholar
  18. 18.
    Waddell, O., Dybvig, R.K.: Fast and Effective Procedure Inlining. In: Van Hentenryck, P. (ed.) SAS 1997. LNCS, vol. 1302, pp. 35–52. Springer, Heidelberg (1997)CrossRefGoogle Scholar
  19. 19.
    Wall, D.W.: Global Register Allocation at Link Time. In: Proc. SIGPLAN 1986 Symposium on Compiler Construction, July 1986, pp. 264–275 (1986)Google Scholar
  20. 20.
    Wilson, R.P., Lam, M.S.: Efficient Context-Sensitive Pointer Analysis for C Programs. In: Proc. SIGPLAN 1995 Conference on Programming Language Design and Implementation, June 1995, pp. 1–12 (1995)Google Scholar

Copyright information

© Springer-Verlag Berlin Heidelberg 1999

Authors and Affiliations

  • Saumya Debray
    • 1
  • Robert Muth
    • 1
  • Scott Watterson
    • 1
  1. 1.Department of Computer ScienceUniversity of Arizona TucsonUSA

Personalised recommendations