Die Phi-Funktion (φ-Funktion) ist ein Konstrukt im Compilerbau.

Bei der internen Darstellung von Programmcode in der Static-Single-Assignment-Darstellung wird jede Variable nur einmal geschrieben. Da so in alternativen Zweigen verschiedene Variablen geschrieben werden, muss nach der Vereinigung des Kontrollflusses (z. B. nach einem if/then/else) das Problem gelöst werden, dass späterer Code nur auf eine Variable zugreifen kann.

Gelöst wird das Problem über die Phi-Funktion, die ihre Parameter abhängig vom tatsächlich genommenen Kontrollfluss als Ergebnis zurückgibt.

Sie ist keine deterministische Funktion, da ihr Ergebnis von nicht parametrisierten Nebeneffekten abhängt. Aus dem Ausdruck phi(a_1, a_2) allein lässt sich nicht folgern, ob das Ergebnis a_1 oder a_2 ist.

Beispiel

Der Code-Block

if (c)
   a = b + d;
else
   a = e + f;
x = 2 * a;

wird in der SSA-Form mit Hilfe der Phi-Funktion zu:

if (c_1)
   a_1 = b_1 + d_1;
else
   a_2 = e_1 + f_1;
x_1 = 2 * phi(a_1, a_2);

Literatur

  • Appel, Andrew W.: Modern Compiler Implementation in ML. Cambridge University Press, 1999, ISBN 0-521-58274-1.
  • Cooper, Keith D.; and Torczon, Linda: Engineering a Compiler. Morgan Kaufmann, 2003, ISBN 1-55860-698-X.
  • Muchnick, Steven S.: Advanced Compiler Design and Implementation. Morgan Kaufmann, 1997, ISBN 1-55860-320-4.
This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.