Static single-assignment form: Difference between revisions

Content deleted Content added
Hiraditya (talk | contribs)
No edit summary
Hiraditya (talk | contribs)
Line 57:
Φ functions are not implemented as machine operations on most machines. A compiler can implement a Φ function by inserting "move" operations at the end of every predecessor block. In the example above, the compiler might insert a move from <var>y</var><sub>1</sub> to <var>y</var><sub>3</sub> at the end of the middle-left block and a move from <var>y</var><sub>2</sub> to <var>y</var><sub>3</sub> at the end of the middle-right block. These move operations might not end up in the final code based on the compiler's [[register allocation]] procedure. However, this approach may not work when simultaneous operations are speculatively producing inputs to a Φ function, as can happen on [[wide-issue]] machines. Typically, a wide-issue machine has a selection instruction used in such situations by the compiler to implement the Φ function.
 
According to Kenny Zadeck,<ref>see page 4340 titled ["The Origin of Ф-Functions and the Name"] of Zadeck, F. Kenneth, [httphttps://citi2compilers.ricecs.eduuni-saarland.de/WS07ssasem/KennethZadecktalks/Kenneth.Zadeck.pdf ''Presentation on the History of SSA''] at the [http://www.prog.uni-saarland.de/ssasem/ SSA'09 Seminar], Autrans, France, April 2009</ref> Φ functions were originally known as ''phony'' functions while SSA was being developed at IBM Research in the 1980s. The formal name of a Φ function was only adopted when the work was first published in an academic paper.
 
===Computing minimal SSA using dominance frontiers===