In optimizing compilers, data structure choices directly influence the power and efficiency of practical program optimization. A poor choice of data structure can inhibit optimization or slow compilation to the point that advanced optimization features become undesirable. Recently, static single assignment form and the control dependence graph have been proposed to represent data flow and control flow propertiee of programs. Each of these previously unrelated techniques lends efficiency and power to a useful class of program optimization. Although both of these structures are attractive, the difficulty of their construction and their potential size have discouraged their use. We present new algorithms that efficiently compute these data structures for arbitrary control flow graphs. The algorithms use dominance frontiers, a new concept that may have other applications. We also give analytical and experimental evidence that all of these data structures are usually linear in the size of the original program. This paper thus presents strong evidence that these structures can be of practical use in optimization. Categories and Subject Descriptors: D.3.3 [Programming Languages]: Language
|
675
|
The program dependence graph and its use in optimization
– Ferrante, Ottenstein, et al.
|
|
420
|
Optimizing supercompilers for supercomputers
– Wolfe
- 1982
|
|
360
|
Register allocation and spilling via graph coloring
– Chaitin
- 1982
|
|
320
|
Analysis of pointers and structures
– Chase, Wegman, et al.
- 1990
|
|
266
|
Constant propagation with conditional branches
– Wegman, Zadeck
- 1991
|
|
216
|
Integrating noninterfering versions of programs
– Horwitz, Prins, et al.
- 1989
|
|
177
|
Flow analysis and optimization of Lisp-like structures
– Jones, Muchnick
- 1981
|
|
165
|
Register Allocation via Coloring
– Chaitin, Auslander, et al.
- 1981
|
|
150
|
Detecting Conflicts Between Structure Access
– Larus, Hilfinger
- 1988
|
|
149
|
The priority-based coloring approach to register allocation. ACM Transactions on Pro~ramming Languages and Systems 12
– Chow
- 1990
|
|
148
|
Global value numbers and redundant computation
– Rosen, Wegman, et al.
- 1988
|
|
131
|
Dependence Analysis for Pointer Variables
– Horwitz, Pfeiffer, et al.
- 1989
|
|
118
|
The program dependence web: a representation supporting control-, data-, and demand-driven interpretation of imperative languages
– Ottenstein, Ballance, et al.
- 1990
|
|
118
|
An efficient way to find the side effects of procedure calls and the aliases of variables
– Banning
- 1979
|
|
114
|
A fast algorithm for finding dominators in a flowgraph
– Lengauer, Tarjan
- 1979
|
|
111
|
Interprocedural dependence analysis and parallelization
– Burke, Cytron
- 1986
|
|
109
|
First version of a dataflow procedure language
– Dennis
- 1974
|
|
109
|
A precise inter-procedural data flow algorithm
– Myers
- 1981
|
|
106
|
Automatic construction of sparse data flow evaluation graphs
– Choi, Cytron, et al.
- 1991
|
|
105
|
An overview of the ptran analysis system for multiprocessing
– Allen, Burke, et al.
- 1988
|
|
102
|
The Structure of Computers and Computations
– Kuck
- 1978
|
|
85
|
Dependence analysis for subscripted variables and its application to program transformation
– Allen
- 1983
|
|
74
|
An interval-based approach to exhaustive and incremental interprocedural data-flow analysis
– Burke
- 1990
|
|
66
|
A portable machine-independent global optimizer—Design and measurements
– Chow
- 1983
|
|
64
|
An interprocedural data flow analysis algorithm
– Barth
- 1977
|
|
57
|
The semantics of program dependence
– CARTWRIGHT, FLLEISEN
|
|
56
|
Matrix Eigensystem Routines — EISPACK Guide
– Smith, Boyle, et al.
- 1976
|
|
54
|
A survey of data flow analysis techniques
– Kennedy
- 1981
|
|
53
|
Lifetime Analysis of Dynamically Allocated Objects
– Ruggieri, Murtagh
- 1988
|
|
53
|
Compiling C for vectorization, parallelization, and inline expansion
– Allen, Johnson
- 1988
|
|
46
|
Finding Dominators in Directed Graphs
– Tarjan
- 1974
|
|
42
|
Code motion of control structures in high-level languages
– Cytron, Lowry, et al.
- 1986
|
|
40
|
Symbolic program analysis in almost linear time
– Reif, Tarjan
- 1981
|
|
37
|
A Linear Time Algorithm for Finding Dominators in Flow Graphs and Related Problems
– Harel
- 1985
|
|
35
|
Restructuring Symbolic Programs for Concurrent Execution on Multiprocessors
– Larus
- 1989
|
|
31
|
Safety considerations for storage allocation optimizations
– Chase
- 1988
|
|
30
|
Detecting program components with equivalent behaviors
– YANG, HORWITZ, et al.
- 1989
|
|
29
|
Data Flow Analysis for Procedural Languages
– Rosen
- 1979
|
|
24
|
The representation of algorithms
– Shapiro, Saint
|
|
21
|
Property Extraction in Well-Founded Property Sets
– Wegbreit
- 1975
|
|
18
|
Detecting Equality of Values in Programs
– Alpern, Wegman, et al.
- 1988
|
|
13
|
What's in a Name
– Cytron, Ferrante
- 1987
|
|
10
|
Interprocedural data flow analysis in a programming environment
– Cooper
- 1983
|
|
8
|
Efficient symbolic analysis of programs
– Reif, Lewis
- 1986
|
|
6
|
An improved control dependence algorithm
– Cytron, Ferrante
- 1987
|
|
6
|
A formal framework for the derivation of machine-specific optimizers
– GIEGERICH
- 1983
|
|
6
|
Program Flow Analysis
– Muchnick, Jones
- 1981
|
|
5
|
Perfect report: 1
– Pointer
- 1989
|
|
3
|
Global dead computation elimination
– KENNEDY
- 1973
|
|
1
|
An overview of the PTRAN analysis system for multiprocessing
– Addison-Wesley, Mass
- 1986
|