This paper presents a new approach called SSAPRE [Chow et al. 1997] that shares the optimality properties of the best prior work [Knoop et al. 1992; Knoop et al. 1994; Drechsler and Stadel 1993] and that is based on static single assignment form. Static single assignment form (SSA) is a popular program representation in modern optimizing compilers. Its versatility stems from the fact that, in addition to representing the program, it provides accurate use-definition (use-def) relationships among the program variables in a concise form [Cytron et al. 1991; Wolfe 1996; Chow et al. 1996]. Many efficient global optimization algorithms have been developed based on SSA. Among these optimizations are dead store elimination [Cytron et al. 1991], constant propagation [Wegman and Zadeck 1991], value numbering [Alpern et al. 1988; Rosen et al. 1988; Briggs et al. 1997], induction variable analysis [Gerlek et al. 1995; Liu et al. 1996], live range computation [Gerlek et al. 1994] and global code motion [Click 1995]. Until recently, most uses of SSA have been restricted to solving problems based essentially on program variables. SSA could not readily be applied to solving expression-based problems because the concept of use-def for expressions is less obvious than for variables. This difficulty was mentioned by Dhamdhere et al. in the conclusion of [Dhamdhere et al. 1992]. They state, essentially, that there is no clear connection between the use-def information for variables represented by SSA form and the redundancy properties for expressions. By demonstrating such a connection and exploiting it, our work shows that an SSA-based approach to PRE and other expression-based problems is not only plausible, but also enlightening and practical. Although this paper addresses only the PRE ...
|
713
|
Advanced Compiler Design and Implementation
– Muchnick
- 1997
|
|
644
|
Efficiently computing static single assignment form and the control dependence graph
– Cytron, Ferrante, et al.
- 1991
|
|
553
|
High performance compilers for parallel computing
– Wolfe
|
|
265
|
Constant propagation with conditional branches
– Wegman, Zadeck
- 1991
|
|
167
|
Global optimization by suppression of partial redundancies
– Morel, Renvoise
- 1979
|
|
148
|
Global value numbers and redundant computation
– Rosen, Wegman, et al.
- 1988
|
|
143
|
Lazy code motion
– Knoop, RĂ¼thing, et al.
|
|
107
|
Optimal code motion: Theory and practice
– Knoop, uthing, et al.
- 1994
|
|
106
|
Automatic construction of sparse data flow evaluation graphs
– Choi, Cytron, et al.
- 1991
|
|
94
|
Beyond induction variables, detecting and classifying sequences using a demanddriven ssa form
– Gerlek, Stoltz, et al.
- 1995
|
|
79
|
Effective partial redundancy elimination
– Briggs, Cooper
- 1994
|
|
73
|
Minimizing register usage penalty at procedure calls
– Chow
- 1988
|
|
66
|
A portable machine-independent global optimizer { design and measurements
– Chow
- 1983
|
|
63
|
A new algorithm for partial redundancy elimination based on SSA form
– Chow, Chan, et al.
- 1997
|
|
58
|
How to analyze large programs efficiently and informatively
– Dhamdhere, Rosen, et al.
|
|
50
|
Value numbering
– Briggs, Cooper, et al.
- 1997
|
|
40
|
The program structure tree: Computing control regions in linear time
– Johnson, Pearson
- 1994
|
|
38
|
A solution to a problem with Morel and Renvoise's "Global optimization by suppression of partial redundancies
– Drechsler, Stadel
- 1988
|
|
35
|
Register promotion by sparse partial redundancy elimination of loads and stores
– Lo, Chow, et al.
- 1998
|
|
29
|
Value-Driven Redundancy Elimination
– Simpson
- 1996
|
|
28
|
A fast algorithm for code movement optimization
– Dhamdhere
- 1988
|
|
26
|
A variation of Knoop, Ruthing, and Steffen's lazy code motion
– Drechsler, Stadel
- 1993
|
|
24
|
Lazy strength reduction
– Knoop, Ruthing, et al.
- 1993
|
|
21
|
Global code motion, global value numbering
– Click
- 1995
|
|
21
|
A linear time algorithm for placing OE-nodes
– Sreedhar, Gao
- 1995
|
|
19
|
A composite hoisting-strength reduction transformation for global program optimization (part II
– Joshi, Dhamdhere
- 1982
|
|
18
|
Detecting Equality of Values in Programs
– Alpern, Wegman, et al.
- 1988
|
|
13
|
A new algorithm for composite hoisting and strength reduction optimisation
– Dhamdhere
- 1989
|
|
13
|
An optimizer for Ada - design, experiences and results
– Schwarz, Kirchgassner, et al.
- 1988
|
|
12
|
Incremental Computation of Static Single Assignment Form
– Choi, Sarkar, et al.
- 1996
|
|
11
|
Strength reduction via SSAPRE
– Kennedy, Chow, et al.
- 1998
|
|
8
|
Strength reduction of large expressions
– Dhaneshwar, Dhamdhere
- 1995
|
|
7
|
Safety of code motion
– Kennedy
- 1972
|
|
7
|
Loop induction variable canonicalization in parallelizing compilers
– Liu, Lo, et al.
- 1996
|
|
4
|
Engineering a RISC compiler
– Chow, Himelstein, et al.
- 1986
|
|
3
|
A reference chain approach for live variables
– Gerlek, Wolfe, et al.
- 1994
|
|
1
|
Effective representation of aliases and
– Chow, Chan, et al.
- 1996
|