[PDF][PDF] SSA is functional programming
AW Appel - Acm Sigplan Notices, 1998 - dl.acm.org
Acm Sigplan Notices, 1998•dl.acm.org
Static Single-Assignment (SSA) form is an intermediate language designed to make
optimization clean and efficient for imperative-language (Fortran, C) compilers. Lambda-
calculus is an intermediate language that makes optimization clean and efficient for
functionallanguage (Scheme, ML, Haskell) compilers. The SSA community draws pictures of
graphs with basic blocks and flow edges, and the functional-language community writes
lexically nested functions, but (as Richard Kelsey recently pointed out [9]) they're both doing …
optimization clean and efficient for imperative-language (Fortran, C) compilers. Lambda-
calculus is an intermediate language that makes optimization clean and efficient for
functionallanguage (Scheme, ML, Haskell) compilers. The SSA community draws pictures of
graphs with basic blocks and flow edges, and the functional-language community writes
lexically nested functions, but (as Richard Kelsey recently pointed out [9]) they're both doing …
Static Single-Assignment (SSA) form is an intermediate language designed to make optimization clean and efficient for imperative-language (Fortran, C) compilers. Lambda-calculus is an intermediate language that makes optimization clean and efficient for functionallanguage (Scheme, ML, Haskell) compilers. The SSA community draws pictures of graphs with basic blocks and flow edges, and the functional-language community writes lexically nested functions, but (as Richard Kelsey recently pointed out [9]) they're both doing exactly the same thing in different notation.
SSA form. Many dataflow analyses need to find the use-sites of each defined variable or the definition-sites of each variable used in an expression. The def-use chain is a data structure that makes this efficient: for each statement in the flow graph, the compiler can keep a list of pointers to all the use sites of variables defined there, and a list of pointers to all definition sites of the variables used there. But when a variable has N definitions and M uses, we might need N• M pointers to connect them.