A survey of compiler optimization techniques

This survey describes the major optimization techniques of compilers and groups them into three categories: machine dependent, architecture dependent, and architecture independent. Machine-dependent optimizations tend to be local and are performed upon short spans of generated code by using particular properties of an instruction set to reduce the time or space required by a program. Architecture-dependent optimizations are global and are performed while generating code. These optimizations consider the structure of a computer, but not its detailed instruction set. Architecture-independent optimizations are also global but are based on analysis of the program flow graph and the dependencies among statements of source program. The paper also presents a conceptual review of a universal optimizer that performs architecture-independent optimizations at source-code level.

[1]  A. P. Ershov,et al.  ALPHA - an automatic programming system of high efficiency , 1965 .

[2]  Andreĭ Petrovich Ershov,et al.  The ALPHA automatic programming system , 1963 .

[3]  Reese T. Prosser,et al.  Applications of Boolean matrices to the analysis of flow diagrams , 1899, IRE-AIEE-ACM '59 (Eastern).

[4]  B SheridanPeter The arithmetic translator-compiler of the IBM FORTRAN automatic coding system , 1959 .

[5]  Ken Kennedy,et al.  A global flow analysis algorithm , 1972 .

[6]  R. W. Allard,et al.  Some effects of the 6600 computer on language structures , 1964, CACM.

[7]  Sidney B. Gasser Program optimization , 1972 .

[8]  Robert C. Miller,et al.  Producing Computer Instructions for the PACT I Compiler , 1956, JACM.

[9]  Yoichi Muraoka,et al.  On the Number of Operations Simultaneously Executable in Fortran-Like Programs and Their Resulting Speedup , 1972, IEEE Transactions on Computers.

[10]  John T. Bagwell Local optimizations , 1970 .

[11]  Roman R. Redziejowski On arithmetic expressions and trees , 1969, CACM.

[12]  Edward S. Lowry,et al.  Object code optimization , 1969, CACM.

[13]  J. Cocke Global common subexpression elimination , 1970, Symposium on Compiler Optimization.

[14]  C. V. Ramamoorthy,et al.  Analysis of Graphs by Connectivity Considerations , 1966, J. ACM.

[15]  C. V. Ramamoorthy,et al.  Subexpression ordering in the execution of arithmetic expressions , 1971, Commun. ACM.

[16]  Fabrizio Luccio,et al.  A comment on index register allocation , 1967, CACM.

[17]  Harold S. Stone,et al.  One-Pass compilation of arithmetic expressions for a parallel processor , 1967, CACM.

[18]  Victor B. Schneider,et al.  On the number of registers needed to evaluate arithmetic expressions , 1971 .

[19]  Ikuo Nakata,et al.  On compiling algorithms for arithmetic expressions , 1967, CACM.

[20]  Jeffrey D. Ullman,et al.  Flow graph reducibility , 1972, SIAM J. Comput..

[21]  Aaas News,et al.  Book Reviews , 1893, Buffalo Medical and Surgical Journal.

[22]  C. V. Ramamoorthy,et al.  Optimization Strategies for Microprograms , 1971, IEEE Transactions on Computers.

[23]  Frances E. Allen,et al.  Control-flow analysis , 2022 .

[24]  W. M. McKeeman,et al.  Peephole optimization , 1965, CACM.

[25]  William H. E. Day,et al.  Compiler Assignment of Data Items to Registers , 1970, IBM Syst. J..

[26]  Vincent A. Busam,et al.  Optimization of expressions in Fortran , 1969, CACM.

[27]  James P. Anderson A note on some compiling algorithms , 1964, CACM.

[28]  Joseph T. Ryan A Direction-Independent Algorithm for Determining the Forward and Backward Compute Point for A Term or Subscript During Compilation , 1966, Comput. J..

[29]  John Cocke,et al.  Programming languages and their compilers , 1969 .

[30]  J. F. Thorlin Code generation for PIE (Parallel Instruction Execution) computers , 1967, AFIPS '67 (Spring).

[31]  Paul B. Schneck,et al.  Automatic recognition of vector and parallel operations in a higher level language , 1972, ACM '72.

[32]  Richard M. Karp,et al.  Index Register Allocation , 1966, JACM.

[33]  Brian Randell,et al.  Single-Scan Techniques for the Translation of Arithmetic Expressions in ALGOL 60 , 1964, JACM.

[34]  Peter B. Sheridan,et al.  The arithmetic translator-compiler of the IBM FORTRAN automatic coding system , 1959, CACM.

[35]  David Gries,et al.  Compiler Construction for Digital Computers , 1971 .

[36]  Stephen Warshall,et al.  A Theorem on Boolean Matrices , 1962, JACM.

[37]  A. P. Yershóv ALPHA—An Automatic Programming System of High Efficiency , 1966, JACM.

[38]  Mark Finkelstein A compiler optimization technique , 1968, Comput. J..

[39]  J. W. Backus,et al.  The FORTRAN automatic coding system , 1899, IRE-AIEE-ACM '57 (Western).

[40]  Paul B. Schneck,et al.  A FORTRAN to FORTRAN Optimising Compiler , 1973, Comput. J..

[41]  John Cocke,et al.  Programming languages and their compilers: Preliminary notes , 1969 .