Compiler
Wandelt man den obigen Code in SSA-Form um, so erscheint nach der if-Anweisung ein Ausdruck wie „x3 = φ(x1, x2)“. Welche Funktion der φ-Funktion ist richtig?
if (c) x = 1;
else x = 2;
y = x + 3;
- ASie wählt von x1 und x2 den größeren Wert und gibt ihn zurück
- BSie berechnet die Summe von x1 und x2 und gibt sie zurück
- CSie wählt je nach durchlaufenem Pfad x1 oder x2
Antwort und Erläuterung anzeigen
Antwort: C. Sie wählt je nach durchlaufenem Pfad x1 oder x2
In der SSA-Form erhalten die Zuweisungen im then-Zweig x1 und im else-Zweig x2 unterschiedliche Namen, sodass bei der Berechnung von y nach dem Zusammenfluss ausgedrückt werden muss, welches x zu verwenden ist. Die φ-Funktion ist ein Symbol für die Wertauswahl an der Zusammenflussstelle: kommt die Ausführung aus dem then-Zweig, wird x1 gewählt, aus dem else-Zweig x2. Im tatsächlichen Maschinencode gibt es keinen φ-Befehl; sie wird am Ende durch Registerkopien o. Ä. ersetzt. Mit Größenvergleich oder Summe hat sie nichts zu tun.