Simple Generation of Static Single-Assignment Form

  • John Aycock
  • Nigel Horspool
Conference paper
Part of the Lecture Notes in Computer Science book series (LNCS, volume 1781)


The static single-assignment (SSA) form of a program provides data flow information in a form which makes some compiler optimizations easy to perform. In this paper we present a new, simple method for converting to SSA form, which produces correct solutions for nonreducible control-flow graphs, and produces minimal solutions for reducible ones. Our timing results show that, despite its simplicity, our algorithm is competitive with more established techniques.


Basic Block Minimal Solution Minimization Phase Simple Generation Redundancy Elimination 
These keywords were added by machine and not by the authors. This process is experimental and the keywords may be updated as the learning algorithm improves.


  1. 1.
    A. V. Aho, R. Sethi, and J. D. Ullman. Code Optimization and Finite Church-Rosser Systems. In Design and Optimization of Compilers, R. Rustin, ed. Prentice Hall, 1971, pp. 89–105. 118Google Scholar
  2. 2.
    B. Alpern, M. N. Wegman, and F. K. Zadeck. Detecting Equality of Variables in Programs. Proceedings of the Fifteenth Annual ACM Symposium on Principles of Programming Languages, 1988, pp. 1–11. 111Google Scholar
  3. 3.
    A.W. Appel. SSA is Functional Programming. ACM SIGPLAN 33, 4 (April 1998), pp. 17–20. 111, 112CrossRefGoogle Scholar
  4. 4.
    A. W. Appel. Modern Compiler Implementation in Java. Cambridge, 1998. 111Google Scholar
  5. 5.
    M. M. Brandis and H. Mössenböck. Single-Pass Generation of Static Single-Assignment Form for Structured Languages. ACM TOPLAS 16, 6 (November 1994), pp. 1684–1698. 122CrossRefGoogle Scholar
  6. 6.
    P. Briggs, T. Harvey, and T. Simpson. Static Single Assignment Construction, Version 1.0. Unpublished document, 1995. 115Google Scholar
  7. 7.
    J.-D. Choi, R. Cytron, and J. Ferrante. Automatic Construction of Sparse Data Flow Evaluation Graphs. ACM POPL’ 91, pp. 55–66. 122Google Scholar
  8. 8.
    F. Chow, S. Chan, R. Kennedy, S.-M. Liu, R. Lo, and P. Tu. A New Algorithm for Partial Redundancy Elimination based on SSA Form. ACM PLDI’ 97, pp. 273–286. 123Google Scholar
  9. 9.
    R. K. Cytron and J. Ferrante. Efficiently Computing φ-Nodes On-The-Fly. ACM TOPLAS 17, 3 (May 1995), pp. 487–506. 122CrossRefGoogle Scholar
  10. 10.
    R. Cytron, J. Ferrante, B. K. Rosen, M. N. Wegman, and F. K. Zadeck. Efficiently Computing Static Single-Assignment Form and the Control Dependence Graph. ACM TOPLAS 13, 4 (October 1991), pp. 451–490. 111, 112, 119, 120, 122, 123CrossRefGoogle Scholar
  11. 11.
    R. Cytron, A. Lowry, K. Zadeck. Code Motion of Control Structures in High-Level Languages. Proceedings of the Thirteenth Annual ACM Symposium on Principles of Programming Languages, 1986, pp. 70–85. 122Google Scholar
  12. 12.
    M. J. Fischer. Efficiency of Equivalence Algorithms. In Complexity of Computer Computations, R. E. Miller and J. W. Thatcher, eds. Plenum Press, 1972. 120Google Scholar
  13. 13.
    M. S. Hecht. Flow Analysis of Computer Programs, North-Holland, 1977. 116, 118Google Scholar
  14. 14.
    M. S. Hecht and J. D. Ullman. Flow Graph Reducibility. SIAM Journal of Computing 1, 2 (June 1972), pp. 188–202. 115, 118, 119CrossRefMathSciNetGoogle Scholar
  15. 15.
    J. E. Hopcroft and J. D. Ullman. Set Merging Algorithms. SIAM Journal of Computing 2, 4 (December 1973), pp. 294–303. 120CrossRefMathSciNetGoogle Scholar
  16. 16.
    R. Johnson, D. Pearson, and K. Pingali. The Program Structure Tree: Computing Control Regions in Linear Time. ACM PLDI’ 94, pp. 171–185. 122Google Scholar
  17. 17.
    D. E. Knuth. An Empirical Study of FORTRAN Programs. Software — Practice and Experience 1, 1971, pp. 105–133. 112Google Scholar
  18. 18.
    D. E. Knuth. The Art of Computer Programming, Volume 1: Fundamental Algorithms, Addison Wesley, 1997. 120Google Scholar
  19. 19.
    D. B. Loveman and R. A. Faneuf. Program Optimization — Theory and Practice. Conference on Programming Languages and Compilers for Parallel and Vector Machines, 1975, pp. 97–102. 122Google Scholar
  20. 20.
    R. Morgan. Building an Optimizing Compiler, Digital Press, 1998. 115Google Scholar
  21. 21.
    S. S. Muchnick. Advanced Compiler Design and Implementation. Morgan Kaufmann, 1997. 111Google Scholar
  22. 22.
    B. K. Rosen, M. N. Wegman, and F. K. Zadeck. Global Value Numbers and Redundant Computations. Proceedings of the Fifteenth Annual ACM Symposium on Principles of Programming Languages, 1988, pp. 12–27. 122Google Scholar
  23. 23.
    R. M. Shapiro and H. Saint. The Representation of Algorithms. Rome Air Development Center TR-69-313, Volume II, September 1969. 122Google Scholar
  24. 24.
    V. C. Sreedhar and G. R. Gao. A Linear Time Algorithm for Placing φ-Nodes. Proceedings of the Twenty-Second Annual ACM Symposium on Principles of Programming Languages, 1995, pp. 62–73. 122Google Scholar
  25. 25.
    R. E. Tarjan. Efficiency of a Good But Not Linear Set Union Algorithm. JACM 22, 2 (April 1975), pp. 215–225. 120CrossRefMathSciNetGoogle Scholar
  26. 26.
    J. D. Ullman. Fast Algorithms for the Elimination of Common Subexpressions. Acta Informatica 2, 1973, pp. 191–213. 119Google Scholar
  27. 27.
    M. N. Wegman and F. K. Zadeck. Constant Propagation with Conditional Branches. ACM TOPLAS 13, 2 (April 1991), pp. 181–210. 111, 112CrossRefGoogle Scholar

Copyright information

© Springer-Verlag Berlin Heidelberg 2000

Authors and Affiliations

  • John Aycock
    • 1
  • Nigel Horspool
    • 1
  1. 1.Department of Computer ScienceUniversity of VictoriaVictoriaCanada

Personalised recommendations