An improved technique for incrementally updating a source code
representation having cloned variable name definitions to static single
assignment (SSA) form is described. The technique receives an intermediate
representation of a source program in non-SSA form having one or more
cloned variable name definitions that correspond to an original variable
name. All the original variable names and their corresponding cloned
variable names are collected. An iterative dominance frontier set for
those nodes containing a cloned variable name definition or an original
variable name definition is formed. This iterative dominance frontier set
is then used to determine the nodes in which a single phi-function is
inserted for each original variable name. Each use of an original variable
name is changed to the cloned variable name that reaches the use. The
arguments of the inserted phi-functions are then updated with the cloned
variable names that reach the inserted phi-functions. Finally, all dead
instructions including the original variable definitions, redundant cloned
variable definitions, and redundant inserted phi-functions are eliminated.
Eine verbesserte Technik für eine Quellenprogrammdarstellung zusätzlich aktualisieren, die variable Namensdefinitionen zur statischen einzelne Anweisung (SSA) geklont wird Form wird beschrieben. Die Technik empfängt eine Zwischendarstellung eines Quellenprogramms in der non-SSA Form, die eins hat oder mehr klonten variable Namensdefinitionen, die einem ursprünglichen variablen Namen entsprechen. Alle ursprünglichen variablen Namen und ihre entsprechenden geklonten variablen Namen werden gesammelt. Ein wiederholender Herrschaftgrenzsatz für jene Nullpunkte, die eine geklonte variable Namensdefinition oder eine ursprüngliche variable Namensdefinition enthalten, wird gebildet. Dieser wiederholende Herrschaftgrenzsatz wird dann benutzt, um die Nullpunkte festzustellen, in denen eine einzelne Phi-Funktion für jeden ursprünglichen variablen Namen eingesetzt wird. Jeder Gebrauch von einem ursprünglichen variablen Namen wird zum geklonten variablen Namen geändert, der den Gebrauch erreicht. Die Argumente der eingesetzten Phi-Funktionen werden dann mit den geklonten variablen Namen aktualisiert, die die eingesetzten Phi-Funktionen erreichen. Schließlich werden alle toten Anweisungen einschließlich die ursprünglichen variablen Definitionen, die überflüssigen geklonten variablen Definitionen und die überflüssigen eingesetzten Phi-Funktionen beseitigt.