A unified approach to global program optimization

  title={A unified approach to global program optimization},
  author={Gary A. Kildall},
  journal={Proceedings of the 1st annual ACM SIGACT-SIGPLAN symposium on Principles of programming languages},
  • G. Kildall
  • Published 1 October 1973
  • Computer Science
  • Proceedings of the 1st annual ACM SIGACT-SIGPLAN symposium on Principles of programming languages
A technique is presented for global analysis of program structure in order to perform compile time optimization of object code generated for expressions. [] Key Method A general purpose program flow analysis algorithm is developed which depends upon the existence of an "optimizing function." The algorithm is defined formally using a directed graph model of program flow structure, and is shown to be correct.

Figures and Tables from this paper

Interprocedural constant propagation

A general algorithm for determining for each procedure in a given program the set of inputs that will have known constant values at run time that is intended for use in a sophisticated software development environment.

Efficient Symbolic Analysis of Programs

Predicting the effects of optimization on a procedure body

A technique is described for predicting the code improvement that can be expected due to constant folding and test elision when a procedure call involving constant actual parameters is integrated.

Use-Definition Chains with Applications

Efficient call graph analysis

The algorithm computes the possible bindings of procedure variables in languages where such variables only receive their values through parameter passing, such as Fortran, to accommodate a limited form of assignments to procedure variables.

Computation and use of data flow information in optimizing compilers

It is shown for a small language, how global data flow information can be collected, used in determining the applicability of optimizing program transformations, and updated after transformations have made the flow information invalid.

Automatic generation of data-flow analyzers : a tool for building optimizers

This dissertation concerns the building of optimizers that are modular and extensible, in which each phase is based on a data-flow analysis of the program and on an optimization function that transforms the program.

A unified compiler framework for program analysis, optimization, and automatic vectorization with chains of recurrences

It is shown how Inductive SSA enables and/or enhances loop-variant variable analysis, improves dependence testing for loops, and how it can be effectively used by many classic compiler optimizations to improve compilation results.

Incremental whole program optimization and compilation

A practical and extensible framework for incremental whole program optimization (WPO) and compilation that achieves up to 7X compilation speedup for typical edits and a novel mechanism for achieving the no code generation diff requirement in the presence of multi-level inline expansion.

Automatic Determination of May/Must Set Usage in Data-Flow Analysis

The DFAGen Tool is presented, which generates implementations for locally separable data-flow analyses that are pointer, side-effect, and aggregate cognizant from an analysis specification that assumes only scalars.



Optimization of expressions in Fortran

A method of optimizing the computation of arithmetic and indexing expressions of a Fortran program is presented. The method is based on a linear analysis of the definition points of the variables and

Control flow analysis

  • F. Allen
  • Computer Science
    Symposium on Compiler Optimization
  • 1970
The basic control flow relationships are expressed in a directed graph and various graph constructs are found and shown to codify interesting global relationships.

High speed compilation of efficient object code

A three-pass compiler with the following properties is briefly described: The last two passes scan an intermediate language produced by the preceding pass in essentially the reverse of the order in

Some techniques for algorithm optimization with application to matrix arithmetic expressions

This thesis contributes to the production of optimum algorithms in two ways: a technique was developed for producing new algorithms equivalent to old algorithms, and a technique is described which reduces the effort required by certain exhaustive searches over 'well- structured' search spaces.

A formal approach to code optimization

An algorithm is presented which produces machine code for evaluating arithmetic expressions on machines with N ≥ 1 general purpose registers and it is proved that this algorithm produces optimal code when the cost criterion is the length of machine code generated.

Compiling techniques for Boolean expressions and conditional statements in ALGOL 60

In this note compiling routines will be described for Boolean expressions involving the operators V, / ~ and -1, which will then be used in describing proeedures for compiling conditional statements and Boolean assignment statements as defined in AL(mL 60).

A comment on index register allocation

A technique is presented to reduce the enumeration required by o known procedure for optimal index register allocation in straight-line programs. This technique is based on the construction of a link

Object code optimization

Methods of analyzing the control flow and data flow of programs during compilation are applied to transforming the program to improve object time efficiency and implementation of these and other optimizations in OS/360 FORTRAN H are described.

Global common subexpression elimination

  • J. Cocke
  • Computer Science
    Symposium on Compiler Optimization
  • 1970
The reasons why optimization is required seem to me to fall in two major categories; the first I will call “local” and the second “global”.

Compiler Assignment of Data Items to Registers

Three algorithms are described for obtaining feasible solutions to the many-one and many-few global assignment problems, one of which appears to be sufficiently fast for inclusion in an optimizing compiler.