Abstract
Conventional compilers typically ignore the potential benefits of keeping array elements in registers for reuse, due in part to the fact that standard data flow analysis techniques used in register allocation are not expressive enough to distinguish among individual array elements. This paper introduces the concept of register pipelining as an integrated approach to register allocation for both scalar and subscripted variables. A register pipeline is a set of registers that is allocated to the live ranges of array elements inside a loop. By preserving the computed array elements in the pipeline stages, reuse is enabled across loop iterations. We present an efficient data flow algorithm that extends the construction of live ranges to array elements. To enable a fair competition among the live ranges of subscripted and scalar variables for the available registers, we developed an integrated version of the standard graph coloring algorithm for register allocation.
Partially supported by National Science Foundation Presidential Young Investigator Award CCR-9157371 and Grant CCR-9109089 to the University of Pittsburgh.
Chapter PDF
Similar content being viewed by others
Keywords
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
A. V. Aho, R. Sethi, and J. D. Ullman, in Compilers, principles, techniques, and tools, Addison-Wesley Publishing Company, Massachusetts, 1986.
A. Aiken and A. Nicolau, “Optimal loop parallelization,” Proc. of the ACM SIGPLAN '88 Conf. on Programming Language Design and Implementation, pp. 308–317, Atlanta, Georgia, June 1988.
M. E. Benitez and J. W. Davidson, “Code generation for streaming: an access/execute mechanism,” Proc. of the 4th Int. Conf. on Architectural Support for Programming Languages and Operating Systems., pp. 132–141, Santa Clara, California, April 1991.
D. Callahan, S. Carr, and K. Kennedy, “Improving register allocation for subscripted variables,” Proc. of the ACM SIGPLAN '90 Conf. Programming Language Design and Implementation, pp. 53–65, White Plains, New York, June 1990.
D. Callahan, K. Kennedy, and A. Porterfield, “Software Prefetching,” Proc. of the 4th Int. Conf. on Architectural Support for Programming Languages and Operating Systems, pp. 40–S2, Santa Clara, California, April 1991.
G. J. Chaitin, “Register allocation and spilling via graph coloring,” (Proc. of the ACM SIGPLAN 82 Symp. on Compiler Construction), ACM SIGPLAN Notices, vol. 17, no. 6, pp. 201–207, June 1982.
F. Chow and J. Hennessy, “Register allocation by priority-based coloring,” ACM SIGPLAN Notices, vol. 19, no. 6, pp. 222–232, 1984.
J.C. Dehnert, P.Y.-T. Hsu, and J.P. Bratt, “Overlapped loop support in the Cydra 5,” Proc. of the 3rd Int. Conf. on Architectural Support for Programming Languages and Operating Systems., pp. 26–39, Boston, Massachusetts, April 1989.
D. Gannon, W. Jalby, and K. Gallivan, “Strategies for cache and local memory management by global program transformation,” Journal of Parallel and Distributed Computing, no. 5, pp. 587–616, 1988.
A. D. Kallis and D. Klappholz, “Reaching definitions analysis on code containing array references,” 4th Workshop on Languages and Compilers for Parallel Computing, Santa Clara, California, August 1991.
D.J. Kuck, R.H. Kuhn, D. Padua, B.R, Leisure, and M. Wolfe, “Dependence graphs and compiler optimization,” Proc. of the 8th ACM Symp. on Principles of Programming Languages, pp. 207–218, Williamsburgh, Virginia, January, 1981.
M. S. Lam, “Software pipelining: An effective scheduling technique for VLIW machines,” Proc. of the ACM SIGPLAN '88 Conf. Programming Language Design and Implementation, pp. 318–328, Atlanta, Georgia, June 1988.
M. S. Lam, E. E. Rothberg, and M. E. Wolf, “The cache performance and optimizations of blocked algorithms,” Proc. of the 4th Int. Conf. on Architectural Support for Programming Languages and Operating Systems, pp. 63–74, Santa Clara, California, April 1991.
A. Porterfield, “Software methods for improvement of cache performance on supercomputer applications,” PhD. thesis, Rice University, May 1989.
B. R. Rau, “Data flow and dependence analysis for instruction-level parallelism,” 4th Workshop on Languages and Compilers for Parallel Computing, Santa Clara, California, August 1991.
M. E. Wolf and M. S. Lam, “A data locality optimizing algorithm,” Proc. of the ACM SIGPLAN '91 Conf. Programming Language Design and Implementation, pp. 30–44, Toronto, Ontario, Canada, June 1991.
M. Wolfe and U. Banerjee, “Data dependence and its application to parallel processing,” Int. Journal of Parallel Programming, vol. 16, no. 2, pp. 137–178, 1987.
M. Wolfe, “Optimizing supercompilers for supercomputers,” Pitman Publishing Company, London, MIT Press, Cambridge, Massachusets, 1989.
Author information
Authors and Affiliations
Editor information
Rights and permissions
Copyright information
© 1992 Springer-Verlag Berlin Heidelberg
About this paper
Cite this paper
Duesterwald, E., Gupta, R., Soffa, M.L. (1992). Register pipelining: An integrated approach to register allocation for scalar and subscripted variables. In: Kastens, U., Pfahler, P. (eds) Compiler Construction. CC 1992. Lecture Notes in Computer Science, vol 641. Springer, Berlin, Heidelberg. https://doi.org/10.1007/3-540-55984-1_18
Download citation
DOI: https://doi.org/10.1007/3-540-55984-1_18
Published:
Publisher Name: Springer, Berlin, Heidelberg
Print ISBN: 978-3-540-55984-9
Online ISBN: 978-3-540-47335-0
eBook Packages: Springer Book Archive