The complementary relationship of interprocedural register allocation and inlining

Inline expansion and interprocedural register allocation are two general approaches used for interprocedural optimization. However, there are certain situations which prevent either of them from being applied smoothly to procedure calls. This paper describes a method of integrating interprocedural register allocation and inlining in order to reduce the procedure call overhead. The method uses profile information to identify the heavy called procedures regions and optimizes the placement of the register save/restore code. This method also takes full advantage of free-use registers at each procedure cell site. The average performance improvement is 1.21 compared with the previous schemes that performed either of them independently.<<ETX>>

[1]  Keith D. Cooper,et al.  An experiment with inline substitution , 1991, Softw. Pract. Exp..

[2]  Scott A. Mahlke,et al.  Profile‐guided automatic inline expansion for C programs , 1992, Softw. Pract. Exp..

[3]  Vatsa Santhanam,et al.  Register allocation across procedure and module boundaries , 1990, PLDI '90.

[4]  Barbara M. Chapman,et al.  Supercompilers for parallel and vector computers , 1990, ACM Press frontier series.

[5]  Jack W. Davidson,et al.  Subprogram Inlining: A Study of its Effects on Program Execution Time , 1992, IEEE Trans. Software Eng..

[6]  John L. Hennessy,et al.  The priority-based coloring approach to register allocation , 1990, TOPL.

[7]  Susan L. Graham,et al.  Gprof: A call graph execution profiler , 1982, SIGPLAN '82.

[8]  Feipei Lai,et al.  Exploiting instruction-level parallelism with the conjugate register file scheme , 1992, MICRO 1992.

[9]  Feipei Lai,et al.  Exploiting instruction-level parallelism with the conjugate register file scheme , 1992, MICRO.

[10]  Michael D. Smith,et al.  Boosting beyond static scheduling in a superscalar processor , 1990, [1990] Proceedings. The 17th Annual International Symposium on Computer Architecture.

[11]  David B. Whalley,et al.  Methods for saving and restoring register values across function calls , 1991, Softw. Pract. Exp..

[12]  Scott McFarling,et al.  Procedure merging with instruction caches , 1991, PLDI '91.

[13]  Wei-Chung Hsu Register allocation and code scheduling for load/store architectures , 1987 .

[14]  Fred C. Chow Minimizing register usage penalty at procedure calls , 1988, PLDI '88.

[15]  Ken Kennedy,et al.  The impact of interprocedural analysis and optimization in the Rn programming environment , 1986, TOPL.

[16]  P. J. Plauger The Standard C Library , 1991 .

[17]  Anne M. Holler A Study of the Effects of Subprogram Inlining , 1991 .

[18]  Stephen Richardson,et al.  Interprocedural analysis vs. procedure integration , 1989, Inf. Process. Lett..

[19]  Jack W. Davidson,et al.  A study of a C function inliner , 1988, Softw. Pract. Exp..

[20]  Peter Steenkiste,et al.  A simple interprocedural register allocation algorithm and its effectiveness for LISP , 1989, TOPL.