Language- and Machine-Independent Global Optimization on Intermediate Code

Abstract Many retargetable production compilers use some form on intermediate code for applying global optimizations. The compilers of the Amsterdam Compiler Kit use a low-level, language- and machine-independent, intermediate code called EM. The choice of intermediate code has impact on both the effectiveness of a global optimizer and on the ease of achieving a machine-independent implementation. These effects have been studied by implementing several global optimization techniques for EM. Comparisons are made with optimizing codes of a higher-level (e.g. trees) or of a lower level (e.g. assembly code). It is also shown what kind of knowledge about the source language and target machine a global optimizer should have, to be effective.

[1]  Jack W. Davidson,et al.  Simplifying code generation through peephole optimization , 1981 .

[2]  Fred C. Chow,et al.  A portable machine-independent global optimizer--design and measurements , 1984 .

[3]  Jeffrey D. Ullman,et al.  The Generation of Optimal Code for Arithmetic Expressions , 1970, JACM.

[4]  Christopher W. Fraser,et al.  Automatic generation of peephole optimizations , 1984, SIGPLAN '84.

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

[6]  Robert E. Tarjan,et al.  A fast algorithm for finding dominators in a flowgraph , 1979, TOPL.

[7]  Brian A. Wichmann,et al.  Rationale for the design of the Ada programming language , 1979, SIGP.

[8]  Guy L. Steele,et al.  Report on the 1980 LiSP Conference Stanford University. August 25-27, 1980 , 1982, SIGP.

[9]  William A. Wulf,et al.  The Design of an Optimizing Compiler , 1975 .

[10]  Ravi Sethi,et al.  Efficient Computation of Expressions with Common Subexpressions , 1980, J. ACM.

[11]  Lawrence A. Rowe,et al.  Analyzing exotic instructions for a retargetable code generator , 1982, SIGPLAN '82.

[12]  Benjamin M. Brosgol TCOLAda and the “Middle End” of the PQCC Ada compiler , 1980, SIGPLAN '80.

[13]  Andrew S. Tanenbaum,et al.  Using Peephole Optimization on Intermediate Code , 1982, TOPL.

[14]  Thomas C. Spillman,et al.  Exposing Side-Effects in a PL/I Optimizing Compiler , 1971, IFIP Congress.

[15]  Andrew S. Tanenbaum,et al.  A practical tool kit for making portable compilers , 1983, Commun. ACM.

[16]  Andrew S. Tanenbaum,et al.  A UNIX Toolkit for Making Portable Compilers , 1983 .

[17]  Thomas B. Steel,et al.  UNCOL: The myth and the fact , 1961 .

[18]  Gary Bray Implementation implications of Ada generics , 1983, ALET.

[19]  Bruce R. Schatz,et al.  An Overview of the Production-Quality Compiler-Compiler Project , 1980, Computer.

[20]  Alfred V. Aho,et al.  Principles of Compiler Design , 1977 .

[21]  Richard L. Sites,et al.  Machine-independent PASCAL code optimization , 1979, SIGPLAN '79.

[22]  Brian W. Kernighan,et al.  The C Programming Language , 1978 .

[23]  Martin Hopkins,et al.  An overview of the PL.8 compiler , 1982, SIGPLAN '82.

[24]  Micha Sharir,et al.  The design of a global optimizer , 1979, SIGPLAN '79.

[25]  Reinhold Weicker,et al.  Dhrystone: a synthetic systems programming benchmark , 1984, CACM.

[26]  William A. Wulf PQCC : a machine-relative compiler technology , 1980 .

[27]  Steven V. Earhart UNIX programmer's manual , 1986 .

[28]  Robert Scheifler,et al.  An analysis of inline substitution for a structured programming language , 1977, CACM.

[29]  Christopher W. Fraser,et al.  Code selection through object code optimization , 1984, TOPL.

[30]  Bruce Wallace Leverett Register Allocation in Optimizing Compilers , 1983 .